赞
踩
1.前言
Android 5.1系统有很多原生APP(音乐播放器,浏览器,设置等),熟悉其编译原理。可以利用原生app二次开发。
2.下面就以settings.apk为例,详细分析其编译过程。
进入终端,在RK3288/dlt-rk3288b/packages/apps/Settings$ 下执行mm命令,进行编译,生成settings.apk。
mm命令实际执行的是/Documents/RK3288/dlt-rk3288b/build/envsetup.sh中的function mm()函数。
执行 ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk $MODULES $ARGS
以上变量的值为:
$M=packages/apps/Settings/Android.mk
$DRV=空
$T=/home/eric/Documents/RK3288/dlt-rk3288b
$MODULES=all_modules
$ARGS=空
实际执行的命令为:
ONE_SHOT_MAKEFILE=/home/eric/Documents/RK3288/dlt-rk3288b/packages/apps/Settings/Android.mk make -C /home/eric/Documents/RK3288/dlt-rk3288b -f /home/eric/Documents/RK3288/dlt-rk3288b/build/core/main.mk all_modules
以上命令中ONE_SHOT_MAKEFILE=/home/eric/Documents/RK3288/dlt-rk3288b/packages/apps/Settings/Android.mk
为传入main.mk的参数。
在RK3288/dlt-rk3288b/build/core/main.mk中include $(ONE_SHOT_MAKEFILE)命令把Settings文件夹下的Android.mk包含进来
编译的目标为all_modules,
my_register_name := $(LOCAL_MODULE)
all_modules: ( A L L M O D U L E S ) 中 (ALL_MODULES) 中 (ALLMODULES)中(ALL_MODULES)为Settings。
all_modules<-ALL_MODULES<-base_rules.mk: ALL_MODULES += $(my_register_name)<-my_register_name<- my_register_name := $(LOCAL_MODULE)base_rules.mk<-LOCAL_MODULE := $(LOCAL_PACKAGE_NAME)[package_internal.mk]
$(my_register_name): $(LOCAL_BUILT_MODULE) $(LOCAL_INSTALLED_MODULE)
LOCAL_BUILT_MODULE<-$(LOCAL_BUILT_MODULE): ( R f i l e s t a m p ) L O C A L B U I L T M O D U L E < − (R_file_stamp) LOCAL_BUILT_MODULE<- (Rfilestamp)LOCALBUILTMODULE<−(LOCAL_BUILT_MODULE): $(R_file_stamp)
LOCAL_BUILT_MODULE<-$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE :=
(
b
u
i
l
t
d
e
x
)
L
O
C
A
L
B
U
I
L
T
M
O
D
U
L
E
<
−
(built_dex) LOCAL_BUILT_MODULE<-
(builtdex)LOCALBUILTMODULE<−(LOCAL_BUILT_MODULE): $(built_dex)
$(LOCAL_BUILT_MODULE): $(private_key) $(certificate) $(SIGNAPK_JAR)
$(LOCAL_BUILT_MODULE): PRIVATE_PRIVATE_KEY := $(private_key)
$(LOCAL_BUILT_MODULE): PRIVATE_CERTIFICATE := $(certificate)
$(LOCAL_BUILT_MODULE): PRIVATE_ADDITIONAL_CERTIFICATES := $(foreach c,
$(LOCAL_ADDITIONAL_CERTIFICATES), $©.x509.pem $©.pk8)
$(LOCAL_BUILT_MODULE): $(AAPT) | $(ZIPALIGN)
$(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis)
$(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis)
$(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_CONFIG := $(PRODUCT_AAPT_CONFIG)
(
L
O
C
A
L
B
U
I
L
T
M
O
D
U
L
E
)
:
P
R
I
V
A
T
E
P
R
O
D
U
C
T
A
A
P
T
P
R
E
F
C
O
N
F
I
G
:
=
(LOCAL_BUILT_MODULE):PRIVATE_PRODUCT_AAPT_PREF_CONFIG:=
(LOCALBUILTMODULE):PRIVATEPRODUCTAAPTPREFCONFIG:=(PRODUCT_AAPT_PREF_CONFIG)
Settings.apk 生成
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) | $(ACP)
@echo “Install3: $@”
$(copy-file-to-new-target)
$(PRIVATE_POST_INSTALL_CMD)
上面命令把package.apk生成Settings.apk
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。