Apk的幾種安裝方式

一涩哟、如何將帶源碼的APK預(yù)置進系統(tǒng)

  1. 在 packages/apps 下面以需要預(yù)置的 APK的 名字創(chuàng)建一個新文件夾声畏,以預(yù)置一個名為Test的APK 為例

  2. 將 Test APK的Source code 拷貝到 Test 文件夾下,刪除 /bin 和 /gen 目錄

  3. 在 Test 目錄下創(chuàng)建一個名為 Android.mk的文件居触,內(nèi)容如下:
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(call all-subdir-java-files)
    LOCAL_PACKAGE_NAME := Test
    include $(BUILD_PACKAGE)

  4. 打開文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
    將 Test 添加到 PRODUCT_PACKAGES 里面狱杰。

  5. 重新 build 整個工程
    二少漆、如何將無源碼的 APK 預(yù)置進系統(tǒng)

  6. 在 packages/apps 下面以需要預(yù)置的 APK 名字創(chuàng)建文件夾,以預(yù)置一個名為Test的APK為例

  7. 將 Test.apk 放到 packages/apps/Test 下面

  8. 在 packages/apps/Test 下面創(chuàng)建文件 Android.mk椿猎,文件內(nèi)容如下:
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    Module name should match apk name to be installed

    LOCAL_MODULE := Test
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_CERTIFICATE := PRESIGNED
    include $(BUILD_PREBUILT)

  9. 打開文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
    將 Test 添加到 PRODUCT_PACKAGES 里面惶岭。

  10. 將從Test.apk解壓出來的 so庫拷貝到alps/vendor/mediatek/${Project}/artifacts/out/target/product/${Project}/system/lib/目錄下,若無 so 庫犯眠,則去掉此步按灶;

  11. 重新 build 整個工程
    注:
    Android對這些權(quán)限進行了四類分級,不同級別的權(quán)限對應(yīng)不同的認證方式筐咧。
    normal:低風(fēng)險權(quán)限鸯旁,只要申請了就可以使用(在AndroidManifest.xml中添加<uses-permission>標簽),安裝時不需要用戶確認量蕊;
    dangerous:高風(fēng)險權(quán)限铺罢,安裝時需要用戶的確認才可使用;
    signature:只有當申請權(quán)限的應(yīng)用程序的數(shù)字簽名與聲明此權(quán)限的應(yīng)用程序的數(shù)字簽名相同時(如果是申請系統(tǒng)權(quán)限残炮,則需要與系統(tǒng)簽名相同)韭赘,才能將權(quán)限授給它;
    signatureOrSystem:簽名相同势就,或者申請權(quán)限的應(yīng)用為系統(tǒng)應(yīng)用(在system image中)辞居。
    上述四類權(quán)限級別同樣可用于自定義權(quán)限中。如果開發(fā)者需要對自己的應(yīng)用程序(或部分應(yīng)用)進行訪問控制蛋勺,則可以通過在AndroidManifest.xml中添加<permission>標簽瓦灶,將其屬性中的protectionLevel設(shè)置為上述四類級別中的某一種來實現(xiàn)。
    按照應(yīng)用需要的權(quán)限等級,我們選擇將apk安裝在系統(tǒng)不同位置.舉個例子抱完,如果一個在/system/app下的應(yīng)用聲明獲取權(quán)限定義中protectionLevel是signatureOrSystem的權(quán)限贼陶,最后是獲取不到這個權(quán)限的,但是在/system/priv-app下的應(yīng)用就可以.我們必須修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true碉怔,以聲明app需要放在/system/priv-app下烘贴。

三、如何預(yù)置APK使得用戶可以卸載撮胧,恢復(fù)出廠設(shè)置時不能恢復(fù)

  1. 在 packages/apps 下面以需要預(yù)置的 APK 名字創(chuàng)建文件夾桨踪,以預(yù)置一個名為Test的APK為例
  2. 將 Test.apk 放到 packages/apps/Test 下面;
  3. 在 packages/apps/Test 下面創(chuàng)建文件 Android.mk芹啥,文件內(nèi)容如下
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    Module name should match apk name to be installed

    LOCAL_MODULE := Test
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_CERTIFICATE := PRESIGNED
    LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
    include $(BUILD_PREBUILT)
  4. 打開文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
    將 Test 添加到 PRODUCT_PACKAGES 里面锻离。
  5. 重新 build 整個工程
    注意:這個比不能卸載的多了一句
    LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

