Gradle 同步因 Dexguard 插件而失败(Android Studio)

Posted

技术标签:

【中文标题】Gradle 同步因 Dexguard 插件而失败(Android Studio)【英文标题】:Gradle sync fails with Dexguard plugin (Android Studio) 【发布时间】:2016-01-06 04:45:09 【问题描述】:

我在尝试将 dexguard 集成到我的 android/gradle 项目时遇到了一些麻烦。

Dexguard:5.5.32 gradle:2.2.1 gradle 插件:1.3.0 buildToolsVersion:23.0.1

apply plugin: 'dexguard' 时出现以下错误:

Error:Unable to load class 'com.android.builder.SdkParser'

编辑:

这是我应用的 gradle 文件:

buildscript 
    repositories 
        flatDir  dirs '/usr/local/DexGuard5.5.32/lib' 
        jcenter()
    
    dependencies 
        classpath ':dexguard:'
        classpath 'com.android.tools.build:gradle:1.3.0'
    


apply plugin: 'com.android.application'
apply plugin: 'dexguard' //This, when uncommented produces the error

dependencies 
    compile fileTree(dir: 'libs', include: '*.jar')
    compile files('libs/commons-collections4-4.0.jar')
    compile files('libs/commons-codec-1.10.jar')
    compile files('libs/gson-2.3.1.jar')
    compile files('libs/jaxb2-maven-plugin:2.1.jar')
    compile project(':sdk')
    compile project(':zxing-lib')


android 
    signingConfigs 
        release 
            //my signing config
        
    
    compileSdkVersion 22
    buildToolsVersion '23.0.1'
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    
    sourceSets 
        main 
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src/main/java', 'src/main/native', 'src/test/java']
            resources.srcDirs = ['src/main/java', 'src/main/native', 'src/test/java']
            aidl.srcDirs = ['src/main/java', 'src/main/native', 'src/test/java']
            renderscript.srcDirs = ['src/main/java', 'src/main/native', 'src/test/java']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')
    
    packagingOptions 
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    
    buildTypes 
//The following should be uncommented when dexuard works!!!
//        debug 
//            proguardFile plugin.getDefaultDexGuardFile('dexguard-debug.pro')
//            proguardFile 'dexguard-project.txt'
//            proguardFile 'dexguard-project-debug.txt'
//            proguardFile 'proguard-project.txt'
//        
//        release 
//            proguardFile plugin.getDefaultDexGuardFile('dexguard-release.pro')
//            proguardFile 'dexguard-project.txt'
//            proguardFile 'dexguard-project-release.txt'
//            proguardFile 'proguard-project.txt'
//        
    
    allprojects 
        gradle.projectsEvaluated 
            tasks.withType(JavaCompile) 
                options.compilerArgs << "-Xlint:deprecation"
            
        
    
    defaultConfig 
        targetSdkVersion 22
        signingConfig signingConfigs.release
    
    productFlavors 

        app2 
            applicationId "some.app.id"
        
        app 
            applicationId "some.app.id2"
        
    

你有什么想法??

【问题讨论】:

发布您的 gradle 文件也可能会有所帮助。 请,请。从更新所有内容开始。 1) Gradle 2.7 已经发布。 2) Gradle-plugin 1.3.1 已经发布。 3) 将所有依赖项转换为 Gradle,而不是 jar 4) 将 eclipse 源集转换为普通 gradle。 @JaredBurrows 虽然我同意你关于 1/、2/ 和 3/ 的看法,但我不确定 3/ 如何解决这个问题。 4/ 是什么意思? 您根本不必指定源集。 刚刚挖出了一个旧版本的 DexGuard 5.5,docs/gradlebuild.html 声明 DexGuard supports gradle-plugin 0.12.1, for Gradle version 1.12). 正如@dextor 所说,您可能需要更新 DexGuard 才能使用最新的 SDK 和 gradle 插件。跨度> 【参考方案1】:

您的 DexGuard 插件看起来非常过时。根据 GuardSquare 网站,最新版本是 7.0.22

升级是强制性的,因为 7.x 版带来了与 gradle-plugin 1.3.x 和 build-tools 23.x 的兼容性。

【讨论】:

是的,我知道。我正在调查,但找不到有关如何升级它的任何信息。我需要购买新版本还是什么? 这取决于您拥有/拥有的许可证。就我而言,许​​可证每年更新一次,所以如果你的许可证过期,你需要更新它。通过这样做,您将可以访问最新版本的 DexGuard,它提供与最新工具/构建工具的兼容性。 好的,我会调查一下(在 GuardSquare 网站上找不到任何关于许可证的信息)。会问负责那件事的人。【参考方案2】:

你的 Logcat 抛出了什么

Error:Unable to load class 'com.android.builder.SdkParser'

原因

这个问题是由于android gradle plugin不匹配导致的 gradle 版本。

Courtesy

其实你使用的是旧版本 DexGuard5.5.32 。这就是为什么有问题。使用最新版本的Dexguard 和最新的 SDK 和 gradle 插件

DexGuard 6.0 released

本部分将引导您完成强化应用程序的步骤 使用 DexGuard,从确保通信安全、所有 加密字符串和类的方法。

并升级您的tools.build:gradle 版本以获得更好的方法。

dependencies 
    classpath ':dexguard:'
    classpath 'com.android.tools.build:gradle:1.4.0-beta2'

Regards

您可以设置compileSdkVersion 23 而不是22

试试这个方法。希望对你有帮助。

【讨论】:

以上是关于Gradle 同步因 Dexguard 插件而失败(Android Studio)的主要内容,如果未能解决你的问题,请参考以下文章

Dexguard 7.3.01 与 gradle 2.3.0 不兼容

Gradle 同步失败:'com.android.build.gradle.BasePlugin' 没有实现插件接口

Dexguard vs Android 插件 - 中断构建过程

Gradle 因“方法 java.io.File#<init> 的模糊方法重载”而失败

Gradle 同步失败:评估设置时出现问题

android studio 3.1.3中的Gradle项目同步失败