我在项目中添加了aar
个文件。 aar文件的大小约为50 MB
,它是在应用程序内部运行的统一游戏。我当前应用的apk
大小约为82 MB,因此使用此Unity library
,其大小为130 MB
默认我使用这些dex选项。
dexOptions {
javaMaxHeapSize "4g" //specify the heap size for the dex process
preDexLibraries false
}
现在,当preDexLibraries
设置为false时,gradle操作将失败,并显示以下错误消息。
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
如果我将preDexLibraries
设置为true
,它会在棒棒糖+设备上构建并成功运行,但在棒棒糖上失败并显示以下错误消息。
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)
其中AnalyticsSampleApp
是我的Application类,它从Application
我用Google搜索了这个,但仍无法理解preDexLibraries
实际上做了什么。
preDexLibraries (你的第三个Q的答案):它从库中构建dex文件,因此它可以用于增量构建(不构建) 每次为图书馆提供dex文件)。所以在清洁时使用这个项目 构建使一切变慢。
答案 0 :(得分:1)
请在gradle内的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();
}
}
并在你的清单中给出android:name =“packagename.EnableMultiDex”
例如:
<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">