如何将番石榴导入Android应用程序
将番石榴导入Android项目的正确方法是什么?每次尝试使用它时,我都会得到一个如何将番石榴导入Android应用程序,android,android-studio,apk,guava,Android,Android Studio,Apk,Guava,将番石榴导入Android项目的正确方法是什么?每次尝试使用它时,我都会得到一个NoClassDefFoundError 这就是我正在做的,以产生崩溃。我使用的是安卓Studio 3.0金丝雀7 使用空活动模板创建新项目文件>新建>新项目,目标API 26.0 添加到dependencies部分的app/build.gradle implementation "com.google.guava:guava:20.0" 将其添加到MainActivity.java ImmutableList&
NoClassDefFoundError
这就是我正在做的,以产生崩溃。我使用的是安卓Studio 3.0金丝雀7
空活动
模板创建新项目文件>新建>新项目
,目标API 26.0
dependencies
部分的app/build.gradle
implementation "com.google.guava:guava:20.0"
MainActivity.java
ImmutableList<String> foo = ImmutableList.of("A", "B", "C");
Log.d("MainActivity", foo.get(0));
22.0-android
及更高版本。确保使用-android
风格,否则会遇到NoClassDefFoundError
解释
在发布了如何手动清理项目和从模拟器卸载APK的问题后,我学到了这一点。事实证明,版本20.0
确实有效,但在此之前我尝试过版本21.0
,但未能清除
自21.0版起,非-android
口味的番石榴正在使用Java8。在21.0
之前的android版本和风格都使用Java7。这在22.0版的这些中进行了描述
我测试了这些口味和版本:
20.0(Java 7)
-有效
21.0(Java8)
-不起作用
22.0(Java8)
-不起作用
22.0-android(Java7)
-works
使用版本21.0
或22.0
(无-android
)时,ImmutableList
类会被引用,但不会编译到dex文件中(因为它是斜体)。这导致了NoClassDefFoundError
正如安卓所解释的那样
在树状图中,斜体节点是没有
所选索引文件中的定义
它进一步解释说
DEX文件可以引用在
不同的文件。例如,System.out.println()是对
Android框架中的println()方法
但在本例中,这些方法和类定义不应该出现在其他文件中。只是没有添加它们
与之相比,使用20.0
或22.0-android
,其中实际上编译了ImmutableList类
应用程序将按预期启动。TL;DR
使用guava版本22.0-android
及更高版本。确保使用-android
风格,否则会遇到NoClassDefFoundError
解释
在发布了如何手动清理项目和从模拟器卸载APK的问题后,我学到了这一点。事实证明,版本20.0
确实有效,但在此之前我尝试过版本21.0
,但未能清除
自21.0版起,非-android
口味的番石榴正在使用Java8。在21.0
之前的android版本和风格都使用Java7。这在22.0版的这些中进行了描述
我测试了这些口味和版本:
20.0(Java 7)
-有效
21.0(Java8)
-不起作用
22.0(Java8)
-不起作用
22.0-android(Java7)
-works
使用版本21.0
或22.0
(无-android
)时,ImmutableList
类会被引用,但不会编译到dex文件中(因为它是斜体)。这导致了NoClassDefFoundError
正如安卓所解释的那样
在树状图中,斜体节点是没有
所选索引文件中的定义
它进一步解释说
DEX文件可以引用在
不同的文件。例如,System.out.println()是对
Android框架中的println()方法
但在本例中,这些方法和类定义不应该出现在其他文件中。只是没有添加它们
与之相比,使用20.0
或22.0-android
,其中实际上编译了ImmutableList类
应用程序按预期启动
FATAL EXCEPTION: main
Process: com.letsdoit.guavaissue, PID: 14366
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/collect/ImmutableList;
at com.letsdoit.guavaissue.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.common.collect.ImmutableList" on path: DexPathList[[zip file "/data/app/com.letsdoit.guavaissue-1/base.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.letsdoit.guavaissue-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.letsdoit.guavaissue-1/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.letsdoit.guavaissue.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)