混淆(minifyEnabled true)在调试和发布中不起作用 [英] Obfuscation (minifyEnabled true) not working in Debug and Release

查看:31
本文介绍了混淆(minifyEnabled true)在调试和发布中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

1.Android-错误:任务':app:transformClassesWithDexForRelease'执行失败

2.字节码转dex时出错:原因:java.lang.RuntimeException:异常解析类 - Android studio 2.0 beta 6

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

 应用插件:'com.android.application'安卓 {compileSdkVersion 23构建工具版本23.0.3"默认配置{应用程序 ID 'XX.XX.XXX'minSdk 版本 21目标SDK版本23版本代码 9版本名称1.0"multiDexEnabled truevectorDrawables.useSupportLibrary = true}sourceSets.main {jni.srcDirs = []//禁用自动ndk-build调用jniLibs.srcDir 'src/main/libs'//从libs而不是jniLibs集成你的libs}dexOptions {javaMaxHeapSize "4g"//指定dex进程的堆大小}构建类型{发布 {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}调试{minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}产品风味{}lintOptions {checkReleaseBuilds 假}包装选项{排除META-INF/LGPL2.1"排除 'META-INF/NOTICE.txt'排除 'META-INF/LICENSE.txt'}}依赖{编译文件树(包括:['*.jar'],目录:'libs')testCompile 'junit:junit:4.12'//编译文件('libs/maflogonimo-1.210.3.jar')编译项目(':android-logging-log4j-1.0.3')编译项目(':log4j-1.2.17')编译文件('libs/gson-2.6.2.jar')//编译文件('libs/javarosa-libraries-2015-09-02.jar')编译'com.android.support:design:23.4.0'//编译'com.android.support:multidex:1.0.1'编译'com.android.support:multidex:1.0.1'编译'com.android.support:support-v4:23.4.0'编译'com.android.support:cardview-v7:23.4.0'编译'com.android.support:recyclerview-v7:23.4.0'编译'com.android.support:appcompat-v7:23.4.0'编译 'com.google.android.gms:play-services-maps:10.0.1'编译 'com.google.android.gms:play-services-location:10.0.1'编译 'com.google.android.gms:play-services-auth:10.0.1'//编译 'com.google.android.gms:play-services:10.0.1'//编译 'com.google.android.gms:play-services-fcm:9.6.1'编译 'com.google.firebase:firebase-messaging:10.0.1'//编译 'com.viewpagerindicator:library:2.4.1@aar'//编译文件('libs/hellocharts-library-1.5.8.jar')编译'com.esri.arcgis.android:arcgis-android:10.2.8-1'//地理信息系统编译(名称:'ClientHubSLL-3.16.1',ext:'aar')编译(名称:'ClientLog-3.16.1',分机:'aar')编译(名称:'Common-3.16.1',分机:'aar')编译(名称:'Connectivity-3.16.1',分机:'aar')编译(名称:'CoreServices-3.16.1',分机:'aar')编译(名称:'DataVaultLib-3.16.1',分机:'aar')编译(名称:'E2ETrace-3.16.1',分机:'aar')编译(名称:'HttpConvAuthFlows-3.16.1',分机:'aar')编译(名称:'HttpConversation-3.16.1',分机:'aar')编译(名称:'MAFLogger-3.16.1',分机:'aar')编译(名称:'MAFLogonCore-3.16.1',分机:'aar')编译(名称:'ODataAPI-3.16.1',分机:'aar')编译(名称:'ODataOnline-3.16.1',分机:'aar')编译(名称:'Request-3.16.1',分机:'aar')编译(名称:'SupportabilityFacade-3.16.1',分机:'aar')编译(名称:'MAFCalendar-3.16.1',分机:'aar')编译(名称:'MAFLocaleAwareControls-3.16.1',分机:'aar')编译(名称:'MAFLogViewer-3.16.1',分机:'aar')编译(名称:'MAFSettingScreen-3.16.1',分机:'aar')编译(名称:'MAFTreeView-3.16.1',分机:'aar')编译(名称:'MAFUIComponents-3.16.1',分机:'aar')编译(名称:'XscriptParser-3.16.1',分机:'aar')编译(名称:'MAFLogonUI-3.16.1',分机:'aar')编译(名称:'MobilePlace-3.16.1',分机:'aar')}应用插件:'com.google.gms.google-services'

下面是 proguard-rules.pro 文件

-renamesourcefileattribute SourceFile-keepattributes SourceFile, LineNumberTable-keepattributes 异常,签名-keepattributes 封闭方法-keepattributes 内部类-保持类org.javarosa.** { *;}-保持类com.sap.** { *;}-保持类 jcifs.** { *;}-不要警告 com.google.**-不要警告 org.apache.**-不要警告 com.sap.**-不要警告 au.com.bytecode.**-不要警告 org.joda.**-不要警告 android.content.**-不要警告 android.graphics.**-不要警告 android.util.**-不要警告 android.view.**-不要警告 javax.servlet.**-不要警告 jcifs.http.**-dontwarn org.codehaus.**

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

cause: java.lang.RuntimeException: 异常解析类意外的顶级例外:java.lang.RuntimeException:异常解析类在 com.android.dx.command.dexer.Main.processClass(Main.java:752)在 com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)在 com.android.dx.command.dexer.Main.access$1200(Main.java:85)在 com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)在 com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)在 com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)在 com.android.dx.command.dexer.Main.processOne(Main.java:672)在 com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)在 com.android.dx.command.dexer.Main.runMultiDex(Main.java:366)在 com.android.dx.command.dexer.Main.run(Main.java:275)在 com.android.dx.command.dexer.Main.main(Main.java:245)在 com.android.dx.command.Main.main(Main.java:106)引起:com.android.dx.cf.iface.ParseException:坏描述符:charOffset在 com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:156)在 com.android.dx.cf.direct.AttributeListParser.parseIfNecessary(AttributeListParser.java:115)在 com.android.dx.cf.direct.AttributeListParser.getEndOffset(AttributeListParser.java:96)在 com.android.dx.cf.direct.MemberListParser.parse(MemberListParser.java:213)在 com.android.dx.cf.direct.MemberListParser.parseIfNecessary(MemberListParser.java:108)在 com.android.dx.cf.direct.MethodListParser.getList(MethodListParser.java:54)在 com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:542)在 com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)在 com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)在 com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)在 com.android.dx.command.dexer.Main.parseClass(Main.java:764)在 com.android.dx.command.dexer.Main.access$1500(Main.java:85)在 com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)在 com.android.dx.command.dexer.Main.processClass(Main.java:749)……还有 12 个引起:java.lang.IllegalArgumentException:坏描述符:charOffset在 com.android.dx.rop.type.Type.intern(Type.java:330)在 com.android.dx.cf.direct.AnnotationParser.parseAnnotation(AnnotationParser.java:248)在 com.android.dx.cf.direct.AnnotationParser.parseAnnotations(AnnotationParser.java:223)在 com.android.dx.cf.direct.AnnotationParser.parseAnnotationsList(AnnotationParser.java:188)在 com.android.dx.cf.direct.AnnotationParser.parseParameterAttribute(AnnotationParser.java:127)在 com.android.dx.cf.direct.StdAttributeFactory.runtimeVisibleParameterAnnotations(StdAttributeFactory.java:666)在 com.android.dx.cf.direct.StdAttributeFactory.parse0(StdAttributeFactory.java:162)在 com.android.dx.cf.direct.AttributeFactory.parse(AttributeFactory.java:96)在 com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:141)……还有 25 个16:35:57.798 [错误] [org.gradle.api.Project] 1 个错误;中止16:35:57.800 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] 完成执行任务':app:transformClassesWithDexForRelease'16:35:57.801 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :app:transformClassesWithDexForRelease FAILED16:35:57.804 [INFO] [org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor] :app:transformClassesWithDexForRelease (Thread[Daemon worker,5,main]) 完成.耗时 1 分 1.425 秒.16:35:57.807 [DEBUG] [org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor] Task worker [Thread[Daemon worker,5,main]] 完成,忙碌:14 分 11.51 秒,空闲:0.078 秒16:35:57.870 [错误] [org.gradle.BuildExceptionReporter]16:35:57.871 [错误] [org.gradle.BuildExceptionReporter] 失败:构建失败,出现异常.16:35:57.872 [错误] [org.gradle.BuildExceptionReporter]16:35:57.872 [错误] [org.gradle.BuildExceptionReporter] * 出了什么问题:16:35:57.872 [ERROR] [org.gradle.BuildExceptionReporter] 任务:app:transformClassesWithDexForRelease"执行失败.16:35:57.873 [错误] [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 FilesJavajdk1.8.0_161injava.exe'' 以非零退出值 1 结束16:35:57.874 [错误] [org.gradle.BuildExceptionReporter]16:35:57.875 [错误] [org.gradle.BuildExceptionReporter] * 尝试:16:35:57.877 [ERROR] [org.gradle.BuildExceptionReporter] 使用 --stacktrace 选项运行以获取堆栈跟踪.16:35:57.878 [生命周期] [org.gradle.BuildResultLogger]16:35:57.878 [生命周期] [org.gradle.BuildResultLogger] 构建失败16:35:57.880 [生命周期] [org.gradle.BuildResultLogger]16:35:57.880 [生命周期] [org.gradle.BuildResultLogger] 总时间:14 分 46.244 秒16:35:57.930 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 fileHashes.bin (D:myJobCard_SourceCode.gradle2.10	askArtifactsfileHashes.bin)16:35:57.931 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 fileSnapshots.bin (D:myJobCard_SourceCode.gradle2.10	askArtifactsfileSnapshots.bin)16:35:57.932 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 taskArtifacts.bin (D:myJobCard_SourceCode.gradle2.10	askArtifacts	askArtifacts.bin)16:35:57.933 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 outputFileStates.bin (D:myJobCard_SourceCode.gradle2.10	askArtifactsoutputFileStates.bin)16:35:57.933 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对任务历史缓存 (D:myJobCard_SourceCode.gradle2.10	askArtifacts) 的锁定.16:35:57.935 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 jarSnapshots.bin (C:UsersMY HOME.gradlecaches2.10jarSnapshotsjarSnapshots.bin)16:35:57.935 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对 jar 快照缓存 (C:UsersMY HOME.gradlecaches2.10jarSnapshots) 的锁定.16:35:57.937 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 classAnalysis.bin (C:UsersMY HOME.gradlecaches2.10classAnalysisclassAnalysis.bin)16:35:57.937 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放类分析缓存(C:UsersMY HOME.gradlecaches2.10classAnalysis)的锁.16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 为设置文件D:myJobCard_SourceCodesettings.gradle"(C:UsersMY HOME.gradle)释放对 cp_settings 类缓存的锁定缓存2.10scriptssettings_erwoxweslgmu8miqym6kcb1dtcp_settings).16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对设置文件D:myJobCard_SourceCodesettings.gradle"(C:UsersMY HOME.gradle)的设置类缓存的锁定缓存2.10scriptssettings_erwoxweslgmu8miqym6kcb1dtsettings).16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对构建文件 'D:myJobCard_SourceCodeuild.gradle' (C:UsersMY HOME.gradle) cp_proj 类缓存的锁定缓存2.10scriptsuild_7pkieelf3zpr7uf7k01l63rmxcp_proj).16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对构建文件D:myJobCard_SourceCodeuild.gradle"(C:UsersMY HOME.gradle)的项目类缓存的锁定缓存2.10scriptsuild_7pkieelf3zpr7uf7k01l63rmxproj).16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 为构建文件D:myJobCard_SourceCodeandroid-logging-log4j-1.0.3uild.gradle"(C)释放对 cp_proj 类缓存的锁定:UsersMY HOME.gradlecaches2.10scriptsuild_7utva779gtlkclvebpnh750jkcp_proj).16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对构建文件D:myJobCard_SourceCodeandroid-logging-log4j-1.0.3uild.gradle"(C:UsersMY HOME.gradlecaches2.10scriptsuild_7utva779gtlkclvebpnh750jkproj).16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 为构建文件D:myJobCard_SourceCodeappuild.gradle"(C:UsersMY HOME.gradlecaches2.10scriptsuild_56xn5xy2yld7cwkurxonzuovlcp_proj).16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对构建文件D:myJobCard_SourceCodeappuild.gradle"(C:UsersMY HOME.gradlecaches2.10scriptsuild_56xn5xy2yld7cwkurxonzuovlproj).16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 为构建文件D:myJobCard_SourceCodelog4j-1.2.17uild.gradle"(C:Users我的家.gradlecaches2.10scriptsuild_8bsoptu904i00rpm86ii2r5ihcp_proj).16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对构建文件D:myJobCard_SourceCodelog4j-1.2.17uild.gradle"(C:Users我的家.gradlecaches2.10scriptsuild_8bsoptu904i00rpm86ii2r5ihproj).16:35:57.944 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] ​​解析结果缓存关闭.缓存读取:0,磁盘读取:0(平均:0.0 秒,总计:0.0 秒)16:35:57.945 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] ​​解析结果缓存关闭.缓存读取:0,磁盘读取:8(平均:0.006 秒,总计:0.049 秒)16:35:57.946 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.ResolutionResultsStoreFactory] ​​在 0.003 秒内删除了 2 个分辨率结果二进制文件16:35:57.946 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.memcache.InMemoryCachedRepositoryFactory] ​​内存依赖元数据缓存关闭.缓存的存储库:41,缓存实例:5,从缓存提供的模块:702,工件:4916:35:57.946 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存模块-artifacts.bin (C:UsersMY HOME.gradlecachesmodules-2metadata-2.16模块-artifacts.bin)16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存模块-metadata.bin (C:UsersMY HOME.gradlecachesmodules-2metadata-2.16模块元数据.bin)16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] 关闭缓存 artifact-at-repository.bin (C:UsersMY HOME.gradlecachesmodules-2metadata-2.16artifact-at-repository.bin)16:35:57.947 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] 释放对工件缓存 (C:UsersMY HOME.gradlecachesmodules-2) 的锁定.16:35:57.949 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] 缓存插件解析缓存 (C:UsersMY HOME.gradlecaches2.10plugin-resolution) 被关闭 0 次.16:35:57.950 [DEBUG] [org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonManager] 正在停止 0 个编译器守护进程.16:35:57.950 [INFO] [org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonManager] 停止了 0 个编译器守护进程.16:35:57.952 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] 守护进程已经完成构建.16:36:45.960 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientInputForwarder] 调度关闭输入消息:org.gradle.launcher.daemon.protocol.CloseInput@66269a816:36:45.966 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] 线程 17:调度类 org.gradle.launcher.daemon.protocol.CloseInput16:36:45.971 [INFO] [org.gradle.launcher.daemon.client.DaemonClient] 收到结果失败 [value=org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: 任务执行失败':app:transformClassesWithDexForRelease'.] 来自守护进程 DaemonInfo{pid=22532, address=[dcdd43f4-9cff-4985-9851-6f1b9dfca80e 端口:65391, 地址:[/127.0.0.1,/0:0:0:0:00:0:1]], idle=false, context=DefaultDaemonContext[uid=b61dca0a-e70c-4dec-98ed-b69fe929e57e,javaHome=C:Program FilesJavajdk1.8.0_161,daemonRegistryDir=C:Users我的家.gradledaemon,pid=22532,idleTimeout=120000,daemonOpts=-Xmx4096m,-Dfile.encoding=windows-1252,-Duser.country=US,-Duser.language=en,-Duser.variant]}(构建应该完成).16:36:45.977 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] 线程 1:调度类 org.gradle.launcher.daemon.protocol.Finished

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

