• Android系统内置应用


    Android系统内置应用

    背景
    客户提供APK,需要集成进系统,并且不可卸载

    Android原生是怎么做的?
    已Launcher3为例,apk是位于/system/priv-app/Launcher3目录下

    AOSP系统内置app步骤

    1.在package/apps/目录下创建相应的文件夹如:MyApp
    2.在build/make/target/product/core.mk加入该Module名字
    3.再进行整体的make

    Android系统内置APK作为系统应用,可分为:

    • 不带任何so的应用
    • 带有so的应用

    不带任何so的应用

    不带任何so的应用的.mk文件示例

    LOCAL_PATH:= $(call my-dir)
    
    include $(CLEAR_VARS)
    $(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")#打印输出
    # Module name should match apk name to be installed
    LOCAL_MODULE := MyApp
    LOCAL_MODULE_TAGS := optional 
    #不管是user 还是eng 版本都会编译此app
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_CERTIFICATE := PRESIGNED
    include $(BUILD_PREBUILT)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    一些说明:

    LOCAL_PATH := $(call my-dir)
    
    • 1

    Android.mk 文件必须先定义 LOCAL_PATH 变量。此变量表示源文件在开发树中的位置。在上述命令中,构建系统提供的宏函数 my-dir 将返回当前目录(Android.mk 文件本身所在的目录)的路径。

    include $(CLEAR_VARS)
    
    • 1

    CLEAR_VARS 变量指向一个特殊的 GNU Makefile,后者会为您清除许多 LOCAL_XXX 变量,例如 LOCAL_MODULELOCAL_SRC_FILESLOCAL_STATIC_LIBRARIES。请注意,GNU Makefile 不会清除 LOCAL_PATH。此变量必须保留其值,因为系统在单一 GNU Make 执行上下文(其中的所有变量都是全局变量)中解析所有构建控制文件。在描述每个模块之前,您必须声明(重新声明)此变量。

    LOCAL_MODULE := MyApp
    
    • 1

    此变量用于存储模块名称。指定的名称在所有模块名称中必须唯一,并且不得包含任何空格。您必须先定义该名称,然后才能添加任何脚本(CLEAR_VARS 的脚本除外)

    LOCAL_MODULE_TAGS := optional 
    
    • 1

    LOCAL_MODULE_TAGS 模块的tag,为debug eng tests optional samples shell_ash shell_mksh等tag的组合,一个模块可有多个Tag。

    • user:指该模块只在user版本下才编译
    • eng:指该模块只在eng版本下才编译
    • tests:指该模块只在tests版本下才编译
    • optional:指该模块在所有版本下都编译
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    
    • 1

    目标文件的后缀。COMMON_ANDROID_PACKAGE_SUFFIX := .apk

    LOCAL_CERTIFICATE := PRESIGNED
    
    • 1

    LOCAL_CERTIFICATE := PRESIGNED表示APK签名使用原来签名,即第三方签名,若要使用系统签名,则可以改为LOCAL_CERTIFICATE := platform系统前面,可以使apk获得系统权限

    include $(BUILD_PREBUILT)
    
    • 1

    BUILD_PREBUILT : 该模块已经预先编译

    带有so的应用

    带有so的应用,相对于不带so的应用,只是多了一步,需要提取apk里面lib的so文件,进行单独的内置

    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    $(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")
    # Module name should match apk name to be installed
    LOCAL_MODULE := MyApp_SO
    LOCAL_MODULE_TAGS := optional 
    #不管是user 还是eng 版本都会编译此app
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_PREBUILT_JNI_LIBS := lib/x86_64/libnative-lib.so
    #@lib/x86/libtest.so \  //注意前面要用tab键隔开
    	#@lib/x86/libtest2.so   //这是你需要添加的so 如果是 armeabi-v7a 直接替换掉armeabi
    LOCAL_CERTIFICATE := platform
    #表示app已经签名
    include $(BUILD_PREBUILT)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    参考

    1. Android.mk
    2. Android.mk之模块描述变量
    3. Android 系统预设 App,有什么难的?
    4. Build Cookbook
  • 相关阅读:
    9. CSP-Cache Server Page
    Linux 进程信号
    【MATLAB教程案例27】基于matlab的图像配准算法的仿真与分析——sift,surf,kaze等
    【算法挨揍日记】day11——852. 山脉数组的峰顶索引、162. 寻找峰值
    linux 测试存储介质.emmc.nand.ufs.硬盘的读写速度方法
    VMware-workstation-full下载
    RFID技术在锂电池生产线自动化应用
    HackTheBox Exatlon 逆向题目分析
    MFC Windows 程序设计[152]之耍酷滑动滚动条
    智慧图书馆中的自助借还系统
  • 原文地址:https://blog.csdn.net/u014084081/article/details/130897300