四、如何預(yù)置APK使得用戶可以卸載墓怀,并且恢復(fù)出廠設(shè)置時能夠恢復(fù)
方法一:預(yù)置apk到system/vendor/operator下面
具體做法如下:
在packages/apps下面以需要預(yù)置的 APK 名字創(chuàng)建文件夾汽纠,以預(yù)置一個名為Test的APK為例:

  1. 將Test.apk 放到 packages/apps/Test 下面;
  2. 在packages/apps/Test下面創(chuàng)建文件 Android.mk傀履,文件內(nèi)容如下:
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    Module name should match apk name to be installed

    LOCAL_MODULE := Test
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_CERTIFICATE := PRESIGNED
    LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app
    include $(BUILD_PREBUILT)
  3. 打開文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)虱朵, 將 Test 添加到 PRODUCT_PACKAGES 里面
  4. 重新 build 整個工程

五、對于apk自帶so庫安裝說明如下
apk安裝在system/app和system/priv-app目錄下,如果apk本身帶有一些so庫文件,那么我們也必須將這些so庫文件預(yù)裝到系統(tǒng)中,可以選擇使用 mk 文件預(yù)裝,不同平臺可能安裝方式存在差異.所以我們只討論最終在機器中呈現(xiàn)的路徑

Android 4.4之前對于預(yù)裝的APK,所有的庫文件(so)都集中在存放在/system/lib目錄下
system/lib/
├── crtbegin_so.o
├── crtend_so.o
├── drm
│ └── libfwdlockengine.so
├── egl
│ ├── egl.cfg
│ ├── libEGL_mali.so
│ ├── libGLES_android.so
│ ├── libGLESv1_CM_mali.so
│ └── libGLESv2_mali.so
├── hw
│ ├── audio.a2dp.default.so
│ ├── audio_policy.default.so
│ ├── audio.primary.default.so
│ ├── audio.primary.polaris.so
│ ├── audio.r_submix.default.so
│ ├── audio.usb.default.so
│ ├── bluetooth.default.so

Android5.1開始,apk自帶的so庫文件開始單獨管理,和apk文件所在目錄同級:
Gallery2/
├── Gallery2.apk
├── lib
│ └── arm64
│ ├── libjni_eglfence.so -> /system/lib64/libjni_eglfence.so
│ ├── libjni_filtershow_filters.so -> /system/lib64/libjni_filtershow_filters.so
│ ├── libjni_jpegstream.so -> /system/lib64/libjni_jpegstream.so
│ └── librsjni.so -> /system/lib64/librsjni.so
└── oat
└── arm64
└── Gallery2.odex
在安裝apk時如果打開報錯,可以查看一下版本之間的差異

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钓账,一起剝皮案震驚了整個濱河市碴犬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梆暮,老刑警劉巖服协,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惕蹄,居然都是意外死亡蚯涮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門卖陵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遭顶,“玉大人,你說我怎么就攤上這事泪蔫“羝欤” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵撩荣,是天一觀的道長铣揉。 經(jīng)常有香客問我,道長餐曹,這世上最難降的妖魔是什么逛拱? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮台猴,結(jié)果婚禮上朽合,老公的妹妹穿的比我還像新娘俱两。我一直安慰自己,他們只是感情好曹步,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布宪彩。 她就那樣靜靜地躺著,像睡著了一般讲婚。 火紅的嫁衣襯著肌膚如雪尿孔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天筹麸,我揣著相機與錄音活合,去河邊找鬼。 笑死竹捉,一個胖子當著我的面吹牛芜辕,可吹牛的內(nèi)容都是我干的尚骄。 我是一名探鬼主播块差,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼倔丈!你這毒婦竟也來了憨闰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤需五,失蹤者是張志新(化名)和其女友劉穎鹉动,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏邮,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡泽示,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜜氨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械筛。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖飒炎,靈堂內(nèi)的尸體忽然破棺而出埋哟,到底是詐尸還是另有隱情,我是刑警寧澤郎汪,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布赤赊,位于F島的核電站,受9級特大地震影響煞赢,放射性物質(zhì)發(fā)生泄漏抛计。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一照筑、第九天 我趴在偏房一處隱蔽的房頂上張望吹截。 院中可真熱鬧录豺,春花似錦、人聲如沸饭弓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弟断。三九已至咏花,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阀趴,已是汗流浹背昏翰。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刘急,地道東北人棚菊。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像叔汁,于是被迫代替她去往敵國和親统求。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容