KitKat上的应用程序崩溃

Fil*_*nco 1 java android

我已经在较新的设备上测试了该应用程序,但是在较旧的手机上却崩溃了,我不明白:

  E/GMPM: getGoogleAppId failed with status: 10
    Uploading is not possible. App measurement disabled
    Shutting down VM
    threadid=1: thread exiting with uncaught exception (group=0xa4d35b20)
    FATAL EXCEPTION: main
    Process: md.darwin.catalog, PID: 1271
    java.lang.NoClassDefFoundError: md.darwin.catalog.utils.AnalyticsTrackers$1
    at md.darwin.catalog.utils.AnalyticsTrackers.get(AnalyticsTrackers.java:64)
    at md.darwin.catalog.utils.MyApplication.onCreate(MyApplication.java:27)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)
    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我想它可能与Google Analytics(分析)有关,但是为什么会getGoogleAppId失败?关于如何解决这个问题的任何线索?


更新资料 MyApplication

public class MyApplication extends Application {
public static final String TAG = MyApplication.class
        .getSimpleName();

private static MyApplication mInstance;

@Override
public void onCreate() {
    super.onCreate();
    mInstance = this;

    AnalyticsTrackers.initialize(this);
    AnalyticsTrackers.getInstance().get(AnalyticsTrackers.Target.APP);
}

public static synchronized MyApplication getInstance() {
    return mInstance;
}

public synchronized Tracker getGoogleAnalyticsTracker() {
    AnalyticsTrackers analyticsTrackers = AnalyticsTrackers.getInstance();
    return analyticsTrackers.get(AnalyticsTrackers.Target.APP);
}
 // and the other methods related to GA
Run Code Online (Sandbox Code Playgroud)

这是AnalyticsTrackers

// AnalyticsTrackers 
public final class AnalyticsTrackers {

public enum Target {
    APP
}

private static AnalyticsTrackers sInstance;

public static synchronized void initialize(Context context) {
    if (sInstance != null) {
        throw new IllegalStateException("Extra call to initialize analytics trackers");
    }

    sInstance = new AnalyticsTrackers(context);
}

public static synchronized AnalyticsTrackers getInstance() {
    if (sInstance == null) {
        throw new IllegalStateException("Call initialize() before getInstance()");
    }

    return sInstance;
}

private final Map<Target, Tracker> mTrackers = new HashMap<Target, Tracker>();
private final Context mContext;

/**
 * Don't instantiate directly - use {@link #getInstance()} instead.
 */
private AnalyticsTrackers(Context context) {
    mContext = context.getApplicationContext();
}

public synchronized Tracker get(Target target) {
    if (!mTrackers.containsKey(target)) {
        Tracker tracker;

            switch (target) {
                case APP:
                    tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.app_tracker);
                    break;
                default:
                    throw new IllegalArgumentException("Unhandled analytics target " + target);
            }
            mTrackers.put(target, tracker);


    }

    return mTrackers.get(target);
}
Run Code Online (Sandbox Code Playgroud)

}

Fil*_*nco 5

问题出在哪里multidex;棒棒糖以与KitKat不同的方式处理它。如果我做对了,在KitKat中,系统无法在一个dex文件中找到声明的类,而该文件位于另一个dex文件中,因此它崩溃了。重要的是,添加multiDexEnabled truebuild.gradle,还必须在Application类中设置multidex:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
Run Code Online (Sandbox Code Playgroud)

或者如果您没有Application类,请创建它,然后设置multidex。

http://frogermcs.github.io/MultiDex-solution-for-64k-limit-in-Dalvik/