我與一些本地Java 8的功能(如λ)如何在Android中處理不同的JAVA版本?
我有兩個模塊(應用程序,在MyLibrary)
測試的Android 3.0工作室預覽我的應用程序build.gradle
文件,我包括庫模塊。
implementation project(':mylibrary')
在在MyLibrary build.gradle
文件,我爲了測試lambda表達式指定的Java版本。
compileOptions {
android.compileOptions.sourceCompatibility 1.8
android.compileOptions.targetCompatibility 1.8
}
這是工作細到我,直到我從金絲雀3 android的工作室升級到金絲雀5,我的做法是壞了。
我得到了動態
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
以下錯誤消息我按照指示磕碰minSdkVersion
到26
後。我收到有關轉換爲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
(無需設置minSdkVersion
到26
)爲了讓編譯過程。有沒有辦法讓我的圖書館模塊只使用1.8
,誰使用我的圖書館仍然可以留在他們現在的位置(1.7
)?
如果我只使用具有high backward compatibility的某些功能,那麼爲什麼我應該擔心是否使用我的庫目標到1.8
?
我現在剛剛更新到金絲雀6,它似乎已在此版本中修復。 https://developer.android.com/studio/preview/index.html(7/10/17) –