Android Studio 版本2.2及更高版本带有最新的嵌入式OpenJDK;但是,建议您自己安装JDK,因为这样您就可以独立于Android Studio进行更新。Android Studio 3.0及更高版本支持所有Java 7和Java 8语言特性的子集。Java JDKs可以从Oracle的网站下载。
将上述依赖项和排除项添加到build.gradle文件后,请尝试将gradle同步,以查看是否需要任何其他排除项。错误消息将标识应添加到排除列表中的文件路径。带有文件路径的错误消息示例是: > More than one file was found with OS independent path 'org/bytedeco/javacpp/ windows-x86_64/msvp120.dll”编译这些依赖项涉及大量文件,因此有必要在defaultConfig中将multiDexEnabled设置为true。
multiDexEnabled true
junit模块版本中的冲突通常会导致以下错误:> Conflict with dependency 'junit:junit' in project ':app'。应用程序(4.8.2)和测试应用程序(4.12)的解析版本不同。这可以通过强制所有junit模块使用相同的版本来抑制:
# enable optimization-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*-optimizationpasses 5-allowaccessmodification-dontwarn org.apache.lang.**-ignorewarnings-keepattributes *Annotation*# JavaCV-keep @org.bytedeco.javacpp.annotation interface * {*;}-keep @org.bytedeco.javacpp.annotation.Platform public class *-keepclasseswithmembernames class * {@org.bytedeco.* <fields>;}-keepclasseswithmembernames class * {@org.bytedeco.* <methods>;}-keepattributes EnclosingMethod-keep @interface org.bytedeco.javacpp.annotation.*,javax.inject.*-keepattributes *Annotation*, Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable, LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations, RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, AnnotationDefault, InnerClasses
-keep class org.bytedeco.javacpp.** {*;}-dontwarn java.awt.**-dontwarn org.bytedeco.javacv.**-dontwarn org.bytedeco.javacpp.**# end javacv# This flag is needed to keep native methods-keepclasseswithmembernames class * { native <methods>;}-keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}# For enumeration classes-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}-keepclassmembers class **.R$* { public static <fields>;}-keep class android.support.v7.app.** { *; }-keep interface android.support.v7.app.** { *; }-keep class com.actionbarsherlock.** { *; }-keep interface com.actionbarsherlock.** { *; }-dontwarn android.support.**-dontwarn com.google.ads.**# Flags to keep standard classes-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgent-keep public class * extends android.preference.Preference-keep public class * extends android.support.v7.app.Fragment-keep public class * extends android.support.v7.app.DialogFragment-keep public class * extends com.actionbarsherlock.app.SherlockListFragment-keep public class * extends com.actionbarsherlock.app.SherlockFragment-keep public class * extends com.actionbarsherlock.app.SherlockFragmentActivity-keep public class * extends android.app.Fragment-keep public class com.android.vending.licensing.ILicensingService
The example below illustrates the use of a Workspace for memory allocation in the AsyncTask of and Android Application. More information concerning ND4J Workspaces can be found here.