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

Posted

技术标签:

【中文标题】Dexguard vs Android 插件 - 中断构建过程【英文标题】:Dexguard vs Android plugin - breaks build process 【发布时间】:2014-11-26 18:45:16 【问题描述】:

当我尝试使用dexguard 插件代替android 插件(dexguard 插件扩展android)时,我的gradle build process 失败并出现此错误:

$ ./gradlew assembleDebug

FAILURE: Build failed with an exception.

* Where:
Build file '/projectRoot/app/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':projectRoot:app'.
 Could not create plugin of type 'g'.

我的应用模块的第一行 build.gradle 是

apply plugin: 'dexguard'

我整个项目的 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript 
    repositories 
        flatDir  dirs 'path-to-dexguard/lib' 
        mavenCentral()
    
    dependencies 
        classpath ':dexguard:'
        classpath 'com.android.tools.build:gradle:0.12.+'
    

我在启用debug 选项的情况下运行gradlew

$ ./gradlew --debug assembleDebug
[ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.lang.NoClassDefFoundError: com/android/builder/DefaultBuildType
[ERROR] [org.gradle.BuildExceptionReporter]     at com.saikoa.dexguard.g.$getStaticMetaClass(DexGuard)
[ERROR] [org.gradle.BuildExceptionReporter]     at com.android.build.gradle.BasePlugin.<init>(BasePlugin.groovy:2173)
[ERROR] [org.gradle.BuildExceptionReporter]     at com.android.build.gradle.AppPlugin.<init>(AppPlugin.groovy:37)
[ERROR] [org.gradle.BuildExceptionReporter]     at com.saikoa.dexguard.g.<init>(DexGuard:90)
[ERROR] [org.gradle.BuildExceptionReporter]     at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:62)
[ERROR] [org.gradle.BuildExceptionReporter]     at org.gradle.api.internal.plugins.DefaultPluginRegistry.loadPlugin(DefaultPluginRegistry.java:65)
[ERROR] [org.gradle.BuildExceptionReporter]     ... 46 more
[ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.lang.ClassNotFoundException: com.android.builder.DefaultBuildType
[ERROR] [org.gradle.BuildExceptionReporter]     ... 52 more

我的gradle 版本是2.1

$ gradle -v
------------------------------------------------------------
Gradle 2.1
------------------------------------------------------------
Build time:   2014-09-08 10:40:39 UTC
Build number: none
Revision:     e6cf70745ac11fa943e19294d19a2c527a669a53
Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_07 (Oracle Corporation 23.3-b01)
OS:           Mac OS X 10.9.5 x86_64

如果我使用 android 而不是 dexguard,那么我没有问题。

非常感谢任何帮助或指示。提前致谢。

PS:我独立运行 ANT 没有问题 - fwiw。

【问题讨论】:

【参考方案1】:

该错误表明您正在使用带有不兼容版本的 Android 插件的 DexGuard 插件。对于每个版本的 DexGuard,您可以在 DexGuard 手册 > Gradle 构建中找到记录的兼容版本。作为参考,您还可以在目录samples 中找到工作示例。

【讨论】:

谢谢。我现在可以构建它 Eric。但是我现在得到的 apk 文件拒绝安装并出现错误:INSTALL_FAILED_UID_CHANGED。结果 apk 拒绝安装的 Dexguard 插件与 Android 有何不同?任何想法?谢谢。 嘿,我在 android studio 上使用 dexguard 时遇到同样的错误:失败 [INSTALL_FAILED_UID_CHANGED] 有什么想法吗?

以上是关于Dexguard vs Android 插件 - 中断构建过程的主要内容,如果未能解决你的问题,请参考以下文章

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

Android/Java 混淆:R8 与(ProGuard 或 DexGuard)?

原因:org.gradle.api.internal.plugins.PluginApplicationException:无法应用插件 [id 'dexguard']

如何防止 Dexguard 混淆 android studio 中的资源文件夹?

将 ProGuard / Dexguard 与多个 Android Studio 模块一起使用

DexGuard 如何加密类?