cm-14.1 Android系统定制(二):内置系统应用

声明

  • Android系统定制时免不了预置一些APP进系统中;
  • 预置的结果一般有三种:

      1.预置的APK用户可以卸载,恢复出厂设置后APK不恢复;

      2.预置的APP用户可以卸载,但恢复出厂设置后APK恢复;

      3.预置的APK用户不可以卸载;

1 预置APK用户可以卸载,恢复出厂设置后APK不恢复

  1. 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以 预制一个名为Ma的APK为例
  2. 将 Ma.apk 放到 packages/apps/Ma 下面;
  3. 在  packages/apps/Ma 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 定义模块名称,一般和APK名字相同
LOCAL_MODULE := Ma
#要在哪总版本下编译,可选择值有user eng tests optional,optional表示任意版本都编译
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so) 等选择值
LOCAL_MODULE_CLASS := APPS
#定义编译完成之后模块的后缀
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#定义使用原app签名可用选择项platform,shared,media
LOCAL_CERTIFICATE := PRESIGNED

#定义编译之后的位置,这里指的是data/apps目录
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

#不进行odex
LOCAL_DEX_PREOPT := false
#添加lib文件的引用,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径,不要忘记使用@。@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中,可根据CPU 的(TARGET_ARCH)不同类型对SO  进行处理
LOCAL_PREBUILT_JNI_LIBS := \
                     @lib/armeabi-v7a/xx.so \
                     @lib/armeabi-v7a/yy.so
include $(BUILD_PREBUILT)
  1. 打开文件 build/target/product/core.mk,将 Ma添加到 PRODUCT_PACKAGES中。
  2. 将从Ma.apk解压出来的 so库拷贝packages/apps/Ma/lib/目录下;若无so库,则去掉此步。
  3. 在packages/apps/Ma执行mmm命令,再刷机即可。

2 预置APK用户可以卸载,恢复出厂设置后APK可恢复

  1. 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以 预制一个名为Ma的APK为例
  2. 将 Ma.apk 放到 packages/apps/Ma 下面;
  3. 在  packages/apps/Ma 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 定义模块名称,一般和APK名字相同
LOCAL_MODULE := Ma
#要在哪总版本下编译,可选择值有user eng tests optional,optional表示任意版本都编译
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so) 等选择值
LOCAL_MODULE_CLASS := APPS
#定义编译完成之后模块的后缀
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#定义使用原app签名可用选择项platform,shared,media
LOCAL_CERTIFICATE := PRESIGNED

#定义编译之后的位置,这里指的是system/vendor/apps/operator/app目录
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app

#不进行odex
LOCAL_DEX_PREOPT := false
#若需要apk作为32bit的apk运行,则添加
LOCAL_MULTILIB :=32
#添加lib文件的引用,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径,不要忘记使用@。
#@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中,可根据CPU的(TARGET_ARCH)不同类型对so进行处理
LOCAL_PREBUILT_JNI_LIBS := \
                     @lib/armeabi-v7a/xx.so \
                     @lib/armeabi-v7a/yy.so
include $(BUILD_PREBUILT)
  1. 打开文件 build/target/product/core.mk,将 Ma添加到 PRODUCT_PACKAGES中。
  2. 将从Ma.apk解压出来的 so库拷贝packages/apps/Ma/lib/目录下;若无so库,则去掉此步。
  3. 在packages/apps/Ma执行mmm命令,再刷机即可。

3 预置APK用户不可卸载

  1. 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以 预制一个名为Ma的APK为例
  2. 将 Ma.apk 放到 packages/apps/Ma 下面;
  3. 在  packages/apps/Ma 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 定义模块名称,一般和APK名字相同
LOCAL_MODULE := Ma
#要在哪总版本下编译,可选择值有user eng tests optional,optional表示任意版本都编译
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so) 等选择值
LOCAL_MODULE_CLASS := APPS
#定义编译完成之后模块的后缀
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#定义使用原app签名可用选择项platform,shared,media
LOCAL_CERTIFICATE := PRESIGNED

#定义编译之后的位置,这里指的是system/apps目录
LOCAL_MODULE_PATH := $(TARGET_OUT)/app

#不进行odex
LOCAL_DEX_PREOPT := false
#若需要apk作为32bit的apk运行,则添加
LOCAL_MULTILIB :=32
#添加lib文件的引用,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径,不要忘记使用@。
#@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中,可根据CPU的(TARGET_ARCH)不同类型对so进行处理
LOCAL_PREBUILT_JNI_LIBS := \
                     @lib/armeabi-v7a/xx.so \
                     @lib/armeabi-v7a/yy.so
include $(BUILD_PREBUILT)
  1. 打开文件 build/target/product/core.mk,将 Ma添加到 PRODUCT_PACKAGES中。
  2. 将从Ma.apk解压出来的 so库拷贝packages/apps/Ma/lib/目录下;若无so库,则去掉此步。
  3. 在packages/apps/Ma执行mmm命令,再刷机即可。

4 可以看出编译后存放的路径决定了这三种不同结果

Enjoy it !!

发布了48 篇原创文章 · 获赞 5 · 访问量 7809

猜你喜欢

转载自blog.csdn.net/Xiaoma_Pedro/article/details/103892791