一、幾個關鍵目錄
1、/data/local/tmp
/data/local/tmp 目錄是轉為android studio 安裝應用程序保留的目錄
android studio 安裝apk時 首先將apk push 到/data/local/tmp目錄下
rk3399_mid:/data/local/tmp # ls -la
total 416048
drwxrwx--x 3 shell shell 4096 2019-04-23 16:22 .
drwxr-x--x 5 root root 4096 2019-04-01 18:18 ..
-rw-r--r-- 1 system system 8649 2019-04-01 18:18 TranslatePodTest.jar
-rw-rw-rw- 1 root root 212739751 2019-04-23 16:22 com.sogou.teemo.translate.launcher
-rw-rw-rw- 1 root root 0 2019-04-23 16:22 com.sogou.teemo.translate.launcher-build-id.txt
drwxrwxrwx 3 shell shell 4096 2019-04-23 16:14 perfd
2、data/dalvik-cache 將apk中的dex文件安裝到dalvik-cache目錄下
3、data/data 存放應用程序的數據
4、system/app 系統自帶的應用安裝目錄
二、apk的安裝過程
1、將apk復制到/data/app/包名/ 下面,
如,翻譯機的/data/app/com.sogou.teemo.translate.launcher 如下:
rk3399_mid:/data/app/com.sogou.teemo.translate.launcher # ls
base.apk lib oat
2、解壓/data/app/package/base.apk中的so 到 /data/app/package/lib目錄
Android 設備的CPU類型通常分以下幾種
1.armeabiv-v7a: 第7代及以上的 ARM 處理器,目前主流版本,大部分Android設備都使用它。
2.arm64-v8a: 第8代、64位ARM處理器。
3.armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多,缺少對浮點數計算的硬件支持,在需要大量計算時有性能瓶頸。
4.x86 / x86_64: x86 架構的手機都會包含由 Intel 提供的稱為 Houdini 的指令集動態轉碼工具,
實現對arm .so 的兼容。
5.mips/mips64:極少用于手機可忽略。
(1)arm設備上CPU 是armabi-v8a,ABI的優先級
如果手機CPU 是armabi-v8a 架構,優先選擇拷貝armabi-v8a中的.so 到 /data/app/package/lib/arm64中。
如果不存在,則會選擇拷貝armeabi-v7a中的.so文件 到/data/app/package/lib/arm文件夾中。
如果也不存在,則選擇armeabi目錄中的.so文件到/data/app/package/lib/arm中。
(2)arm設備上CPU 是armabi-v7a,ABI的優先級
- 如果手機CPU 是armabi-v7a,優先選擇拷貝armabi-v7a中的.so文件到/data/app/package/lib/arm中。
- 如果不存在,則會選擇armeabi中的.so文件到/data/app/package/lib/arm中。
以64位為app為例,/data/app/package/lib/arm64目錄如下:
rk3399_mid:/data/app/com.sogou.teemo.translate.launcher-1/lib # ls
arm64
rk3399_mid:/data/app/com.sogou.teemo.translate.launcher-1/lib # ls arm64/
libBugly.so libOcrTFDetect.so libeval.so libmp3lame.so libspeex_sogou_v43.so libtrans.so
libJniModule.so libOcrUtil.so libgnustl_shared.so libopencv_java3.so libsqlcipher.so libweibosdkcore.so
libOcrMerge.so libctranslate.so libimagepipeline.so libsgfront.so libssasr.so
libOcrRecog.so libeval-lib.so libimageutil.so libsogouupdcore.so libteemoutil.so
2、解壓apk,把其中的classes.dex 拷貝到data/dalvik-cache,命名規則是 apk路徑+classes.dex。
3、在data/data/目錄下創建對應的包名目錄。該目錄下創建存儲應用數據的相關目錄,例如cache, database、lib、shared_perfs等。
翻譯機/data/data/com.sogou.teemo.translate.launcher 如下:
rk3399_mid:/data/data/com.sogou.teemo.translate.launcher # ls
app_bugly app_crashrecord cache code_cache databases files shared_prefs