2017-07-16 15 views
1

(アンドロイドStudioでビルドする際にアプリが完璧に動作します)にAARを含めます。は、私はメイクを通じてAndroidアプリを構築しようとしているアンドロイドのMakefileプロジェクト

私が使用されている.aarモジュールに問題を抱えています。 makeは正常に完了しますが、.apkのサイズはちょっとです(80MBの代わりに500KB)。 .aarは、複数の.so ./libs内のファイルだけでなく、./assetsを持っていますが、両方が含まれていないようです。

Android.mk:

LOCAL_SHARED_LIBRARIES := libnativelib 
LOCAL_STATIC_JAVA_LIBRARIES:= aarmodulename 
... 
... 
include $(BUILD_PACKAGE) 
include $(CLEAR_VARS) 
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:=aarmodulename:libs/aarmodulename.aar 
include $(BUILD_MULTI_PREBUILT) 

私もパッケージ化されるの.soファイルを強制的に試してみたが、これはそうする適切な方法であれば、私も知っているdpn't:

include $(CLEAR_VARS) 
LOCAL_MODULE := libnativelib 
LOCAL_SRC_FILES := libs/so/libnativelib.so 
LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE_SUFFIX := .so 
LOCAL_MODULE_CLASS := SHARED_LIBRARIES 
include $(BUILD_PREBUILT) 
* .soのファイルとAARの資産がパッケージ化されませんなぜ

?どうすれば修正できますか?

答えて

1

同じ問題が後AOSPでstatic_java_library.mkを読んで、答えは基本的に発見され、meettedされています。

この問題を解決するには、プロジェクトAndroid_MkファイルにLOCAL_USE_AAPT2 := trueを定義する必要があります。

次はstatic_java_library.mkのコードの一部です:

# Hack to build static Java library with Android resource 
# See bug 5714516 
all_resources := 
need_compile_res := 
# A static Java library needs to explicily set LOCAL_RESOURCE_DIR. 
ifdef LOCAL_RESOURCE_DIR 
    need_compile_res := true 
    LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d))) 
endif 
ifdef LOCAL_USE_AAPT2 
    ifneq ($(LOCAL_STATIC_ANDROID_LIBRARIES),) 
     need_compile_res := true 
    endif 
endif 
ifeq ($(need_compile_res),true) 
all_resources := $(strip \ 
    $(foreach dir, $(LOCAL_RESOURCE_DIR), \ 
     $(addprefix $(dir)/, \ 
     $(patsubst res/%,%, \ 
     $(call find-subdir-assets,$(dir)) \ 
    ) \ 
) \ 
)) 

フォローはサンプルです:= trueの場合、それはうまくいきませんでした:

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE_TAGS := optional 

ifeq ($(TARGET_BUILD_APPS),) 
    # Use AAPT2 only when TARGET_BUILD_APPS is empty because AAPT2 is not compatible with the current 
    # setup of prebuilt support libs used in unbundled builds. b/29836407 
    LOCAL_USE_AAPT2 := true 
endif 

# SRC files 
LOCAL_SRC_FILES := \ 
    $(call all-java-files-under, src) 

LOCAL_RESOURCE_DIR := \ 
    res 

# JAR 
LOCAL_STATIC_JAVA_LIBRARIES := \ 

ifdef LOCAL_USE_AAPT2 
    LOCAL_SHARED_ANDROID_LIBRARIES := \ 
     android-support-annotations \ 
     android-support-compat \ 
     android-support-core-ui \ 
     android-support-v7-appcompat \ 
     android-support-v7-recyclerview 
else 
    LOCAL_AAPT_FLAGS := --auto-add-overlay \ 
     --extra-packages android.support.compat \ 
     --extra-packages android.support.v7.appcompat \ 
     --extra-packages android.support.v7.recyclerview 

    LOCAL_RESOURCE_DIR += \ 
     frameworks/support/compat/res \ 
     frameworks/support/v7/appcompat/res \ 
     frameworks/support/v7/recyclerview/res 

    LOCAL_JAVA_LIBRARIES := \ 
     android-support-annotations \ 
     android-support-compat \ 
     android-support-core-ui \ 
     android-support-v7-appcompat \ 
     android-support-v7-recyclerview 

    # OR define 
    LOCAL_STATIC_ANDROID_LIBRARIES := \ 
endif 

LOCAL_MANIFEST_FILE := main/AndroidManifest.xml 
LOCAL_PACKAGE_NAME := PACKAGE_NAME 
LOCAL_CERTIFICATE := platform 
LOCAL_PRIVILEGED_MODULE := true 
LOCAL_PROGUARD_FLAG_FILES := proguard.flags 

# Comment for now unitl all private API dependencies are removed 
# LOCAL_SDK_VERSION := system_current 

include $(BUILD_PACKAGE) 
+0

私はLOCAL_USE_AAPT2を使用してみました。しかし、正確な結果だったか覚えていないことができます..私はこのソリューションを使用@ysch – Ysch

+0

は私の問題を解決しました。私は答えにサンプルを追加しました。あなたはこの問題を解決した場合は、再度試してみることができます。 –

関連する問題