【问题标题】:Obfuscation (minifyEnabled true) not working in Debug and Release混淆(minifyEnabled true)在调试和发布中不起作用
【发布时间】:2019-01-14 03:28:20
【问题描述】:

我无法在调试和发布模式下使用 minifyEnabled true 运行 apk。我参考了以下链接,但没有一个对我有用。

1.Android- Error:Execution failed for task ':app:transformClassesWithDexForRelease'

2.Error converting bytecode to dex: Cause: java.lang.RuntimeException: Exception parsing classes - Android studio 2.0 beta 6

下面是应用程序 build.gradle 文件

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId 'XX.XX.XXX'
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 9
        versionName "1.0"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true



    }



    sourceSets.main {
        jni.srcDirs = [] //disable automatic ndk-build call
        jniLibs.srcDir 'src/main/libs' //integrate your libs from libs instead of jniLibs
    }
    dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }


    }
    productFlavors {
    }
    lintOptions {
        checkReleaseBuilds false
    }
    packagingOptions {
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'

    }
}



dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    //    compile files('libs/maflogonimo-1.210.3.jar')
    compile project(':android-logging-log4j-1.0.3')
    compile project(':log4j-1.2.17')
    compile files('libs/gson-2.6.2.jar')
    //compile files('libs/javarosa-libraries-2015-09-02.jar')
    compile 'com.android.support:design:23.4.0'
    //compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.android.support:cardview-v7:23.4.0'
    compile 'com.android.support:recyclerview-v7:23.4.0'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.google.android.gms:play-services-maps:10.0.1'
    compile 'com.google.android.gms:play-services-location:10.0.1'
    compile 'com.google.android.gms:play-services-auth:10.0.1'
    //    compile 'com.google.android.gms:play-services:10.0.1'

    //    compile 'com.google.android.gms:play-services-fcm:9.6.1'
    compile 'com.google.firebase:firebase-messaging:10.0.1'
    //    compile 'com.viewpagerindicator:library:2.4.1@aar'
    //compile files('libs/hellocharts-library-1.5.8.jar')
    compile 'com.esri.arcgis.android:arcgis-android:10.2.8-1'
    //GIS

    compile(name:'ClientHubSLL-3.16.1', ext:'aar')
    compile(name:'ClientLog-3.16.1', ext:'aar')
    compile(name:'Common-3.16.1', ext:'aar')
    compile(name:'Connectivity-3.16.1', ext:'aar')
    compile(name:'CoreServices-3.16.1', ext:'aar')
    compile(name:'DataVaultLib-3.16.1', ext:'aar')
    compile(name:'E2ETrace-3.16.1', ext:'aar')
    compile(name:'HttpConvAuthFlows-3.16.1', ext:'aar')
    compile(name:'HttpConversation-3.16.1', ext:'aar')
    compile(name:'MAFLogger-3.16.1', ext:'aar')
    compile(name:'MAFLogonCore-3.16.1', ext:'aar')
    compile(name:'ODataAPI-3.16.1', ext:'aar')
    compile(name:'ODataOnline-3.16.1', ext:'aar')
    compile(name:'Request-3.16.1', ext:'aar')
    compile(name:'SupportabilityFacade-3.16.1', ext:'aar')

    compile(name:'MAFCalendar-3.16.1', ext:'aar')
    compile(name:'MAFLocaleAwareControls-3.16.1', ext:'aar')
    compile(name:'MAFLogViewer-3.16.1', ext:'aar')
    compile(name:'MAFSettingScreen-3.16.1', ext:'aar')
    compile(name:'MAFTreeView-3.16.1', ext:'aar')
    compile(name:'MAFUIComponents-3.16.1', ext:'aar')
    compile(name:'XscriptParser-3.16.1', ext:'aar')
    compile(name:'MAFLogonUI-3.16.1', ext:'aar')
    compile(name:'MobilePlace-3.16.1', ext:'aar')

}

apply plugin: 'com.google.gms.google-services'

下面是proguard-rules.pro文件

-renamesourcefileattribute SourceFile
-keepattributes SourceFile, LineNumberTable
-keepattributes Exceptions, Signature

