在开发安卓app时,我们通常可以用 AndroidStudio 开发应用,然后 build apk ,以预装的方式放到源码下编译。如果需要用源码来编译 AndroidStudio 工程,该怎么做呢 ?
下面来实操学习 android Makefile 的使用。
将 AndroidStudio 工程放到源码 device/xxx/commom/apps 目录下,
8.0 的放到 vendor/xxx/common/apps/ 目录下,
本文以 MakefileDemo 为例,放到 vendor/xxx/common/apps/ 目录下
1.在 MakefileDemo 目录添加 Android.mk
#当前目录下没有需要编译的文件,请向子目录深入
include $(all-subdir-makefiles)
2.在 MakefileDemo/app 目录添加 Android.mk
#当前目录下没有需要编译的文件,请向子目录深入
include $(all-subdir-makefiles)
3.在 MakefileDemo/app/src 目录添加 Android.mk
#当前目录下没有需要编译的文件,请向子目录深入
include $(all-subdir-makefiles)
4.在 MakefileDemo/app/src/main 目录添加 Android.mk
# 固定在前,优先于CLEAR_VARS
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 编译出来的apk名称
LOCAL_PACKAGE_NAME := MakefileDemo
LOCAL_MODULE_TAGS := optional
#打系统签名
LOCAL_CERTIFICATE := platform
# 指定 res 目录
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
# 指定 java 文件目录
#如果是 eclipse 工程目录,则用 LOCAL_SRC_FILES := \ $(call all-java-files-under, src)
LOCAL_SRC_FILES := \
$(call all-java-files-under, java) \
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
include $(call all-makefiles-under,$(LOCAL_PATH))
这样,就可以 mm -B 编译这个工程了。我的工程是AS默认创建的,引用了 design 包,编译报错
/MakefileDemo/app/src/main/res/values/styles.xml:8: error: Error: No resource found that matches the given name: attr 'colorAccent'.
/MakefileDemo/app/src/main/res/values/styles.xml:6: error: Error: No resource found that matches the given name: attr 'colorPrimary'.
/MakefileDemo/app/src/main/res/values/styles.xml:7: error: Error: No resource found that matches the given name: attr 'colorPrimaryDark'.
修改如下,编译后运行软件,OK
# 固定在前,优先于CLEAR_VARS
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 编译出来的apk名称
LOCAL_PACKAGE_NAME := MakefileDemo
LOCAL_MODULE_TAGS := optional
#打系统签名
LOCAL_CERTIFICATE := platform
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
frameworks/support/v7/appcompat/res \
frameworks/support/design/res
LOCAL_SRC_FILES := \
$(call all-java-files-under, java) \
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-v7-appcompat \
android-support-design \
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages android.support.design \
--extra-packages android.support.v7.appcompat
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
include $(call all-makefiles-under,$(LOCAL_PATH))