android framework预制APK应用

Android系统启动篇

1,《android系统启动流程简介》

2,《android init进程启动流程》

3,《android zygote进程启动流程》

4,《Android SystemServer进程启动流程》

5,《android launcher启动流程》

6,《Android Activity启动过程详解》

Android系统开发准备篇

1,《Android 源码下载和编译》

2,《android 11源码编译和pixel3 刷机》

3,《Android Framework代码IDE加载和调试》

Android系统开发实践篇

1,《android设置默认输入法》

2,《android framework预制APK应用》

3,《Android系统层面限制应用开机自启动详解》

4,《android单独编译framework模块并push》

5,《Android Framework开发系统问题分析》

Android系统开发核心知识储备篇

1,《Android编译系统-envsetup和lunch代码篇》

2,《Android编译系统-概念篇》

3,《android日志系统详解》

4,《Android系统Handler详解》

5,《Android系统Binder详解》

6,《Android中Activity、View和Window关系详解》

7,《android view绘制流程详解》

8,《Android读取系统属性详解》

9,《android 窗口管理机制详解》

10,《初识Android系统》

11,《android中AMS进程通知Zygote进程fork新进程的通信方式》

Android核心功能详解篇

1,《android应用市场点击下载APK安装详解》

2,《Android 手势导航(从下往上滑动进入多任务页面)》

3,《android手势分析(应用界面左往右边滑动退出应用)》

4,《android应用安装流程详解》

5,《android11安装应用触发桌面图标刷新流程》

6,《Android系统多任务Recents详解》

7,《android系统导航栏视图分析》

———————————————————————————————————————————

目录

一,背景介绍

二,内置应用方法

2.1 不带so库的APK

2.2 带so的APK


一,背景介绍

        android系统开发过程中,经常遇到需要内置应用为系统应用。

二,内置应用方法

2.1 不带so库的APK

android aosp预制不带SO库的APK步骤:

1,在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为 MyExample 的APK为例。

2,将 MyExample.apk 放到 packages/apps/MyExample 下面。

3,在 packages/apps/MyExample 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := MyExample
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)

变量说明,

 LOCAL_PATH := $(call my-dir)

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

       

 include $(CLEAR_VARS)

    CLEAR_VARS 变量指向一个特殊的 GNU Makefile,后者会为您清除许多 LOCAL_XXX 变量,例如 LOCAL_MODULE、LOCAL_SRC_FILES 和 LOCAL_STATIC_LIBRARIES。

        

LOCAL_MODULE := MyApp

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

      

  LOCAL_MODULE_TAGS := optional

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

        1,user:指该模块只在user版本下才编译
        2,eng:指该模块只在eng版本下才编译
        3,tests:指该模块只在tests版本下才编译
        4,optional:指该模块在所有版本下都编译

        

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

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

LOCAL_CERTIFICATE := PRESIGNED

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

include $(BUILD_PREBUILT)

    BUILD_PREBUILT : 该模块已经预先编译
 

文件目录如下:

4,打开我们查找到的文件`aosp/build/make/target/product/handheld_product.mk`,在文件中添加内容:


```
PRODUCT_PACKAGES += \
		MyExample\
```

5,编译

5.1 使用 mmm 命令来编译指定的模块:

$ cd ~/aosp/packages/apps/MyExample
$ mmm

5.2 重新编译Image

$ make -j16

6,烧录设备

    $ export ANDROID_PRODUCT_OUT='out/target/product/blueline'
    $ adb reboot bootloader
    $ fastboot flashall -w 

7,重启设备

2.2 带so的APK

        带有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)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳哥的技术分享

创作不易,谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值