美文网首页AndroidIT互联网那些事儿程序员
android studio导入eclipse带第三方库项目可能

android studio导入eclipse带第三方库项目可能

作者: 八怪不姓丑 | 来源:发表于2017-03-16 17:43 被阅读361次
    错误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 studio导入eclipse带第三方库项目可能

        本文链接:https://www.haomeiwen.com/subject/bjfggttx.html