android源码定制后编译-androidframework预制APK应用程序

安卓系统启动

1.《Android系统启动流程介绍》

2.《Androidinit进程启动流程》

3.《androidzygote进程启动流程》

4.《AndroidSystemServer进程启动流程》

5.《androidlauncher启动流程》

6.《AndroidActivity启动流程解读》

Android系统开发计划

1.《Android源码下载与编译》

2.《Android11源码编译及pixel3变砖救援》

3.《AndroidFramework代码IDE加载与调试》

Android系统开发实践

1.“设置android中的默认输入法”

2.“androidframework预制APK应用程序”

3.《Android系统级对自动启动应用程序的限制解读》

4.《Android单独编译framework模块并推送》

5.《AndroidFramework开发系统问题分析》

Android系统开发核心知识储备

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

2.《Android编译系统-概念》

3.《android日志系统解读》

4.《Android系统Handler解读》

5.《Android系统Binder解读》

6、《Android中Activity、View、Window的关系解读》

7.《AndroidView大纲流程解读》

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系统多任务最近记录解读》

7.《Android系统导航栏视图分析》

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

目录

一、背景介绍

在android系统的开发过程中,我们经常会遇到外部应用程序成为系统应用程序的需求。

2.外部应用方式 2.1 不带so库的APK

没有SO库的androidaosp预制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 变量指向一个特殊的 GNUMakefile,它将为您消除许多 LOCAL_XXX 变量android源码定制后编译,例如 LOCAL_MODULE、LOCAL_SRC_FILES 和 LOCAL_STATIC_LIBRARIES。

LOCAL_MODULE := MyApp

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

  LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_TAGS模块的标签是debugengtestsoptionalsamplesshell_ashshell_mksh和其他标签的组合。 一个模块可以有多个标签。

1. User:表示该模块仅在用户版本下编译。

2. eng:表示该模块仅在eng版本下编译

3.tests:表示该模块仅在tests版本下编译。

4.可选:表示该模块在所有版本中都编译

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

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

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_CERTIFICATE:=PRESIGNED 表示APK签名使用原始签名,即第三方签名。 如果想使用系统签名,可以在平台系统上将其改为LOCAL_CERTIFICATE:=android源码定制后编译,这样可以让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 重新编译镜像

$ make -j16

6. 编程设备

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

7. 重新启动设备

2.2 APK 与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)

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 android源码定制后编译-androidframework预制APK应用程序 https://www.wkzy.net/game/197850.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务