举例 MUSIC
参考https://www.cnblogs.com/wainiwann/p/3837936.html C编译的配置
- Android.mk
LOCAL_PATH:= $(call my-dir)
#每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
#宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。
include $(CLEAR_VARS)
#CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
#例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
#这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能#避免相互影响。
LOCAL_MODULE_TAGS := optional
#user: 指该模块只在user版本下才编译
#eng: 指该模块只在eng版本下才编译
#tests: 指该模块只在tests版本下才编译
#optional:指该模块在所有版本下都编译 表示输出在out/target/product/../system
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
src/com/android/music/IMediaPlaybackService.aidl
#宏all-java-files-under定义在build/core/definitions.mk中
# 还可以加aidl
LOCAL_PACKAGE_NAME := Music
# 添加包名
LOCAL_SDK_VERSION := current
# 使用当前SDK版本
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
# 加入代码混淆
include $(BUILD_PACKAGE)
#编译打包成APK文件
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
# 编译子目录的makedile文件
[tips]
” := ” 只看赋值之前的
“=” 后面的赋值会覆盖前面的变量
“+=” 表示增加
- 指定依赖的共享java类库
LOCAL_JAVA_LIBRARIES += telephony-common
- 使用第三方静态库,添加如下:
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
- 添加android 签名
# system
LOCAL_CERTIFICATE := platform
AndroidManifest.xml的manifest节点中添加 android:sharedUserId=”android.uid.system”
# shared
LOCAL_CERTIFICATE := media
AndroidManifest.xml的manifest节点中增加android:sharedUserId=”android.uid.shared”
#media
LOCAL_CERTIFICATE := media
AndroidManifest.xml的manifest节点中增加 android:sharedUserId=”android.media”
使用第三方库,就需要引入 预编译
include $(BUILD_MULTI_PREBUILT)
Music 的App 写完了,还需要在device 目录下
device/XXX/XXX/device.mk 添加
# Muisc
PRODUCT_PACKAGES += Music
然后删除make -j8 重新编译,增量编译
补充:
LOCAL_DEX_PREOPT := false
表示不会生成odex文件,有时候,需要在user-debug模式去开发,但是这个应用只想在apk 包下调试,这就特别好用,重新编译之前,将out 目录下,app的目录删除,重新make