因为工作需要,经常要开发和合入系统App,所以在此开篇作为收集和记录Android合入系统应用的方法,以备日后查阅。

一、预置apk方法

Case 1:如何将带源码的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 := optionalLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := Testinclude $(BUILD_PACKAGE)
  1. 打开文件 device\mediatek\common\device.mk,将 Test 添加到 PRODUCT_PACKAGES 里面。
PRODUCT_PACKAGES += Test
  1. 重新 build 整个工程

Case 2:如何将无源码的 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 installedLOCAL_MODULE := TestLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_PREBUILT_JNI_LIBS:= \@lib/armeabi/libtest.so \@lib/armeabi/libtest2.soLOCAL_CERTIFICATE := PRESIGNEDinclude $(BUILD_PREBUILT)

若无so,删除LOCAL_PREBUILT_JNI_LIBS
若有so,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径,不要忘记使用@。@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中

若apk支持不同cpu类型的so,针对so的部分的处理:

Ifeq ($(TARGET_ARCH),arm)LOCAL_PREBUILT_JNI_LIBS := \@lib/armeabi-v7a/xxx.so\@ lib/armeabi-v7a/xxxx.soelse ifeq ($(TARGET_ARCH),x86)LOCAL_PREBUILT_JNI_LIBS := \@lib/x86/xxx.soelse ifeq ($(TARGET_ARCH),arm64)LOCAL_PREBUILT_JNI_LIBS := \@lib/armeabi-v8a/xxx.so…

即将和TARGET_ARCH对应的so抽离出来

  1. 打开文件 device\mediatek\common\device.mk
    将 Test 添加到 PRODUCT_PACKAGES 里面。
    PRODUCT_PACKAGES += Test
  2. 重新 build 整个工程

tip
如果App使用System Level的permission,需要預置到/system/priv-app底下 (原在/system/app)。
修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

Case 3:如何预置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 installedLOCAL_MODULE := TestLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)# LOCAL_PRIVILEGED_MODULE := trueLOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)LOCAL_CERTIFICATE := PRESIGNEDinclude $(BUILD_PREBUILT)
  1. 打开文件 device\mediatek\common\device.mk
    将 Test 添加到 PRODUCT_PACKAGES 里面。
PRODUCT_PACKAGES += Test
  1. 重新 build 整个工程
    注意:这个比不能卸载的多了一句
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

Case 4:如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?

  1. 在 vendor\mediatek\proprietary\binary\3rd-party\free下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例
  2. 将Test.apk 放入vendor\mediatek\proprietary\binary\3rd-party\free\Test下面
  3. 在vendor\mediatek\proprietary\binary\3rd-party\free\Test 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# Module name should match apk name to be installedLOCAL_MODULE := TestLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_CERTIFICATE := PRESIGNEDLOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/appinclude $(BUILD_PREBUILT)
  1. 打开文件device\mediatek\common\device.mk
    将 Test 添加到 PRODUCT_PACKAGES 里面。
PRODUCT_PACKAGES += Test
  1. 然后重新build整个工程

若需要apk作为32bit的apk运行,则需要在Android.mk中定义

LOCAL_MULTILIB :=32

二、Android.mk文件参数说明

LOCAL_MODULE_TAGS := optional optional,指该模块在所有版本下都编译
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk 获取目录下的java文件
LOCAL_PACKAGE_NAME := Test 包名
LOCAL_CERTIFICATE := platform 签名,PRESIGNED表示保留apk文件之前的签名,platform是对apk重新进行签名
LOCAL_PROGUARD_ENABLED := disabled 不要使用代码混淆的工具进行混淆

转载信息:
作者:烟雨随风
链接:https://www.jianshu.com/p/9af0a34d3eed
來源:简书

更多相关文章

  1. 使用AudioRecord实现暂停录音功能
  2. android基础知识16:多分辨率屏显设计及其兼容性测试
  3. Android(安卓)Studio加载慢/导入包慢/gradle慢的解决办法
  4. Android(安卓)Studio SVN/Git之忽略文件
  5. 6.1、Android(安卓)Studio配置构建
  6. Andriod内嵌HTML5项目构建以及整包更新配置
  7. android 3D 游戏实现之人物行走(MD2)
  8. eclipse中为android工程第三方jar包关联源代码的方法
  9. eclipse中android结构整理

随机推荐

  1. 短视频app开源源码android 给图片加文字
  2. Android下的应用编程——用HTTP协议实现
  3. Android(安卓)代码实现logcat输出到文件
  4. linux下配置android sdk
  5. Android(安卓)为【apk】文件签名,增加修改
  6. 2012 年最佳 Android(安卓)应用
  7. [camera drv]工厂模式下测试camera fail
  8. Android(安卓)Animation (动画设计)
  9. Android(安卓)TV开发(—)开始电视应用
  10. Android(安卓)studio 启动模拟器时解决 V