要執行的話,一定要安裝程式的apk檔,大概整理出三種方式:
1. 發布到Android Market,用手機上的Market程式下載
2. 用usb連接電腦,把apk放到SD卡。或者用網路線,使用ftp, tftp或scp把apk放入。
再來去 設定 -> 應用程式 -> 未知的來源 將之打勾
接著使用第三方應用程式,例如apkInstaller或ASTRO file manager,尋找apk檔的位置,再install即可
若要解除安裝,去 設定 -> 應用程式 -> 管理應用程式 選擇要移除的程式 即可!
3. 使用Android SDK tools中附的adb (android debug bridge) 在console下控制
若有usb,連線後,可下 adb devices看是否有連線到
若無,則連網路線,下adb connect ip:port與機器的adbd連線 但要先準備:
1. 主機和機器之間是區域網路 (至少自己在測的時候 用內網可成功 至於外網自己測時是失敗的 改天要再確認),而且互相ping的到
2. 確認機器上的adbd已經啟動,預設是會監聽port 5037 (有些可直接用5555 不必再設置) 但如果要用TCP/IP連線,必須下
stop adbd
setprop service.adb.tcp.port 5555
start adbd
把監聽port改成 5555 (以上也可寫在init.rc中,讓他開機就會有這個屬性)
在原始碼 (system/core/adb/adb.c line 921) 中 adbd會去看這個property有沒有設置 若有,就用TCP模式去連接機器。若沒有 而且dev/android_adb有USB 就是USB模式 沒有的話就依然使用TCP模式
在機器上可用netstat -a 去看網路裝置的使用情形以及監聽的port為何
最後在主機上 下 adb connect ip:port (例如 192.168.2.100:5000) 就連接成功了 (若有問題可以用adb kill-server把他關掉 在重新做一次)
之後就可以用 adb shell (進入機器的shell) ....等指令 再主機端做控制了
最後就是安裝,同樣利用adb
下adb install xxx.apk 即可 (前提是apk檔要在SDK/tools中)
但此次實作時卻在機器上出現pm找不到的問題
pm是一個script 在原始碼的framwork/base/cmds/pm裡面,從內部可知,他會嘗試解開檔案系統內的pm.jar檔,用Android的exec指令 將程式生成 再下install xx.apk 就會安裝了
但不知是否因為shell被改成busybox的shell的關係,pm放到機器上不能跑,自己寫腳本也不行
因此只好把腳本內的指令直接打在shell上 如此一來便安裝成功
所以,adb install xxx.apk的替代方案是:
adb push xx.apk /temp/location/xx.apk
//把apk放入機器
機器端:
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm install xx.apk
//程式會被裝到/data/app裡 (apk檔的權限要設定為可執行)
rm xx.apk
Reference
沒有留言:
張貼留言