安卓系统启动
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)