混淆(minifyEnabled为true)在Debug and Release中不起作用

时间:2018-08-07 06:17:59

标签: android encryption obfuscation

我无法在调试和发布模式下使用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文件

class Video(models.Model):
    name = model.CharField(max_length=100, default='')
    upload_time = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        return self.name

下面是proguard-rules.pro文件

    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'

从命令行运行时出现异常

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

我正在使用Android Studio 1.5.1,这个Android Studio版本是否对混淆很重要(minifyEnabled为true)? 是否有用于加密APK的在线或离线工具? 请给我建议。 我在此上浪费了很多时间。 请帮助我。谢谢。

3 个答案:

答案 0 :(得分:1)

  

好吧...正如您尚未提到的那样,对蚂蚁来说,为了保护您的应用程序,这就是为什么它无法对其进行混淆的原因。明确使用useProguard true


需要一个简单的应用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文件为:解压缩apk_name
  2. 您将提取项目文件...查找dex文件
  3. 使用dex2jar将其转换为jar
  4. 使用JD-UI应用读取该jar文件
  5. 您将看到所有Java类和核心代码文件
  6. 是的...。看起来很整洁。...它是一个代码....但是有些困惑
  

嗯...希望对您有帮助

编辑:2

在保护规则文件中...不要试图像编写代码一样对它进行编程,只保留一些不重要的类: -保持公共类OpenSource

就这样。

编辑:3

最重要的是,作为初学者,您应该而且必须使用android studio或任何您的IDE设置的默认保护文件;在创建项目时。就像:

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

编辑:4

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

编辑:5

始终建议使用Android Studio,而不要使用其他任何IDE,因为它是由google正式宣布为android的Google。而且它必须是最新的且更新的IDE,且已启用最低API 26。正如Google上周强制规定的那样,要在google play应用上上传应用必须以api级26为目标。

由于所有最新依赖项和补丁程序都在其中,因此它对您的项目也将有所帮助,从而确保其无错误构建。

答案 1 :(得分:0)

  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')。尝试删除所有重复的库。

答案 2 :(得分:0)

曾经考虑过从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