2017-11-21 5 views
0

私のプロジェクトにaarファイルを追加しました。 aarファイルのサイズは約50 MBです。そのアプリ内で実行されるユニティゲームです。私の現在のアプリケーションのapkのサイズは約82 MBなので、このUnity libraryの場合、apkサイズは130 MB`preDexLibraries`がtrueのときにアプリケーションがロールポップでクラッシュする

になります。デフォルトで私はこれらのオプションを使用していました。 preDexLibrariesがfalseに設定されている場合

dexOptions { 
    javaMaxHeapSize "4g" //specify the heap size for the dex process 
    preDexLibraries false 
} 

は今、Gradleの操作は、次のエラーメッセージで失敗します。私はtruepreDexLibrariesを設定した場合、それが構築され、ロリポップ+デバイス上で正常に動作しますが、次のエラーメッセージとロリポップに失敗し、

Error:Execution failed for task ':app:transformClassesWithDexForDebug'. 
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Translation has been interrupted 

AnalyticsSampleAppとして

11-21 17:43:25.229 14213-14213/com.myapp.app E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.myapp.app, PID: 14213 
    java.lang.RuntimeException: Unable to instantiate application com.myapp.app.AnalyticsSampleApp: java.lang.ClassNotFoundException: Didn't find class "com.myapp.app.AnalyticsSampleApp" on path: DexPathList[[zip file "/data/app/com.myapp.app-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.app-2/lib/arm, /vendor/lib, /system/lib]] 
    at android.app.LoadedApk.makeApplication(LoadedApk.java:628) 
    android.app.ActivityThread.handleBindApplication(ActivityThread.java:4966) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1493) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5912) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

は、私のアプリケーション私はこれをググ

Applicationから拡張するクラス、しかしpreDexLibrariesが実際に何をするか理解することはまだできません。

preDexLibraries(あなたの第三Qの答えは):それはインクリメンタルで使用することができるので、それは( DEXファイルライブラリのたびを構築せず)を構築したライブラリのうちのdexファイルを作成します。クリーン ビルド時にこの項目を使用すると、すべてが少し遅くなります。

+0

;それに続いて 'MultiDex.install(this);; – Programmer

+0

@Programmer:私はロリポップ+デバイスをターゲットにしていますが、これはまだ必要ですか?私はちょうどgradideからmultidexを有効にしました –

答えて

1

gradD内のdefaultConfig {...}内にmultiDexEnabledをtrueに追加してください。

例えば:

defaultConfig { 
     applicationId 'com.savingyou.android' 
     minSdkVersion 19 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0.0" 
     multiDexEnabled true 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     } 

と依存{...}

例えば内部コンパイル 'com.android.support:multidex:1.0.1' を追加:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    testCompile 'junit:junit:4.12' 
    compile project(':aars') 
    compile 'com.yalantis:ucrop:2.2.0' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    compile 'com.android.support:design:25.3.1' 
    compile 'com.android.support:cardview-v7:25.3.1' 
} 

うまくいかない場合は、クラスを作成してください

import android.content.Context; 
import android.support.multidex.MultiDexApplication; 

    public class EnableMultiDex extends MultiDexApplication { 
     private static EnableMultiDex enableMultiDex; 
     public static Context context; 

     public EnableMultiDex(){ 
      enableMultiDex=this; 
     } 

     public static EnableMultiDex getEnableMultiDexApp() { 
      return enableMultiDex; 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      context = getApplicationContext(); 

     } 
    } 

とマニフェスト所与のアンドロイドで:名= "packagename.EnableMultiDex"

例えば:あなたがアプリケーションを拡張するので、あなたはその後、 `attachBaseContext`関数をオーバーライドsuper.attachBaseContext(ベース)`呼び出す必要が

<application 
    android:name="YourPakageName.EnableMultiDex" 
    android:hardwareAccelerated="true" 
    android:icon="@drawable/wowio_launch_logo" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    tools:node="replace"> 
+0

ありがとう、しかし、これを追加した後もクラッシュはまだあります。 –

+0

同じエラーログが来ていますか? –

+0

はい、同じエラーログです。これはロリポップ端末でのみ発生します –

関連する問題