-keepattributes EnclosingMethod
-keepattributes InnerClasses

-keep class org.javarosa.** { *; }
-keep class com.sap.** { *; }

-keep class jcifs.** { *; }


-dontwarn com.google.**
-dontwarn org.apache.**
-dontwarn com.sap.**
-dontwarn au.com.bytecode.**
-dontwarn org.joda.**
-dontwarn android.content.**
-dontwarn android.graphics.**
-dontwarn android.util.**
-dontwarn android.view.**

-dontwarn javax.servlet.**
-dontwarn jcifs.http.**
-dontwarn org.codehaus.**

从命令行运行时出现以下异常

cause: java.lang.RuntimeException: Exception parsing classes
    UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes
        at com.android.dx.command.dexer.Main.processClass(Main.java:752)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
        at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
        at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:672)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)
        at com.android.dx.command.dexer.Main.runMultiDex(Main.java:366)
        at com.android.dx.command.dexer.Main.run(Main.java:275)
        at com.android.dx.command.dexer.Main.main(Main.java:245)
        at com.android.dx.command.Main.main(Main.java:106)
Caused by: com.android.dx.cf.iface.ParseException: bad descriptor: charOffset
        at com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:156)
        at com.android.dx.cf.direct.AttributeListParser.parseIfNecessary(AttributeListParser.java:115)
        at com.android.dx.cf.direct.AttributeListParser.getEndOffset(AttributeListParser.java:96)
        at com.android.dx.cf.direct.MemberListParser.parse(MemberListParser.java:213)
        at com.android.dx.cf.direct.MemberListParser.parseIfNecessary(MemberListParser.java:108)
        at com.android.dx.cf.direct.MethodListParser.getList(MethodListParser.java:54)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:542)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
        at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
        at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
        at com.android.dx.command.dexer.Main.processClass(Main.java:749)
        ... 12 more
Caused by: java.lang.IllegalArgumentException: bad descriptor: charOffset
        at com.android.dx.rop.type.Type.intern(Type.java:330)
        at com.android.dx.cf.direct.AnnotationParser.parseAnnotation(AnnotationParser.java:248)
        at com.android.dx.cf.direct.AnnotationParser.parseAnnotations(AnnotationParser.java:223)
        at com.android.dx.cf.direct.AnnotationParser.parseAnnotationsList(AnnotationParser.java:188)
        at com.android.dx.cf.direct.AnnotationParser.parseParameterAttribute(AnnotationParser.java:127)
        at com.android.dx.cf.direct.StdAttributeFactory.runtimeVisibleParameterAnnotations(StdAttributeFactory.java:666)
        at com.android.dx.cf.direct.StdAttributeFactory.parse0(StdAttributeFactory.java:162)
        at com.android.dx.cf.direct.AttributeFactory.parse(AttributeFactory.java:96)
        at com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:141)
        ... 25 more