解决方案

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

<小时>

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

应用插件:'com.android.application'安卓 {compileSdkVersion 26默认配置{applicationId "com.xxxxxxxxxxcccccccvvvvvv.apps.firebase"minSdk 版本 16目标SDK版本26版本代码 1版本名称1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}构建类型{发布 {minifyEnabled true使用Proguard trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'收缩资源真}}}依赖{实现文件树(目录:'libs',包括:['*.jar'])实现 'com.android.support:appcompat-v7:26.1.0'实现 'com.android.support:design:26.1.0'实现 'com.android.support.constraint:constraint-layout:1.1.2'实现 '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'}

<小时><块引用>

现在它的措辞是什么意思:它只会在您的项目发布时混淆您的代码;这意味着您必须构建您的发布 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.

此外,它有助于您的项目使其无构建错误,因为所有最新的依赖项都与补丁一起存在.

I cannot able to run apk using minifyEnabled true in Debug and Release mode.I have referred below links but none worked for me.

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

Below is application build.gradle file

    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'

Below is proguard-rules.pro file

-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.**

Below exception while running from command line

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 FilesJavajdk1.8.0_161injava.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.gradle2.10	askArtifactsfileHashes.bin)
16:35:57.931 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache fileSnapshots.bin (D:myJobCard_SourceCode.gradle2.10	askArtifactsfileSnapshots.bin)
16:35:57.932 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache taskArtifacts.bin (D:myJobCard_SourceCode.gradle2.10	askArtifacts	askArtifacts.bin)
16:35:57.933 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache outputFileStates.bin (D:myJobCard_SourceCode.gradle2.10	askArtifactsoutputFileStates.bin)
16:35:57.933 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on task history cache (D:myJobCard_SourceCode.gradle2.10	askArtifacts).
16:35:57.935 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache jarSnapshots.bin (C:UsersMY HOME.gradlecaches2.10jarSnapshotsjarSnapshots.bin)
16:35:57.935 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on jar snapshots cache (C:UsersMY HOME.gradlecaches2.10jarSnapshots).
16:35:57.937 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache classAnalysis.bin (C:UsersMY HOME.gradlecaches2.10classAnalysisclassAnalysis.bin)
16:35:57.937 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on class analysis cache (C:UsersMY HOME.gradlecaches2.10classAnalysis).
16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_settings class cache for settings file 'D:myJobCard_SourceCodesettings.gradle' (C:UsersMY HOME.gradlecaches2.10scriptssettings_erwoxweslgmu8miqym6kcb1dtcp_settings).
16:35:57.939 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on settings class cache for settings file 'D:myJobCard_SourceCodesettings.gradle' (C:UsersMY HOME.gradlecaches2.10scriptssettings_erwoxweslgmu8miqym6kcb1dtsettings).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:myJobCard_SourceCodeuild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_7pkieelf3zpr7uf7k01l63rmxcp_proj).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:myJobCard_SourceCodeuild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_7pkieelf3zpr7uf7k01l63rmxproj).
16:35:57.940 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:myJobCard_SourceCodeandroid-logging-log4j-1.0.3uild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_7utva779gtlkclvebpnh750jkcp_proj).
16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:myJobCard_SourceCodeandroid-logging-log4j-1.0.3uild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_7utva779gtlkclvebpnh750jkproj).
16:35:57.941 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:myJobCard_SourceCodeappuild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_56xn5xy2yld7cwkurxonzuovlcp_proj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:myJobCard_SourceCodeappuild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_56xn5xy2yld7cwkurxonzuovlproj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cp_proj class cache for build file 'D:myJobCard_SourceCodelog4j-1.2.17uild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_8bsoptu904i00rpm86ii2r5ihcp_proj).
16:35:57.942 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on proj class cache for build file 'D:myJobCard_SourceCodelog4j-1.2.17uild.gradle' (C:UsersMY HOME.gradlecaches2.10scriptsuild_8bsoptu904i00rpm86ii2r5ihproj).
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:UsersMY HOME.gradlecachesmodules-2metadata-2.16module-artifacts.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache module-metadata.bin (C:UsersMY HOME.gradlecachesmodules-2metadata-2.16module-metadata.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Closing cache artifact-at-repository.bin (C:UsersMY HOME.gradlecachesmodules-2metadata-2.16artifact-at-repository.bin)
16:35:57.947 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on artifact cache (C:UsersMY HOME.gradlecachesmodules-2).
16:35:57.949 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Cache Plugin Resolution Cache (C:UsersMY HOME.gradlecaches2.10plugin-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 FilesJavajdk1.8.0_161,daemonRegistryDir=C:UsersMY HOME.gradledaemon,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

I am using Android Studio 1.5.1.Is this Android studio version matters for obfuscation (minifyEnabled true) ? Are there any online or offline tools for encrypting the APK ? Please suggest me. I have wasted a lot of time on this. Please help me with this.Thanks in Advance.

解决方案

Well... As you haven't mentioned yet, to the ant, to pro-guard your app, That's why it is not able to obfuscate it. Use explicitly useProguard true


Need a simple example of app gradle build file...? Find it below as it is of my project :

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'
}


Now what it means in wording : It will only obfuscate your code in release of your project; which means you have to build your release apk.

How to test...? obfuscation happened or not?

Here we go...

  1. Unzip apk file from linux or mac os terminal as: unzip apk_name
  2. You will get your project files extracted... find dex file
  3. Use dex2jar to convert it into jar
  4. Read that jar file with JD-UI app
  5. You will see all your java classes and core code files
  6. Yes.... look neat.... Its a code.... But with obfuscation

Hmmmm... Hope it helps

Edit : 2

In the pro-guard rules files... Do not try to program it like code, just keep some classes which are not so important as : -keep public class OpenSource

Thats it.

Edit : 3

Most importantly you should and must as a beginner use default pro-guard file set by android studio or whichever your IDE; while creating the project. like :

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

Edit : 4

It is a good habit to create a new sample project, learn how to implement any concept, once we are hands on it and cleared the concept..., Open the main project and implement it within..., As ... As of now , we are mastered the concept.

Edit : 5

It is always recommended to use Android Studio than any other IDE as it is officially by google as android is.. And it must be latest and updated IDE with minimum api 26 enabled. as google made compulsory last week that to upload apps on google play apps must target api level 26.

Also it helps to your project to get it build error free as all the latest dependencies are there along with patches.

这篇关于混淆(minifyEnabled true)在调试和发布中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