android系統上,應用程式安裝在什麼位置呢?
根據經驗,大家都會這麼說,系統的應用安裝在/system/app/ 目錄下 以apk和odex兩個檔案共同表達一個應用程式;
自己安裝的軟體自然是安裝在/data/app目錄下,也是以apk形式存在。
好像沒有什麼問題,但是為什麼我安裝的好多程式在這兩個目錄下找不到呢?
因為除了這兩個目錄 它還可以存在於其他目錄,一邊理解,一邊尋找吧。
1.已經安裝到android上的應用程式的存在形式:
首先必須要有apk存在,否則這個程式就等於沒有安裝,你可以試著把上面提到的system/app下
的檔案刪除試試,那個程式馬上就會從系統中消失;
其次運行過程中,肯定不是apk格式,沒錯,apk程式是在dalvik虛擬機器上啟動並執行(就是一個java虛擬機器),很容易想到apk要解包了,
看看/data/dalvik-cache目錄,下面就是解壓出來的dex檔案。
最後 還有一些檔案,是存在/data/data目錄下的 這裡面主要是資料庫,lib庫等。
2.如何準確找到apk的位置
開發人員一般都想找到apk檔案,以為可以反編譯,可以獲得自己想要的技術點。
1) 開啟usb偵錯模式,把/data/system/packages.xml檔案取下來
2)搜尋找到你要找的軟體,例如,下面這段,直接就看到codePath了
<package name="com.zplus" codePath="/mnt/asec/com.zplus-2/pkg.apk" nativeLibraryPath="/mnt/asec/com.zplus-2/lib" flags="262144" ft="13325271c40" it="133244107eb" ut="1332527411a" version="5" userId="10161"><sigs count="1"><cert index="4" key="3082022730820190a00302010202044d74986c300d06092a864886f70d01010505003057310b3009060355040613023836310e300c060355040813056368696e613110300e060355040713076e616e6a696e67310b3009060355040a13026877310b3009060355040b13026e62310c300a060355040313037a68753020170d3131303330373038333334385a180f32303631303232323038333334385a3057310b3009060355040613023836310e300c060355040813056368696e613110300e060355040713076e616e6a696e67310b3009060355040a13026877310b3009060355040b13026e62310c300a060355040313037a687530819f300d06092a864886f70d010101050003818d0030818902818100b816326c12b8a2f06b08d758bbb6b804e4aedeed7411b09f90fb93b664aea406988f14f5b142b3de7da44cb6de775ce7908397d147037baf7a30310c81e89687f27d1f889bf81f049af9f2857f695b10ee747789891b27f9f27594b085eba63c8885d70995c10f9a7319bad9047ab44ad214de4c96fb3d54a162c505e40316070203010001300d06092a864886f70d0101050500038181001eb2acb12420c10ba15391761ac82b02fe18450744a18f0e38c5e22397e1938f6beca53b3b78a684a90679e96fb0c9c80d0aff176fc1581a0f14012fe90f6a44ed5e0aa33af6436cab151f704b3297bbfbe6a913077153eee45f7bcc644c3e95f070e7f4e6fc48b910a5bcf4f1da98f582196b31101b34b790835c020b2ef0e3" /></sigs><perms><item name="com.android.launcher.permission.INSTALL_SHORTCUT" /><item name="android.permission.READ_PHONE_STATE" /><item name="android.permission.CAMERA" /><item name="android.permission.SEND_SMS" /><item name="android.permission.WRITE_EXTERNAL_STORAGE" /><item name="android.permission.INTERNET" /><item name="android.permission.ACCESS_FINE_LOCATION" /><item name="android.permission.ACCESS_COARSE_LOCATION" /><item name="android.permission.READ_CONTACTS" /><item name="android.permission.CALL_PHONE" /><item name="android.permission.ACCESS_MOCK_LOCATION" /><item name="android.permission.ACCESS_NETWORK_STATE" /></perms>
</package>
最後說明一點 用adb擷取這個檔案不需要root許可權,(我測試了一款2.2沒有root和2.3已經root的 都是ok)
如果大家覺得上面的擷取apk方法比較麻煩的話,大家可以使用91助手,裡面有個備份已安裝軟體的功能可以直接把apk匯出。
( 剛開始用零散的時間學習android,如有錯誤還請留言指正 )