1. android coremp 怎麼生成 kill
查看 error log:
可以看到前面這串文字是一個函數簽名的編碼,用 c++filt 還原編碼以後,可以看到完整的函數簽名。
紅框內的這串信息的意思就是崩潰位置是 一個函數起始位置 + 偏移量。
我們大概可以猜到,這個 MySQL 的缺陷是在為 binlog 產生新的文件名時發生的。
小貼士:
函數起始位置 + 偏移量 是一種內存位置的表示方法,但該位置不一定是這個函數內的代碼。
以本例來說,0xee36f1 這個位置,程序找到了就近的函數 generate_new_name 的起始位置,計算出有 0x71 這么多偏移,就表示成了 generate_new_name+0x71 這種形式。
但 0xee36f1 這個位置的代碼,大概率是,但,不一定是 generate_new_name 這個函數內部的一段代碼。
2. 常用的安卓手機adb命令總結
很早就想整理一下自己平時常用的一些adb命令,不僅為了便於以後查找,而且整理的過程自己又重新復習了一遍,但是當我開始在度娘一搜的時候,發現很多人已經寫的非常詳細了,尤其是當我發現了這篇adb概括
心中一句NND,怎麼可以寫的這么詳細,瞬間沒了想寫這篇文章的慾望,如果你點了鏈接發現確實很全,那麼恭喜你可以關掉這篇了,哈哈哈。
我就不這么想的,雖然很全,但不是我常用的,因人而異,所以我就權當記筆記+替這哥們宣傳了。
– adb devices , 獲取設備列表及設備狀態
設備的狀態有 3 種
device , 設備連接正常
offline , 設備離線,連接出現異常
unauthorized 設備為進行授權,需要在設備上是否允許調試對話框進行授權
offline情況解決辦法,先執行adb kill-server 命令,再執行adb start-server 命令,再嘗試adb devices 查看列表,如果還是offline,來來來,使用必殺技,重啟大法。
當電腦連接多個android設備並可用時,所有的adb命令都需要指定設備後執行(當然你也可以移除多餘的設備)
adb -s <設備名稱> install/uninstall/shell/pull/push等命令
– adb install app在pc硬碟路徑,選中app直接拖入即可
常見的錯誤情況
INSTALL_FAILED_TEST_ONLY, 安裝的app的debug版本的,未簽名,adb install -t 路徑即可安裝
INSTALL_FAILED_DUPLICATE_PACKAGE, 已經安裝相同包名的app, 先卸載再安裝
– adb uninstall app的包名,卸載app
adb pull 將 Android 設備上的文件或者文件夾復制到本地
adb pull sdcard/Android/111.txt E:\
小技巧,可以將本地路徑指定為桌面,方便查看, 在桌面按住shift鍵,滑鼠右鍵選擇在此處打開命令行窗口,直接輸入adb pull sdcard/Android/111.txt 執行,就可將111.txt復制到桌面。
前提是設備已經獲取root許可權
adb root
adb remount
adb push 將pc上文件復制到android設備中,修改room原生應用時比較頻繁使用,如settings.apk, launcher3.apk
– adb shell pm 命令
adb shell pm list package 列出android設備上的所有app
adb shell pm list package -s 列出android設備上的系統級別app
adb shell pm list package -3 列出android設備上的第三方app(用戶安裝的)
adb shell pm list package -f 列出app包名及對應的apk名及存放位置
adb shell pm list package -i 列出app包名及其安裝來源(應用市場名稱)
adb shell pm mp app包名 列出app的相關信息,類似獲取Manifest文件內容
-查看前台 Activity
adb shell mpsys activity activities 「| grep mFocusedActivity」
-adb shell am 命令
最常用的就是啟動指定的activity和發送指定的廣播
啟動指定的activity
操作指令 adb shell am start -n 包名/類名
註:如果啟動activity時,出現如下錯誤
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 > > cmp=com.mediatek.engineermode/.io.Gpio } from null (pid=3083, uid=2000) not exported from uid 1001
解決辦法,1、如果是你自己可控的app,那麼找到你要調用的activity在manifest.xml中,增加
1
配置即可, android:name="" 可以為空字元串。
2、如果是不可控的app,例如我調用的系統原生app,那麼你就洗洗睡吧,別折騰了,除非你修改源碼和上邊一樣操作,重新push替換原來的app。
啟動默認瀏覽器打開一個網頁
adb shell am start -a android.intent.action.VIEW -d * ********
先停止目標應用,再啟動
adb shell am start -s com.android.camera/.Camera
啟動相機
adb shell am start -n com.android.camera/.Camera
啟動設置
adb shell am start -n com.android.settings/com.android.settings.Settings
啟動Wifi設置
adb shell am start -n com.android.settings/com.android.settings.wifi.WifiSettings
啟動藍牙設置
adb shell am start -n com.android.settings/com.android.settings.bluetooth.BluetoothSettings
其它的類似只要你能在manifest中找到配置的,都可以通過這種方法來調用
發送指定的廣播
操作指令 adb shell am broadcast -a 廣播名 --ei/es/ez 參數名 參數值 --ei/es/ez 參數名 參數值
–ei integer 值
–es String 值
–ez boolean 值
–ef float 值
–el long 值
例如之前寫的
Android6.0 源碼修改之Setting列表配置項動態添加和靜態添加, 當中就通過發送廣播來接收增加配置列表項
adb shell am broadcast -a cn.dynamic.add.settingcategoryitem --es location 「0-2」 --es title 「紅」 --es intent 「com.android.settings.SCHEDULE_POWER_ON_OFF_SETTING」
-adb shell input keycode 指令
HOME 鍵 adb shell input keycode 3
返回鍵 adb shell input keycode 4
打開瀏覽器 adb shell input keycode 64
-adb shell wm 指令
屏幕解析度 adb shell wm size
屏幕密度 adb shell wm density
adb shell wm density 320/480/640 可修改屏幕密度查看效果,對應Launcher圖標會縮放
adb shell ifconfig 命令
IP 地址 adb shell ifconfig 「| grep Mask」
WIFI 地址 adb shell ifconfig wlan0
狀態欄和導航欄的顯示隱藏
命令:
adb shell settings put global policy_control
可由如下幾種鍵及其對應的值組成,格式為 key1=value1:key2=value2。
key 含義
immersive.full 同時隱藏
immersive.status 隱藏狀態欄
immersive.navigation 隱藏導航欄
immersive.preconfirms 同時顯示
這些鍵對應的值可則如下值用逗號組合:
value 含義
apps 所有應用
所有界面
packagename 指定應用
packagename 排除指定應用
例如:
adb shell settings put global policy_control immersive.full=*
表示設置在所有界面下都同時隱藏狀態欄和導航欄。(重啟也不會失效,恢復需調用下面的命令)
adb shell settings put global policy_control immersive.preconfirms=*
表示恢復顯示
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
表示設置在包名為 com.package1 和 com.package2 的應用里隱藏狀態欄,在除了包名為 com.package3 的所有應用里隱藏導航欄
adb shell am force-stop app 關閉APP
adb shell pm clear APP app進程被殺死,且會清楚所有數據
1:查找手機安裝應用的包名:adb shell pm list packages -f
2:查看系統盤符:adb shell df
3:查看Log 1:adb shell 2: logcat | grep "abc"
4:刪除應用:1:adbremount 2:adb shell 3:cdsystem/app 4:rm *.apk
5:安裝APK: adbinstall -r *.apk 或者 adb push*.apk /system/app
6:查看APP啟動的時間指令
adb shell am start -W -ncom.android.dialer/.DialtactsActivity (W是大寫)執行命令後APP會自 動啟動,其中ThisTime即是本次 App啟動所花費的時間。
7:查看包名中當前所在進程信息:adb shell ps | grep +包名
8:查看Activity運行的任務棧:adb shell mpsys activity
9:查看鍵值:adb logcat | grep intercep -i
10:查看模塊所佔有的CPU資源:adb shell top -d 2 -m 10
11:查看可用系統的權
$ adb shell
# pm list permissions
12:模擬按鍵的輸入:adb shell input keyevent + 鍵值
eg: adb shell input keyevent 82 表示menu
adb shell input keyevent 3 表示home
adb shell input keyevent 19 表示up
adb shell input keyevent 20 表示down
adb shell input keyevent 21 表示left
adb shell input keyevent 22 表示right
adb shell input keyevent 66 表示enter
adb shell input keyevent 4 表示back
13:模擬滑動輸入:adb shell input touchscreen <x1> <y1> <x2> <y2>
eg: adb shell input touchscreen swipe 18 665 18 350
14:啟動一個Activity : adb shell am start -n 包名+類名
15:錄制屏幕:adb shell screenrecord /sdcard/demo.mp4
16:重新啟動:adb reboot
17:Monkey的基本用法下面是一個更為典型的命令行示例,它啟動指定的應用程序,並向其發送500個偽隨機事件:
$ adb shell monkey -p your.package.name -v 500
如果跑桌面或者systemUi的monkey的話:
adb shell monkey -v -v -p 桌麵包名 --pct-touch 50 --pct-motion 30 --pct-syskeys 20 --throttle 300 -s 200 200000
18:查找第三方應用的詳細信息:
adb shell mpsys package +第三方包名(com.txznet.webchat)
3. android中怎麼kill掉一個activity
直接調用activity的finish()方法即可關掉當前這個activity.
在Android中,Activity有個棧,一個Activity結束掉,會回到上一個Activity,並不是退出應用程序。
Android中,退出應用程序的方式:
1.通過pid
int pid = android.os.Process.myPid(); //獲取當前應用程序的PID
android.os.Process.killProcess(pid); //殺死當前進程
這種方法退出應用,是會保留某些後進程,例如:Service,Notifications等。
2.通過ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); //獲取應用程序管理器
manager.killBackgroundProcesses(getPackageName()); //強制結束當前應用程序
這種方式退出應用,會結束本應用程序的一切活動,因為本方法會根據應用程序的包名殺死所有進程包括Activity,Service,Notifications等。