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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,746评论 25 709
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,591评论 2 45
  • 路由守卫 使用场景 分三种方式 案例:1、CanActivate 路由守卫用法在app内新增文件夹guard新建l...
    StevenQin阅读 985评论 0 0
  • 勤奋,是父母教我的第一个品质!他们认为,勤奋是改变人生的利器之一,有着至关重要的作用!所谓勤奋,就是坚持不懈、积极...
    BJ飞龙在天阅读 794评论 0 1
  • 今天,在腾讯的一个叫活着的专栏里看到一个关于梦想的话题。 山巅小学,渴望用知识改变命运。 浙江龙游县大力山小学坐落...
    YuLeung_Jong阅读 985评论 2 4