appium運(yùn)行時(shí)的一些輸出日志适袜。不懂具體的命令是什么意思件甥,所以查了一下:
adb shell getprop ro.build.version.release? ?獲取系統(tǒng)版本:
adb shell getprop ro.build.version.sdk??獲取系統(tǒng)sdk的版本:
http://www.reibang.com/p/6bd0c3ed82fa
我應(yīng)該如何允許訪問非 SDK API?
可以通過使用 adb目胡,在開發(fā)設(shè)備上允許訪問非 SDK API晓猛。
若您想在 adb logcat 中顯示 API 訪問信息,您可通過以下命令更改 API 執(zhí)行策略:
- adb shell settings put global hidden_api_policy_pre_p_apps ?1
- adb shell settings put global hidden_api_policy_p_apps 1
更改回默認(rèn)設(shè)置:
- adb shell settings delete global hidden_api_policy_pre_p_apps
- adb shell settings delete global hidden_api_policy_p_apps
以上命令不需要設(shè)備獲得 Root 權(quán)限险领。
命令最后的數(shù)字分別表示:
https://www.bbsmax.com/A/RnJW72bEJq/
wait-for-device:
如果設(shè)備不聯(lián)機(jī)就不讓執(zhí)行,也就是實(shí)例狀態(tài)是?device?時(shí)可以提前把命令轉(zhuǎn)載在adb的命令器中,在命令器中的命令侨舆,在模擬器/設(shè)備連接之前是不會(huì)執(zhí)行其他命令的,示例如下:
adb wait-for-device shell getprop
需要提醒的是绢陌,這些命令在所有的系統(tǒng)啟動(dòng)起來之前是不會(huì)啟動(dòng)adb的挨下,
所以在所有的系統(tǒng)啟動(dòng)起來之前也不能執(zhí)行其他的命令,例如脐湾,
運(yùn)用install?的時(shí)候就需要Android包臭笆,這些包需要系統(tǒng)完全啟動(dòng),例如:
adb wait-for-device install <app>.apk
上面的命令只有連接上了模擬器/設(shè)備連接上了adb服務(wù)才會(huì)被執(zhí)行秤掌,而在Android系統(tǒng)完全啟動(dòng)前執(zhí)行就會(huì)有錯(cuò)誤發(fā)生愁铺。
https://blog.csdn.net/jq656021898/article/details/89491665
//安裝settings app,輔助設(shè)置設(shè)備的網(wǎng)絡(luò)闻鉴,因?yàn)閡nicodeKeyboard設(shè)置為true茵乱,安裝前先判斷是否已經(jīng)存在于設(shè)備上(注意這里是因?yàn)樾薷牧嗽创a所以才會(huì)去判斷,沒改過源碼的是不判斷的
孟岛,而是每次都會(huì)安裝)
https://blog.csdn.net/fengyulinde/article/details/78798055
adb shell dumpsys命令是用于打印出當(dāng)前系統(tǒng)信息(更切確的說是dumpsys命令,因?yàn)閍db shell只是為了進(jìn)入手機(jī)或模擬器的shell內(nèi)核,使其能夠執(zhí)行dumpsys命令),可以在命令后面加指定的service name(比如activity,location),如果不加則默認(rèn)打印出設(shè)備中所有service的信息
所以上圖中的命令的意思是:
1.準(zhǔn)備往設(shè)備上推送settings apk
2.打印出設(shè)備中io.appium.settings的信息
3.io.appium.settings 已經(jīng)安裝
4.使用apkanalyzer分析電腦上appium自帶的包瓶竭。/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/io.appium.settings/apks/settings_apk-debug.apk
可以看到電腦上的appium自帶的一些安裝包:
5.判斷出手機(jī)上的已經(jīng)安裝的包比電腦上的版本低。
6.準(zhǔn)備將電腦上的安裝包更新到手機(jī)上蚀苛。
7.獲取手機(jī)上的安裝包個(gè)數(shù) ls -t -1 /data/local/tmp/appium_cache 2>&1 || echo _ERROR_ (這一步有啥用在验?玷氏?堵未?)
8.將電腦上的apk,安裝到手機(jī)上盏触。
8.1 先在手機(jī)上創(chuàng)建緩存文件夾:adb -P 5037 -s Q5S5T19528002651 shell mkdir -p /data/local/tmp/appium_cache
8.2 將電腦上的包推送到手機(jī)上的緩存文件夾中:adb -P 5037 -s Q5S5T19528002651 push /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/io.appium.settings/apks/settings_apk-debug.apk /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk
8.3 將安裝包在手機(jī)上進(jìn)行安裝:adb -P 5037 -s Q5S5T19528002651 shell pm install -r -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk
(Android的文件系統(tǒng)是什么樣的渗蟹?块饺??雌芽?授艰?)
https://blog.csdn.net/xiezechang/article/details/8528446
在Android中,除了從界面上啟動(dòng)程序之外世落,還可以從命令行啟動(dòng)程序淮腾,使用的是命令行工具am.
啟動(dòng)的方法為
adb shell
# am start -n {包(package)名}/{包名}.{活動(dòng)(activity)名稱}
(apk包的工程結(jié)構(gòu)是什么樣的?屉佳?谷朝??武花?)
shell appops set io.appium.settings android\:mock_location allow??
看起來像是給 io.appium.settings apk設(shè)置訪問 mock_location的權(quán)限圆凰。
https://blog.csdn.net/xingchenxuanfeng/article/details/52023048
更改系統(tǒng)設(shè)置中的參數(shù)(如修改系統(tǒng)默認(rèn)輸入法)。
[AndroidDriver] Unsetting previous IME com.baidu.input_huawei/.ImeService? ?
//將IME設(shè)置為 appium的輸入法体箕?专钉??
[AndroidDriver] Setting IME to 'io.appium.settings/.UnicodeIME'? ?
// 激活 appium的輸入法
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 shell ime enable io.appium.settings/.UnicodeIME'
//將手機(jī)的默認(rèn)輸入法設(shè)置為appium的輸入法
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 shell ime set io.appium.settings/.UnicodeIME'
開始處理io.appium.uiautomator2.server累铅,判斷是否已經(jīng)安裝跃须,重裝。
開始處理io.appium.uiautomator2.server.test 娃兽,判斷是否已經(jīng)安裝回怜,重裝。
開始處理appium-uiautomator2-server-debug-androidTest.apk换薄,判斷是否已經(jīng)安裝玉雾,重裝。
為什么每次啟動(dòng)都重裝轻要?不耗時(shí)嗎复旬?
為什么這三個(gè)包需要驗(yàn)簽? io.appium.settings就不需要驗(yàn)簽冲泥?
Starting '/Users/xialei/Library/Android/sdk/build-tools/29.0.2/apksigner' with args '["verify","--print-certs","/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v4.3.0.apk"]'
[ADB] Using 'zipalign' from '/Users/xialei/Library/Android/sdk/build-tools/29.0.2/zipalign'
[ADB] /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk' is already zip-aligned. Doing nothing
https://blog.csdn.net/chengbai022/article/details/49944063
在Android SDK中包含了一個(gè)工具名為Zipalign驹碍,它可以優(yōu)化你的APK程序包,我們都知道APK的MIME其實(shí)就是一個(gè)Zip壓縮文件凡恍,通過Zipalign可以讓你的應(yīng)用程序運(yùn)行更快志秃,Android123猜測(cè)從原理上來講應(yīng)該是優(yōu)化Zip文件的解壓速度,畢竟這個(gè)工具的文件名為zip對(duì)齊嚼酝。
?? 在Android平臺(tái)中浮还,數(shù)據(jù)文件存儲(chǔ)在apk文件中,可以多進(jìn)程的訪問闽巩,如果你開發(fā)過Win32可能知道程序的粒度對(duì)齊問題钧舌,不錯(cuò)雖然不是PE格式的文件担汤,在Zip中一樣,資源的訪問可以通過更好的對(duì)其優(yōu)化洼冻,而zipalign使用了4字節(jié)的邊界對(duì)齊方式來影射內(nèi)存崭歧,通過空間換時(shí)間的方式提高執(zhí)行效率。
shell mkdir -p /data/local/tmp/appium_cache
-p的意思是 parent撞牢,父目錄率碾。 如果父目錄不存在,則創(chuàng)建父目錄屋彪。
前面幾行里也有創(chuàng)建這個(gè)文件夾播掷,但是沒有-p。 我發(fā)現(xiàn)撼班,開源的東西歧匈,寫的比較亂,因?yàn)楦鞣N人都在開發(fā)砰嘁,開發(fā)的風(fēng)格不一樣件炉,而且有可能并沒有把之前的內(nèi)容都看完,所以上面創(chuàng)建了一個(gè)目錄矮湘,下面又重新創(chuàng)建一個(gè)一模一樣的目錄斟冕。
adb -P 5037 -s Q5S5T19528002651 shell pm list instrumentation
instrumentation是什么??
https://www.cnblogs.com/insist8089/p/6897037.html
https://developer.android.google.cn/studio/command-line/adb
看了一堆解釋缅阳,依然不明白instrumentation是什么?纳摺!J臁秀撇!
[UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[ADB] Forwarding system: 8200 to device: 6790
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 forward tcp\:8200 tcp\:6790'
[UiAutomator2] No app capability. Assuming it is already on the device
https://blog.csdn.net/python_jeff/article/details/101348248#android
為什么會(huì)提示這個(gè)錯(cuò)誤?
[UiAutomator2] Forwarding UiAutomator2 Server port 6790 to 8200
[ADB] Forwarding system: 8200 to device: 6790
[ADB] Running '/Users/xialei/Library/Android/sdk/platform-tools/adb -P 5037 -s Q5S5T19528002651 forward tcp\:8200 tcp\:6790'
設(shè)置端口轉(zhuǎn)發(fā)
您可以使用?forward?命令設(shè)置任意端口轉(zhuǎn)發(fā)向族,將對(duì)特定主機(jī)端口上的請(qǐng)求轉(zhuǎn)發(fā)到設(shè)備上的其他端口呵燕。以下示例介紹了如何設(shè)置主機(jī)端口 6100 到設(shè)備端口 7100 的轉(zhuǎn)發(fā):
? ? adb forward tcp:6100 tcp:7100
以下示例介紹了如何設(shè)置主機(jī)端口 6100 到 local:logd 的轉(zhuǎn)發(fā):
? ? adb forward tcp:6100 local:logd
[UiAutomator2] No obsolete sessions have been detected (Error: getaddrinfo ENOTFOUND localhost localhost:8200)
查了網(wǎng)上的資料,說是hosts中沒有設(shè)置localhost
設(shè)置一下件相,重啟appium試一試再扭。
然后悲催的是 appium又出現(xiàn)了別的問題:
找不到 io.appium.settings這個(gè)進(jìn)程。
把之前開啟的終端關(guān)掉(終端中使用了adb連接手機(jī)夜矗,難道是因?yàn)榻K端中連接了手機(jī)泛范?),又把手機(jī)拔掉重新連上電腦紊撕,重啟appium罢荡。可以了。
[WD Proxy] Got response with status 200: {"sessionId":"None","value":{"ready":true,"message":"UiAutomator2 Server is ready to accept commands"}}
[UiAutomator2] The initialization of the instrumentation process took 3096ms
終于看到了這樣的提示柠傍。看來是已經(jīng)可以執(zhí)行case了辩稽。