2017-03-23 12 views
1

アプリケーション(Androidスタジオで開発されたもの)はAARをライブラリとして使用します。私はAOSPツリーでこのアプリを構築する必要があります。だから私はAndroid.mkを作成しました:aarサポート依存関係はAOSPビルドで取得されません

LOCAL_STATIC_JAVA_AAR_LIBRARIES:= <aar alias> 

include $(BUILD_PACKAGE) 

include $(CLEAR_VARS) 

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <aar alias>:libs/<lib file>.aar 

include $(BUILD_MULTI_PREBUILT) 

ビルドが正常に完了しますが、問題はAARはその「LIBS」ディレクトリにJARファイルの数が含まれていることです。これらのJARはビルドに含まれていないため、アプリケーションがクラッシュするようです(NoClassDefFoundError)。

AOSPはAARの完全なサポートがありませんか?それとも私は何かが恋しいですか?ありがとう。私はAndroid 6.0.1を使用しています。

答えて

1

あなたのやり方は正しいです。また、aarに含まれるjarファイルもこれに含まれます。私はそれにaaptフラグを含めることを忘れてしまったと思います。

LOCAL_AAPT_FLAGS += --extra-packages your.package.name 
+0

これは役に立ちません。 --extra-packagesの動作を確認するために、ガベージコンテンツを含む新しいmylib.jarファイルを作成し、それをAARのlibsフォルダに入れました。 libsの内容がビルドに含まれていた場合、誤った.jarファイルが原因でビルドが失敗するはずです。しかし、ビルドは成功裏に完了します。 AARファイルのAndroidManifest.xmlに定義されているように、パッケージ名を渡します。正しい? –

+0

私はaaptフラグを含むことはあなたのビルドが適切になる間にjarファイルを含むことを伝えませんでした。私のコメントをチェックしてください: "やっているやり方は正しいです。そして、aarに含まれるjarファイルもこれに含まれます。" aaptフラグを含む適切なビルドを作成してください。まだ動作していない場合は、mkファイルをここで共有してください。 – prateekj

+0

もちろん、AARのこのリソースがビルドに含まれていないため、LOCAL_AAPT_FLAGS + = --extra-packages your.package.nameを追加しました。もちろん、aarのclasses.jarもビルドに含まれています。問題は、AARのlibs/*。jarが自動的にビルドに組み込まれないことです。 –

0

ここで死者を育てると、私は同じビアビールを経験しました。 同じ./jni/の* .soファイルと同じです。およびaar資産。 $(BUILD_MULTI_PREBUILT)を見ると、クラスjarファイルとresファイルのみが表示されています。

私はそれらのコンポーネント(* .so、* .jar、assets)を抽出して、アプリケーションのAndroid.mkに明示的に追加しました。

1

私は次のようになってしまった:

-inアプリケーションのAndroid.mk:

LOCAL_STATIC_JAVA_AAR_LIBRARIES += coollibrary 

include $(LOCAL_PATH)/java-static-lib-from-aar.mk 

-java-static-lib-from-aar.mk:

define list-jar-libs-from-aar 
    $(foreach f, $(2), $(shell if [ -f $(LOCAL_PATH)/$(f)/$(1).aar ]; then unzip -Z1 $(LOCAL_PATH)/$(f)/$(1).aar libs/*.jar | sed 's/libs\///g; s/\.jar//g'; fi)) 
endef 

define build-jar-lib-from-aar 
$(2): $(1) 
    -mkdir -p $(dir $2);\ 
    cp -fp $1 $2 
endef 

MY_STATIC_JAVA_LIBS := $(foreach aar,$(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ 
    $(foreach jar, $(call list-jar-libs-from-aar,$(aar), libs aosplibs),\ 
     $(aar)_$(jar))) 

    $(info Adding following java libraries from AAR(s) into LOCAL_STATIC_JAVA_LIBRARIES: $(MY_STATIC_JAVA_LIBS)) 
LOCAL_STATIC_JAVA_LIBRARIES += $(MY_STATIC_JAVA_LIBS) 

$(foreach aar,$(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ 
    $(foreach jar, $(call list-jar-libs-from-aar,$(aar), libs aosplibs),\ 
     $(eval $(call build-jar-lib-from-aar,$(call intermediates-dir-for,JAVA_LIBRARIES,$(aar),,COMMON)/aar/libs/$(jar).jar,$(call intermediates-dir-for,JAVA_LIBRARIES,$(aar)_$(jar),,COMMON)/javalib.jar)))) 

のjava -static-lib-from-aar.mkは、AARが./libsおよびaosplibsディレクトリーに存在することを前提としています。

関連する問題