Android中adb push和adb install的使用區別


Android中adb push和adb install的使用區別  轉載

本篇文章由史迎春(@三俗小女子)投稿。轉載請注明原文地址。

在Android實際開發中,經常會使用adb命令,安裝應用程序可以使用adb push 或者adb install。下面就來講講這兩種安裝方式的區別。

  1. adb push 能夠指定安裝目錄。比如執行”adb push xxx.apk system/app” 后,xxx.apk被安裝到了system/app目錄下,此目錄下的軟件為上文中提到的system application。(注意,system/app是只讀的,所以只有有root權限才能push apk進去,而且在push進去的apk會把原本的apk覆蓋掉。)adb push本身的意思是將文件復制到系統中的某個文件夾下,但是將apk push到system/app下並且重啟手機以后會注冊應用程序。
  2. adb install 用此命令安裝的軟件位於 data/app 目錄,帶有參數 -r才能強制安裝,為user application。

由以上兩條可知,adb install和adb push的apk主要區別有:

  push install
目錄 system/app data/app
權限 系統級(權限全開) 用戶級(沒全開)
卸載 root后刪除 可卸載
大小 無限制,自定義 有限制
安裝 pm重新注冊 不會重新弄注冊

手動安裝的APK版本號和系統內置API版本號一樣。

 

更深一層的分析:

1Android系統應用更新機制

  • 系統為每個應用在AndroidMainfest.xml提供了versionName、versionCode兩個屬性。
    • versionName:String類型,用來給應用的使用者來查看版本.
    • versionCode:Integer類型,作為系統判斷應用是否能升級的依據。

2Android系統內置應用更新判斷代碼

  • 代碼來自frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函數的package更新判斷條件

由以上資料分析:

  1. 同一個AP,若在data/app下有更高版本的app,但是system下有舊版本,則follow舊版本。
  2. 又已知如果有兩個以上的AP在同一個進程但是只有一個AP更改了API version則編譯會出錯
  3. 假設有兩個AP:AP1和AP2.兩個AP都在API Version更新以后build通過且install進手機。且系統中有內置AP1是舊版本的,重新開機的時候還是會注冊舊版本的AP1。則此時,系統中就會出現相同進程但是不同版本的AP1(system/app)和AP2(data/app)

綜上,編譯會出錯。

猜測:

  1. 若同一個進程的AP都用同一版本的SDK編譯,push進手機,則可以運行(已驗證)。
  2. 若同一進程的AP都用同一個版本的SDK編譯。install進手機,則可以運行,前提是刪除system/app內所有同一進程AP。(已驗證)
  3. 若同一個進程的AP都用同一個版本的SDK編譯,push/install進手機都可以(待驗證)。

補充:用push時會將原來系統中的對應的apk覆蓋掉,所以,最好先備份出來一份,用如下命令:
        adb pull /system/app/xxxx.apk    /home/ 

android adb push 與 adb install的比較(兩種安裝APK的方法) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM