Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Android应用程序适应在没有multiDex的情况下使用改型_Android_Retrofit2_Android Multidex - Fatal编程技术网

如何使Android应用程序适应在没有multiDex的情况下使用改型

如何使Android应用程序适应在没有multiDex的情况下使用改型,android,retrofit2,android-multidex,Android,Retrofit2,Android Multidex,我有一个Android项目,它将从改型中受益。它仍处于非常早期的阶段,只有不到12个函数和类定义。一旦我给Gradle添加了改造,我就有一个DexIndexOverflowException 向项目中添加多索引似乎为时过早,特别是因为它似乎是由添加一个依赖项触发的。当然,我一定是做错了什么,因为这些基本示例似乎不需要多重索引。我应该做些什么不同的事情 apply plugin: 'com.android.application' android { compileSdkVersion

我有一个Android项目,它将从改型中受益。它仍处于非常早期的阶段,只有不到12个函数和类定义。一旦我给Gradle添加了改造,我就有一个DexIndexOverflowException

向项目中添加多索引似乎为时过早,特别是因为它似乎是由添加一个依赖项触发的。当然,我一定是做错了什么,因为这些基本示例似乎不需要多重索引。我应该做些什么不同的事情

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.mydomain.myapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        //multiDexEnabled  true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),     'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
    compile 'com.android.support:support-v4:24.0.0-beta1'
    compile 'com.google.android.gms:play-services:9.0.0'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    //compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    //compile 'com.android.support:multidex:1.0.0'
}    
解决方案:

删除Google Play Services API依赖项,并根据需要仅包括特定的Google Play Services API依赖项。我删除了:

compile 'com.google.android.gms:play-services:9.0.0'
原因:

DEX文件包含应用程序的类定义和附加数据,包括其依赖项。如果有>64K方法,则需要有多个DEX文件,包括Android框架方法和库方法

一个全新的应用程序从很多方法开始。 我不知道Android框架中包含了多少种方法,但它非常多,而且我确信它有数千到数万种。 我不知道Google Play服务中包含了多少方法,但是

在Android框架和Google Play服务之间,可能没有超过几千种方法的空间

是构建在上的抽象层。OkHttp涵盖了很多内容,包括SPDY、HTTP/2、加密、连接池等,并且依赖于许多Java框架。任何涵盖范围如此广泛的框架都将有许多方法。在我的情况下,它足以冲破64K的障碍。这可能是一个合理的数额


只从Google Play Services编译必要的方法类似的问题显示,在Gradle配置中,您可以非常轻松地只从Google Play Services导入所需的API。有关更多信息,请参阅。

好的,我也遇到了同样的问题。如果您希望使用multiDex进行改装,并且希望在项目中保留Google Play服务以使用其API,请按照以下步骤操作:

1-在渐变上保持启用多索引的
true

2-在渐变中添加此依赖项

compile 'com.android.support:multidex:1.0.1'
3-创建此类:

import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

public class MultiDexApplication extends Application {

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
}
4-在AndroidManifest.xml上添加:

<application
    android:name=".MultiDexApplication"
...
</application>