我不是Android开发人员,但我正在尝试为Android Studio上的应用升级Facebook SDK。之前的SDK是3.5,我试图添加4.4.1
我已按照入门指南编写了登录类,但现在当我尝试在设备上启动应用程序时,虽然它编译得很好,但它在启动时崩溃。
我收到以下错误:
08-05 21:05:25.128 25207-25207 /? E / dalvikvm:找不到上课 'com.history.HistoryOrder',从方法中引用 com.service.Global。 08-05 21:05:25.138 25207-25207 /? E / AndroidRuntime:致命异常:主要 java.lang.ExceptionInInitializerError 在com.imperautus.testProject.ActivitySplash.onCreate(ActivitySplash.java:61) 在android.app.Activity.performCreate(Activity.java:5326) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 在android.app.ActivityThread.access $ 700(ActivityThread.java:157) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1289) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:176) 在android.app.ActivityThread.main(ActivityThread.java:5317) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NoClassDefFoundError:com.history.HistoryOrder 在com.service.Global。(Global.java:113) 在com.imperautus.testProject.ActivitySplash.onCreate(ActivitySplash.java:61) 在android.app.Activity.performCreate(Activity.java:5326) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 在android.app.ActivityThread.access $ 700(ActivityThread.java:157) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1289) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:176) 在android.app.ActivityThread.main(ActivityThread.java:5317) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 在dalvik.system.NativeStart.main(本地方法)
我看到它抱怨它无法找到类com.history.HistoryOrder但是这个类在这个确切的位置并且它在转换到新的Facebook SDK之前有效(我还没有触及类的代码)。
Global.java:113说:
public static ArrayList<HistoryOrder> historyOrderList = new ArrayList<HistoryOrder>();
public static HistoryOrder historyOrderItem = new HistoryOrder();
我还将我的代码中的所有引用从app.Fragment更改为support.v4.app.Fragment版本,因为我认为这导致了问题。
任何线索?
答案 0 :(得分:6)
java.lang.NoClassDefFoundError 可能会被抛出,因为您已达到65k的限制http://developer.android.com/tools/building/multidex.html#about
如果您需要超过65k限制,则必须包含multidex支持
的gradle:
defaultConfig {
...
multiDexEnabled true
}
...
dependencies {
compile 'com.android.support:multidex:1.0.1'
...
}
清单:
<application
...
android:name="android.support.multidex.MultiDexApplication">
如果您有自定义应用程序类:
extend MultiDexApplication
或将MultiDex.install(getBaseContext());
添加到 CustomApplication onCreate()
请注意,在某些低端设备上添加 {em>自定义应用
MultiDex.install(getBaseContext());
onCreate()
仍然可以抛出java.lang.NoClassDefFoundError
:
如果有,请尝试将MultiDex.install
添加到attachBaseContext(Context base)
public class CustomApplication extends Application {
...
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
...
答案 1 :(得分:3)
该应用已更新为使用Google Services 7.5,这使得方法超过65k,这使我将mutiDexEnabled添加到true。
我不知道代码是否需要更改以支持该代码,但似乎在进行此更改后,应用程序在随机点崩溃(当我评论历史记录调用时,可访问性类崩溃了,当删除可达性时,等等。
当编译器抱怨找不到它们时,当然所有类都在正确的位置 这让我想知道multidex是否导致了这一点,所以我删除了一些库,比如从7.5版本的google play到6.5
该应用程序现在编译并运行正常,允许我添加FB sdk 4 +
我在这里发布,所以它可以帮助其他人遇到问题而无法理解他们来自哪里。
答案 2 :(得分:0)
我认为您设置了错误class path
所以请先检查您的class path
它将解决您的问题