1

は、私は、私は、ライブラリモジュールを含む、私のアプリbuild.gradleファイルでは、私は二つのモジュールを得たAndroidで異なるJAVAバージョンを扱うにはどうすればいいですか?

(ラムダなど)いくつかのネイティブJava 8の機能(アプリ、てMyLibrary)

でのAndroid Studioの3.0のプレビューをテストしていました。 MyLibrary build.gradleファイルで

implementation project(':mylibrary') 

、私はラムダ式をテストするために、Javaのバージョンを指定します。

compileOptions { 
    android.compileOptions.sourceCompatibility 1.8 
    android.compileOptions.targetCompatibility 1.8 
} 

アンドロイドスタジオをcanary 3からcanary 5にアップグレードするまではうまくいきました。私のアプローチは壊れています。私は26minSdkVersionをバンプするための命令を実行した後

私はダイナミック

Information:Gradle tasks [:app:assembleDebug] 
/Users/chchi/Documents/PayPal/Android/AS3.0Preview/app/src/main/java/com/example/chchi/myapplication/MainActivity.kt 
Error:Error converting bytecode to dex: 
Cause: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26) 
Error:com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26) 
... 
... 
Error: ... 5 more 
Error:...at bytecode offset 00000016 
Error:locals[0000]: Lcom/android/tools/fd/runtime/IncrementalChange; 
Error:locals[0001]: <invalid> 
Error:...while working on block 0016 
Error:...while working on method testJava8feature:()V 
Error:...while processing testJava8feature()V 
Error:...while processing com/example/mylibrary/LamdaTest.class 
Error:Execution failed for task ':app:transformClassesWithDexBuilderForDebug'. 
> com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Unable to convert input to dex archive. 
Information:BUILD FAILED in 8s 
Information:40 errors 
Information:1 warning 
Information:See complete output in console 

ため、次のエラーメッセージが表示されました。私はdexファイルへの変換に関して次のエラーが発生しています。

Information:Gradle tasks [:app:assembleDebug] 
Error:Error converting bytecode to dex: 
Cause: Shouldn't happen 
Error:com.android.dex.util.ExceptionWithContext: Shouldn't happen 
Error: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
Error: at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
Error: at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
Error: at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
... 
Error:Caused by: com.android.dex.util.ExceptionWithContext: Shouldn't happen 
Error: at com.android.dex.util.ExceptionWithContext.withContext(ExceptionWithContext.java:45) 
Error: at com.android.dx.dex.file.MixedItemSection.placeItems(MixedItemSection.java:320) 
Error: at com.android.dx.dex.file.DexFile.toDex0(DexFile.java:611) 
Error: at com.android.dx.dex.file.DexFile.toDex(DexFile.java:242) 
Error: at com.android.builder.dexing.DxDexArchiveBuilder.lambda$processJobChunk$0(DxDexArchiveBuilder.java:118) 
Error: ... 5 more 
Error:Caused by: java.lang.RuntimeException: Shouldn't happen 
Error: at com.android.dx.dex.file.ValueEncoder.constantToValueType(ValueEncoder.java:276) 
Error: at com.android.dx.dex.file.ValueEncoder.writeConstant(ValueEncoder.java:137) 
Error: at com.android.dx.dex.file.ValueEncoder.writeArray(ValueEncoder.java:310) 
Error: at com.android.dx.dex.file.CallSiteItem.place0(CallSiteItem.java:63) 
Error: at com.android.dx.dex.file.OffsettedItem.place(OffsettedItem.java:242) 
Error: at com.android.dx.dex.file.MixedItemSection.placeItems(MixedItemSection.java:311) 
Error: ... 8 more 
Error:...while placing call site{method-handle{invoke-static,method{java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;}}, string{"adder"}, proto{()Lcom/example/mylibrary/PayPalInterface;}, (II)V, method-handle{invoke-static,method{com.example.mylibrary.LamdaTest.lambda$testJava8feature$0:(II)V}}, (II)V} 
Error:...while writing section 12 
Error:Execution failed for task ':app:transformClassesWithDexBuilderForDebug'. 
> com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Unable to convert input to dex archive. 
Information:BUILD FAILED in 1s 
Information:38 errors 
Information:0 warnings 
Information:See complete output in console 

結局、私はバンプと1.8にすべての私のモジュールのコンパイラを通すために(minSdkVersion26に設定する必要はありません)をターゲットとしなければなりませんでした。私の図書館モジュールに1.8のみを使用させる方法はありますか?私の図書館を使用している人は誰でも今どこにいても残っていますか(1.7)?

high backward compatibilityの機能しか使用していない場合は、ライブラリターゲットを1.8に使用している人は誰になるのでしょうか?

答えて

1

これは新しいAndroid Gradleプラグインのバグです。私は私のライブラリプロジェクトで同じ問題に直面しています。 Java 8バイトコードをレガシーバイトコードに変換するdesugarがライブラリプロジェクトで動作していないようです。

私はGoogleに問題を報告しました。それが修正されることを願っています。 https://issuetracker.google.com/issues/63513242

+2

私は今カナリアン6に更新されましたが、このリリースで修正されているようです。 https://developer.android.com/studio/preview/index.html(7/10/17) –

関連する問題