安卓源码环境:Android.mk如何编译aar包?

85 阅读1分钟

在安卓源码top目录执行编译命令:(注意:下面的Android.mk要被include进去)

make test_aar out/target/common/obj/JAVA_LIBRARIES/test_aar_intermediates/javalib.aar

通用格式:make <module-name> out/target/common/obj/JAVA_LIBRARIES/<module-name>_intermediates/javalib.aar

把替换成LOCAL_MODULE的名字。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
​
LOCAL_MODULE_TAGS := optional
​
LOCAL_MODULE := test_aar
​
LOCAL_STATIC_JAVA_LIBRARIES :=android-common \
    android-support-v4 \
​
# LOCAL_STATIC_JAVA_AAR_LIBRARIES:= abc
​
LOCAL_SRC_FILES := $(call all-java-files-under, java)
​
res_dirs := res \
​
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs)) \
    prebuilts/sdk/current/support/v7/cardview/res \
    prebuilts/sdk/current/support/v7/appcompat/res \
    prebuilts/sdk/current/support/design/res \
​
LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages android.support.v7.cardview \
    --extra-packages android.support.v7.appcompat \
    --extra-packages android.support.design \
    --extra-packages com.abc.abc
​
​
LOCAL_JACK_ENABLED := disabled 
LOCAL_PROGUARD_ENABLED := disabled 
​
include $(BUILD_STATIC_JAVA_LIBRARY)

android.googlesource.com/platform/bu…

# Rule to build AAR, archive including classes.jar, resource, etc.
built_aar := $(intermediates.COMMON)/javalib.aar
$(built_aar): PRIVATE_MODULE := $(LOCAL_MODULE)
$(built_aar): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
$(built_aar): PRIVATE_CLASSES_JAR := $(aar_classes_jar)
$(built_aar): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR)
$(built_aar): PRIVATE_R_TXT := $(intermediates.COMMON)/R.txt
$(built_aar): $(JAR_ARGS)
$(built_aar) : $(aar_classes_jar) $(full_android_manifest) $(intermediates.COMMON)/R.txt
    @echo "target AAR:  $(PRIVATE_MODULE) ($@)"
    $(hide) rm -rf $(dir $@)aar && mkdir -p $(dir $@)aar/res
    $(hide) cp $(PRIVATE_ANDROID_MANIFEST) $(dir $@)aar/AndroidManifest.xml
    $(hide) cp $(PRIVATE_CLASSES_JAR) $(dir $@)aar/classes.jar
    # Note: Use "cp -n" to honor the resource overlay rules, if multiple res dirs exist.
    $(hide) $(foreach res,$(PRIVATE_RESOURCE_DIR),cp -Rfn $(res)/* $(dir $@)aar/res;)
    $(hide) cp $(PRIVATE_R_TXT) $(dir $@)aar/R.txt
    $(hide) $(JAR) -cMf $@ \
      $(call jar-args-sorted-files-in-directory,$(dir $@)aar)
​

参考链接

how to create AAR archive file from Android.mk - Stack Overflow: stackoverflow.com/questions/4…

Build AAR package as part of AOSP build: groups.google.com/g/android-b…