android预置apk,覆盖原生apk

2019/10/03 12:46
阅读数 1K

一、如何将带源码的APK预置进系统?
1)     在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预制一个名为RecordingCar的APK 为例
2)     将 的Source code 拷贝到 RecordingCar文件夹下,删除 /bin 和 /gen 目录
3)     在 RecordingCar目录下创建一个名为 Android.mk的文件,内容如下:
OCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
LOCAL_PACKAGE_NAME := Recorderingcar
LOCAL_JAVA_LIBRARIES := telephony-common   //所需要的库文件,没有的话,可以不写
include $(BUILD_PACKAGE)
 
4)     mtk打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
将 Recorderingcar添加到 PRODUCT_PACKAGES 里面。
如果是高通平台,可以在device,或者build的mkfile文件加入编译选项。
另外一种方法就是mk文件中将LOCAL_MODULE_TAGS 属性值设为:= eng user debug,这样不管编译什么版本,该apk都可以编译进去。
5)    make clean 然后重新编译整个工程。
 
二、如何将无源码的 APK 预置进系统?
1)     在配置文件中,如device/qcom/project下加入3rdApp文件夹,在该文件夹下创建app,lib和Android.mk文件。
2)     将  Recorderingcar.apk 放到app目录 下面
3)     将库文件放到lib目录下
4)     在修改 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)
 
4)    在mk文件中,将lib目录下的库文件copy到system/lib目录下
      其余的步骤和上面类似。
 
    如果预置的同时,要覆盖原生apk,则关于android.mk中的LOCAL_OVERRIDES_PACKAGES需要说明一下,此变量可以使其他的模块不加入编译,
   如: 需要预置第三方的Launcher启动器,则在预置apk的mk文件中加入:

   LOCAL_OVERRIDES_PACKAGES := Luancher2

   这样系统就不会将原生的Launcher编译进去,当然也可以在mk文件中编译开关中将相应Launcher注释掉。

  KK-android4.4版本上应用权限无法获取的问题是预置apk以后发现原因查了下,发现现在增加了一个priv-app的文件夹,对于android:protectionLevel="signature|system"的权限,并且签名不一致的情况下,建议放在
priv-app下面,否则PackageManager 会拒绝分配给你权限。(有兴趣的同学可以参见:PackageManagerService 的 grantSignaturePermission 方法)
加入priv-app方法:在Android.mk中增加 LOCAL_PRIVILEGED_MODULE := true
 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部