android studio导入eclipse带第三方库项目可能遇到的问题

错误1、
错误示例:
Java.util.concurrent.ExecutionException: 
java.lang.Illegal State Exception: 
Multi dex requires Build Tools 21.0.0 / Current: 20的异常

解决方法:
修改 build.gradle

Android {

compileSdkVersion 20

buildToolsVersion '21.0.0'

然后会提示更新tools,点击更新就行了。

错误2、

support-annotations库和v4包冲突

错误示例:
Error:Execution failed for task 
':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: 
java.util.zip.ZipException: duplicate entry: 
android/support/annotation/AttrRes.class

错误提示说有重复的引用这里指向了android/support/annotation/AttrRes.class

使用快捷键Ctrl+N快速查找项目中所有的AttrRes文件
我这里出现了两个,所以很有可能是这里的问题

一个是在v7包下v4包下android.support.annotation中
另个是在D:\kaifagongju\android-sdk-windows\extras\android\support\annotations中
也就是在我们的android sdk当中已经内置了该文件。

解决方法:
选择其一删除。
其他类似只要是重复问题都可以用这个办法解决。

参考文章: Android Support库——support annotations

错误3、
示例:
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: 
com.android.ide.common.process.ProcessException: 
java.util.concurrent.ExecutionException: 
com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: Process 'command 
'D:\Program Files\Java\jdk1.8.0_11\bin\java.exe'' finished with non-zero exit value 3

该类异常一般是在导入之前的eclipse项目时,由于lib过多出现重复引入,或方法超过规定的64k,出现溢出的情况。
也有可能是tools版本过低的问题。

解决方案:
检查项目下各个model的buildToolsVersion版本是否一致,不一致的话修改成最新的。

在app的model下

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.2'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
      //multidex设为启用
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    // 保证其他的lib没有被preDex,分配限制内存
    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "4g"
    }
}

同时引入包

dependencies {
    compile 'com.android.support:multidex:1.0.0'
}

project下加入

// 保证dex_files文件中指定的文件都加载到Main Dex中
afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex'
        dx.additionalParameters += "--main-dex-list=$projectDir/dex_files".toString()
    }
}

最后在Application中重写attachBaseContext方法
这里建议自定义一个新的MyApplication继承Application,

public class SoftApplication extends Application {
    ......
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}

最后在AndroidMainfest.xml中把application修改成我们自己的

 <application
        android:name="com.MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/img_logo"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
          ......
</application>

参考文章 :
1、解决AndroidStudio添加ProjectLibary后在编译时遇到的各种问题之解决方式索引(finished with non-zero exit value and so on…)
2、什么是MultiDex
3、Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
4、finished-with-non-zero-exit-value-3

    原文作者:八怪不姓丑
    原文地址: https://www.jianshu.com/p/2b4d3d1719c8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