Apk的几种安装方式

一、如何将带源码的APK预置进系统

  1. 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例

  2. 将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录

  3. 在 Test 目录下创建一个名为 Android.mk的文件,内容如下:
    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 预置进系统

  6. 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

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

  8. 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:
    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对这些权限进行了四类分级,不同级别的权限对应不同的认证方式。
    normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
    dangerous:高风险权限,安装时需要用户的确认才可使用;
    signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
    signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。
    上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序(或部分应用)进行访问控制,则可以通过在AndroidManifest.xml中添加<permission>标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。
    按照应用需要的权限等级,我们选择将apk安装在系统不同位置.举个例子,如果一个在/system/app下的应用声明获取权限定义中protectionLevel是signatureOrSystem的权限,最后是获取不到这个权限的,但是在/system/priv-app下的应用就可以.我们必须修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

三、如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复

  1. 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例
  2. 将 Test.apk 放到 packages/apps/Test 下面;
  3. 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下
    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)

四、如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复
方法一:预置apk到system/vendor/operator下面
具体做法如下:
在packages/apps下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例:

  1. 将Test.apk 放到 packages/apps/Test 下面;
  2. 在packages/apps/Test下面创建文件 Android.mk,文件内容如下:
    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库文件预装到系统中,可以选择使用 mk 文件预装,不同平台可能安装方式存在差异.所以我们只讨论最终在机器中呈现的路径

Android 4.4之前对于预装的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时如果打开报错,可以查看一下版本之间的差异

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容