Android系统启动篇
4,《Android SystemServer进程启动流程》
Android系统开发准备篇
3,《Android Framework代码IDE加载和调试》
Android系统开发实践篇
4,《android单独编译framework模块并push》
Android系统开发核心知识储备篇
1,《Android编译系统-envsetup和lunch代码篇》
6,《Android中Activity、View和Window关系详解》
11,《android中AMS进程通知Zygote进程fork新进程的通信方式》
Android核心功能详解篇
2,《Android 手势导航(从下往上滑动进入多任务页面)》
3,《android手势分析(应用界面左往右边滑动退出应用)》
———————————————————————————————————————————
目录
一,背景介绍
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)