16:35:57.798 [ERROR] [org.gradle.api.Project] 1 error; aborting
16:35:57.800 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':app:transformClassesWithDexForRelease'
16:35:57.801 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :app:transformClassesWithDexForRelease FAILED
16:35:57.804 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :app:transformClassesWithDexForRelease (Thread[Daemon worker,5,main]) completed. Took 1 mins 1.425 secs.
16:35:57.807 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[Daemon worker,5,main]] finished, busy: 14 mins 11.51 secs, idle: 0.078 secs
16:35:57.870 [ERROR] [org.gradle.BuildExceptionReporter]
16:35:57.871 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
16:35:57.872 [ERROR] [org.gradle.BuildExceptionReporter]
16:35:57.872 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
16:35:57.872 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':app:transformClassesWithDexForRelease'.
16:35:57.873 [ERROR] [org.gradle.BuildExceptionReporter] > 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 'C:\Program Files\Java\jdk1.8.0_161\bin\java.exe'' finished with non-zero exit value 1
16:35:57.874 [ERROR] [org.gradle.BuildExceptionReporter]
16:35:57.875 [ERROR] [org.gradle.BuildExceptionReporter] * Try:
16:35:57.877 [ERROR] [org.gradle.BuildExceptionReporter] Run with --stacktrace option to get the stack trace.
16:35:57.878 [LIFECYCLE] [org.gradle.BuildResultLogger]
16:35:57.878 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
16:35:57.880 [LIFECYCLE] [org.gradle.BuildResultLogger]
16:35:57.880 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 14 mins 46.244 secs
16:35:57.930 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache fileHashes.bin (D:\myJobCard_SourceCode\.gradle\2.10\taskArtifacts\fileHashes.bin)
16:35:57.931 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache fileSnapshots.bin (D:\myJobCard_SourceCode\.gradle\2.10\taskArtifacts\fileSnapshots.bin)
16:35:57.932 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache taskArtifacts.bin (D:\myJobCard_SourceCode\.gradle\2.10\taskArtifacts\taskArtifacts.bin)
16:35:57.933 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache outputFileStates.bin (D:\myJobCard_SourceCode\.gradle\2.10\taskArtifacts\outputFileStates.bin)
16:35:57.933 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on task history cache (D:\myJobCard_SourceCode\.gradle\2.10\taskArtifacts).
16:35:57.935 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache jarSnapshots.bin (C:\Users\MY HOME\.gradle\caches\2.10\jarSnapshots\jarSnapshots.bin)
16:35:57.935 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on jar snapshots cache (C:\Users\MY HOME\.gradle\caches\2.10\jarSnapshots).
16:35:57.937 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache classAnalysis.bin (C:\Users\MY HOME\.gradle\caches\2.10\classAnalysis\classAnalysis.bin)
16:35:57.937 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on class analysis cache (C:\Users\MY HOME\.gradle\caches\2.10\classAnalysis).
16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_settings class cache for settings file 'D:\myJobCard_SourceCode\settings.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\settings_erwoxweslgmu8miqym6kcb1dt\cp_settings).
16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on settings class cache for settings file 'D:\myJobCard_SourceCode\settings.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\settings_erwoxweslgmu8miqym6kcb1dt\settings).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:\myJobCard_SourceCode\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_7pkieelf3zpr7uf7k01l63rmx\cp_proj).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:\myJobCard_SourceCode\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_7pkieelf3zpr7uf7k01l63rmx\proj).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:\myJobCard_SourceCode\android-logging-log4j-1.0.3\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_7utva779gtlkclvebpnh750jk\cp_proj).
16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:\myJobCard_SourceCode\android-logging-log4j-1.0.3\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_7utva779gtlkclvebpnh750jk\proj).
16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:\myJobCard_SourceCode\app\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_56xn5xy2yld7cwkurxonzuovl\cp_proj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:\myJobCard_SourceCode\app\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_56xn5xy2yld7cwkurxonzuovl\proj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:\myJobCard_SourceCode\log4j-1.2.17\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_8bsoptu904i00rpm86ii2r5ih\cp_proj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:\myJobCard_SourceCode\log4j-1.2.17\build.gradle' (C:\Users\MY HOME\.gradle\caches\2.10\scripts\build_8bsoptu904i00rpm86ii2r5ih\proj).
16:35:57.944 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] Resolution result cache closed. Cache reads: 0, disk reads: 0 (avg: 0.0 secs, total: 0.0 secs)
16:35:57.945 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] Resolution result cache closed. Cache reads: 0, disk reads: 8 (avg: 0.006 secs, total: 0.049 secs)
16:35:57.946 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.ResolutionResultsStoreFactory] Deleted 2 resolution results binary files in 0.003 secs
16:35:57.946 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.memcache.InMemoryCachedRepositoryFactory]                                                                                                                        In-memory dependency metadata cache closed. Repos cached: 41, cache instances: 5, modules served from cache: 702, artifacts: 49
16:35:57.946 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache module-artifacts.bin (C:\Users\MY HOME\.gradle\caches\modules-2\metadata-2.16\module-artifacts.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache module-metadata.bin (C:\Users\MY HOME\.gradle\caches\modules-2\metadata-2.16\module-metadata.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache artifact-at-repository.bin (C:\Users\MY HOME\.gradle\caches\modules-2\metadata-2.16\artifact-at-repository.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on artifact cache (C:\Users\MY HOME\.gradle\caches\modules-2).
16:35:57.949 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Cache Plugin Resolution Cache (C:\Users\MY HOME\.gradle\caches\2.10\plugin-resolution) was closed 0 times.
16:35:57.950 [DEBUG] [org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonManager] Stopping 0 compiler daemon(s).
16:35:57.950 [INFO] [org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonManager] Stopped 0 compiler daemon(s).
16:35:57.952 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has finished executing the build.
16:36:45.960 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientInputForwarder] Dispatching close input message: org.gradle.launcher.daemon.protocol.CloseInput@66269a8
16:36:45.966 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 17: dispatching class org.gradle.launcher.daemon.protocol.CloseInput
16:36:45.971 [INFO] [org.gradle.launcher.daemon.client.DaemonClient] Received result Failure[value=org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':app:transformClassesWithDexForRelease'.] from daemon DaemonInfo{pid=22532, address=[dcdd43f4-9cff-4985-9851-6f1b9dfca80e port:65391, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], idle=false, context=DefaultDaemonContext[uid=b61dca0a-e70c-4dec-98ed-b69fe929e57e,javaHome=C:\Program Files\Java\jdk1.8.0_161,daemonRegistryDir=C:\Users\MY HOME\.gradle\daemon,pid=22532,idleTimeout=120000,daemonOpts=-Xmx4096m,-Dfile.encoding=windows-1252,-Duser.country=US,-Duser.language=en,-Duser.variant]} (build should be done).
16:36:45.977 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: dispatching class org.gradle.launcher.daemon.protocol.Finished

我使用的是 Android Studio 1.5.1。这个 Android Studio 版本对混淆是否重要(minifyEnabled true)? 是否有任何用于加密 APK 的在线或离线工具? 请给我建议。 我在这件事上浪费了很多时间。 请帮我解决这个问题。在此先感谢。

【问题讨论】:

  • 你试过-keep class java.com.formsEngine.tasks.FormLoaderTask吗?
  • 嗨,氪,谢谢你的回复。我现在试试……
  • 它没有用氪...
  • @RonTLV,我已经检查过了。我正在尝试相同的方法,但它不起作用......

标签: android encryption obfuscation


【解决方案1】:

是否考虑过从 Android Studio 1.5.1 升级到 3.1.3 ??

我再次确认,这不是几年前的问题。

它读取bad descriptor: charOffset,提示build.gradle 中的错误...很可能,文件系统中甚至不存在引用的proguard-android-optimize.txt

您必须同样参考 ProGuard 配置规则:

proguardFile "${project.rootDir}/proguard-rules.pro"
// proguardFile "${project.rootDir}/some-more-rules.pro"
shrinkResources true
minifyEnabled true

【讨论】:

  • 嗨马丁,谢谢您的回复。我必须将 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 更改为 proguardFile "${project.rootDir }/proguard-rules.pro" 在应用级 build.gradle 文件中?
  • @Naveen 是的,通常这将适用于release 构建配置(只需确保文件存在,它被引用的位置)。并且下载更新版本的 IDE 是有意义的,因为从那时起发生了很大变化。
  • 我已经使用您提到的上述代码在调试模式下进行了检查,给出了异常错误:任务':app:transformClassesAndResourcesWithProguardForDebug'的执行失败。 > java.io.FileNotFoundException: D:\myJobCard_SourceCode\proguard-rules.pro(系统找不到指定的文件)
  • @Naveen 你必须把那个文件放在那里,或者调整路径,这样才能找到它。这里我有几个.pro 文件,例如${project.rootDir}/proguard/google.pro,所以我可以将它们组织为规则集,以便知道在哪里寻找。
  • 我有一个名为“proguard-rules.pro”的 pro 文件,位于 app 中。希望您能帮我解决这个 Martin。
【解决方案2】:
  1. 尝试删除项目根目录下的.idea.gradle 目录,然后重新启动Android Studio 并重新同步您的项目。并更改您的build.gradle 设置如下:

    android {
        ...
        compileSdkVersion 24
        buildToolsVersion "24.0.0"
    
        defaultConfig {
            ...
            targetSdkVersion 24 
            ...
        }
        ...
    }
    
  2. 仔细检查libs 中的所有库,看看您是否有任何与compile xxx 重复的库,因为您有以下库依赖项声明。

    compile fileTree(include: ['*.jar'], dir: 'libs')
    

    这可能会导致库的重复包含,例如compile files('libs/gson-2.6.2.jar')。尝试删除所有重复的库。

【讨论】:

  • 嘿,我试过但没有运气,给出以下异常错误:解析错误:错误:错误描述符:charOffset 错误:...解析属性时[2]错误:...解析方法时[ 1] 错误:...解析 org/b/a/g.class 时错误:1 错误;任务 ':app:transformClassesWithDexForDebug' 的中止执行失败。 > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: org.gradle.process.internal.ExecException: Process 'command'C:\ Prgm Files\Java\jdk1.8.0_161\bin\java.exe'' 以非零退出值 1 结束
  • 这与您的原始帖子的错误不同,这意味着另一个问题
  • com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: org.gradle.process.internal.ExecException: Process 'command 'C:\Prgm Files\Java\jdk1.8.0_161\bin\java.exe'' 以非零退出值 1 结束 - 这两种情况的异常都相同
  • 168个重复类定义的错误消失了?
  • 使用gradlew assembleRelease --info --debug 获取有关错误的更多调试信息。
【解决方案3】:

嗯...正如你还没有提到的,对蚂蚁来说,为了保护你的应用程序,这就是它无法混淆它的原因。明确使用useProguard true


需要一个简单的 app gradle 构建文件示例...?在下面找到它,因为它是我的项目:

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
    applicationId "com.xxxxxxxxxxcccccccvvvvvv.apps.firebase"
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        shrinkResources true
    }
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.firebase:firebase-jobdispatcher:0.8.5'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

现在它的措辞是什么意思: 它只会obfuscate你的代码发布你的项目;这意味着您必须构建您的发布 apk。

如何测试...?是否发生了混淆?

我们开始...

  1. 从linux或mac os终端解压apk文件为:unzip apk_name
  2. 您将提取项目文件...查找 dex 文件
  3. 使用dex2jar转成jar
  4. 使用 JD-UI 应用程序读取该 jar 文件
  5. 您将看到所有的 java 类和核心代码文件
  6. 是的......看起来很整洁......它是一个代码......但带有混淆

嗯……希望对你有帮助

编辑:2

在 pro-guard 规则文件中...不要尝试像代码一样对其进行编程,只保留一些不那么重要的类: -保持公共类开源

就是这样。

编辑:3

最重要的是,作为初学者,您应该并且必须使用由 android studio 或任何您的 IDE 设置的默认 pro-guard 文件;在创建项目时。喜欢:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

编辑:4

创建一个新的示例项目,学习如何实现任何概念是一个好习惯,一旦我们动手并清除了概念......,打开主项目并在......内实现它,作为。 .. 到目前为止,我们已经掌握了这个概念。

编辑:5

始终建议使用 Android Studio,而不是任何其他 IDE,因为它是 google 官方发布的,就像 android 一样。它必须是最新的和更新的 IDE,并启用了最低 api 26。正如谷歌上周强制要求在谷歌播放应用程序上上传应用程序必须针对 api 级别 26。

此外,它还有助于您的项目使其构建无错误,因为所有最新的依赖项以及补丁都在那里。

【讨论】:

  • 您好 Sandhya,感谢您的回复。我一定会尝试这个并让你知道......如果我添加“minifyEnabled false”它不会混淆,如果我添加“minifyEnabled true”它会给出上述异常。
  • 多少 minifyEnabled 可以缩小您的代码...?它不像亲保护你的代码那么重要。混淆和缩小两者是不同的。但是正如你提到的,你的代码没有被混淆,我给出了很深入的答案。
  • 我已经编辑了我的问题。请检查应用程序 build.gradle 文件。
  • 不要使用 pro-guard 或 minify 进行调试,因为它是用于测试目的。仅在发布时使用;带有标准的 proguard 文件。外观编辑 3
  • 当然,即使我在发布模式下添加“minifyEnabled true,useProguard true,shrinkResources true”,它也会给出我提到的相同异常。
猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 2019-01-07
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多