2016-08-29 4 views
0

Ich versuche, eine Android Application Class zu erstellen, die MultidexApplication erweitert.Android Custom Multidex Anwendungsfehler

public class MyApplication extends MultiDexApplication { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     AppEventsLogger.activateApp(this); 
     registerParseSubClasses(); 
     parseInit(); 
    } 

    private void registerParseSubClasses() { 
     //registering subclasses 
     ParseObject.registerSubclass(UserPlace.class); 
     ParseObject.registerSubclass(PlaceItem.class); 
     ParseObject.registerSubclass(PlaceItemRating.class); 
    } 
    private void parseInit() { 
     Parse.initialize(new Parse.Configuration.Builder(getBaseContext()) 
      .applicationId("MYAPPID") 
      .server("MyURL") 
      //.enableLocalDataStore() 
      .build()); 
     Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE); 
     ParseFacebookUtils.initialize(this); 
    } 
} 

Und mein Android Manifest sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pnametala.application" > 


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 

android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 

und hier ist mein gradle:

apply plugin: 'com.android.application' 
android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.1" 

    defaultConfig { 
     applicationId "com.pnametala.application" 
     minSdkVersion 16 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
     jackOptions { 
      enabled true 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     targetCompatibility 1.8 
     sourceCompatibility 1.8 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:appcompat-v7:24.1.1' 
    compile 'com.android.support:design:24.1.1' 
    compile 'com.google.android.gms:play-services:9.4.0' 
    compile 'com.parse:parse-android:1.13.1' 
    compile 'com.google.maps.android:android-maps-utils:0.4.3' 
    compile 'com.android.support:support-v4:24.1.1' 
    compile 'com.weiwangcn.betterspinner:library:1.1.0' 
    compile 'com.weiwangcn.betterspinner:library-material:1.1.0' 
    compile 'com.getbase:floatingactionbutton:1.10.1' 
    compile 'com.facebook.android:facebook-android-sdk:4.15.0' 
    compile 'com.parse:parsefacebookutils-v4-android:[email protected]' 
} 

Wenn ich MultidexApplication in My AndroidManifest.xml verwenden, funktioniert es wie ein Zauber, aber Ich muss einige Init-Overrides eingeben, die ohne das nicht möglich sind.

Der Stack-Trace ist:

Anwendung kann nicht com.pnametala.application.MyApplication instanziiert: java.lang.ClassNotFoundException: Nicht Klasse "com.pnametala.application.MyApplication" auf dem Weg finden: DexPathList [[Zip-Datei "/data/app/com.pnametala.application-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.pnametala.application-1,/vendor/lib,/system/lib ]]

Wer kennt eine Lösung?

+0

hinzufügen MultiDex.install (this); in Ihrer MyApplication-Klasse sollte es einen haben. vielleicht hast du deswegen einen Fehler bekommen –

+0

@masoudvali Es gibt 'MultiDex.install (this);' in 'MultiDexApplication.attachBaseContext()' https://android.googlesource.com/platform/frameworks/multidex/+/master/library /src/android/support/multidex/MultiDexApplication.java#39 – nshmura

Antwort

0

Fügen Sie diese auf Ihre build.gradle

dexOptions { 
     javaMaxHeapSize "4g" 
    } 
+0

Hat nicht funktioniert ... –

0

Für mich, was die Frage nach dem Google-Play-Service-lib in Teile aufgeteilt aufgelöst wurde, wie here beschrieben.

Ich importiere nur die Bibliotheken, die ich wirklich brauche (wie Karten und Adressen api).

Momentan verwende ich Multidex nicht mehr.