Android系统之路(初识MTK) ------ 内置三方apk到Rom可移动/可卸载
2016-01-07 15:30
876 查看
客户给了一个内置他们自己apk的需求,定制到Rom里,我们需要在编译系统源码的时候配置好相关的文件即可将apk一起打包到ROM里面,下面我们就来一起打包apk到系统
首先需要在 device/mediatek/common/device.mk 配置如下语句
$(call inherit-product-if-exists, vendor/公司名/product/您的命名.mk)
在mk文件里面配置需要内置的apk label
eg:
配置好之后还需要导入 apk文件并且配置宏,就写一个例子吧,也在这个文件夹下写
路径:vendor\公司名\ThirdpartyApps\
![](http://img.blog.csdn.net/20160107151745301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
配置如下mk文件,没有的自己创建
工作算是完成了一半,接下来还需要修改frameworks下的java文件,让内置的三分apk可卸载等操作
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
添加:
+ final File thirdpartyAppDir = new File(Environment.getRootDirectory(), "/vendor/thirdparty_apps");
+ scanDirLI(thirdpartyAppDir, PackageParser.PARSE_IS_SYSTEM
+ | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);
添加:
+ private static boolean isThirdpartyApp(int parseFlags) {
+ return (parseFlags & PackageParser.PARSE_IS_THIRDPARTY_APP) != 0;
+ }
public static int PackageParser.PARSE_IS_THIRDPARTY_APP = 1<<11;
修改:
+ if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg) && !isThirdpartyApp(parseFlags)) {
不知道在那行的,可以搜索关键字,ctrl+L 索引行
修改完之后编译工程,发现以下异常:
检查了下配置文件,发现客户提供的apk文件跟我们的mk冲突了,于是修改
WST_WAL_C.APK 为 WST_WAL_C.apk
重新编译工程,完美运行
最终效果,内置9个apk,7个可见,2个后台
首先需要在 device/mediatek/common/device.mk 配置如下语句
$(call inherit-product-if-exists, vendor/公司名/product/您的命名.mk)
在mk文件里面配置需要内置的apk label
eg:
#apps PRODUCT_PACKAGES += \ BDDataPlan\ Facebook\ MultiLingBengaliPlugin\ Multilingkeyboard\ SHAREit\ Skype\ Viber\ WPSOffice\ WST_WAL_C
配置好之后还需要导入 apk文件并且配置宏,就写一个例子吧,也在这个文件夹下写
路径:vendor\公司名\ThirdpartyApps\
配置如下mk文件,没有的自己创建
LOCAL_PATH := $(call my-dir) # include $(CLEAR_VARS) LOCAL_MODULE := BDDataPlan LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := Facebook LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := MultiLingBengaliPlugin LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := Multilingkeyboard LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := SHAREit LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := Skype LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := Viber LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := WPSOffice LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) # include $(CLEAR_VARS) LOCAL_MODULE := WST_WAL_C LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app #LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/thirdparty_apps LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT)
工作算是完成了一半,接下来还需要修改frameworks下的java文件,让内置的三分apk可卸载等操作
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
添加:
+ final File thirdpartyAppDir = new File(Environment.getRootDirectory(), "/vendor/thirdparty_apps");
+ scanDirLI(thirdpartyAppDir, PackageParser.PARSE_IS_SYSTEM
+ | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);
添加:
+ private static boolean isThirdpartyApp(int parseFlags) {
+ return (parseFlags & PackageParser.PARSE_IS_THIRDPARTY_APP) != 0;
+ }
public static int PackageParser.PARSE_IS_THIRDPARTY_APP = 1<<11;
修改:
+ if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg) && !isThirdpartyApp(parseFlags)) {
不知道在那行的,可以搜索关键字,ctrl+L 索引行
修改完之后编译工程,发现以下异常:
No rule to make target `vendor/rmt/ThirdpartyApps/WST_WAL_C.apk', needed by `out/target/product/rmt8382_tb_l/obj/APPS/WST_WAL_C_intermediates/package.apk'. Stop
检查了下配置文件,发现客户提供的apk文件跟我们的mk冲突了,于是修改
WST_WAL_C.APK 为 WST_WAL_C.apk
重新编译工程,完美运行
最终效果,内置9个apk,7个可见,2个后台
相关文章推荐
- Import adt 项目到android studio解决的问题总结
- RichEditor for Android 是 Android 平台下一个所见即所得的文本编辑器控件。
- android studio preview 出现 Rendering Problems的解决方法
- Android app native代码性能分析
- Android 实例:在Activity 之间传递数据的intent
- Android开源类库和工具集合
- Android Espresso单元测试
- Android Studio 代码混淆
- Android中保存和恢复Fragment状态的最好方法
- Android隐藏虚拟按键,关闭开机动画、开机声音
- Android 5.0系统以上获取所有运行进程
- Android——谷歌官方下拉刷新控件SwipeRefreshLayout
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- Android Studio 下获取应用的数字签名MD5、SHA1方法
- 教你搞定Android自定义View
- Android 解决APN无权限问题
- Android 动画之RotateAnimation应用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android--添加子视图(addView和setView)
- android.util.Base64编码有时会默认换行