【问题标题】:How to make secure signed apk which is difficult to reverse engineer?如何制作难以逆向工程的安全签名apk?
【发布时间】:2017-03-09 06:46:13
【问题描述】:

我在我的项目中使用multidex enabled。当我使用 minifyEnabled true 时出现此错误

FAILURE: Build failed with an exception.
  • 出了什么问题: 任务 ':app:transformClassesAndResourcesWithProguardForRelease' 执行失败。

    作业失败,查看日志了解详情

这是我的 gradle 文件:

        apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        useLibrary 'org.apache.http.legacy'
        defaultConfig {
            applicationId "com.app.example"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 9
            versionName "1.8"
            multiDexEnabled true


        }
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        dexOptions {
            preDexLibraries = false
        }
        productFlavors {
        }

        lintOptions {
            checkReleaseBuilds false
        }
    }


    repositories {

        maven {
            url 'https://dl.bintray.com/ayz4sci/maven/'
        }

    }

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:design:25.1.1'
        compile 'com.android.support:appcompat-v7:25.1.1'
        compile 'com.android.support:multidex:1.0.1'


    }

UPDATE(在看到 kevin 建议的日志后)

  • 我添加这行不要警告

    -dontwarn com.squareup.picasso.**
    -dontwarn com.vungle.**
    -dontwarn twitter4j.**
    

和它的工作,但我正在使用 d-max/spots-dialog 并且它在签名 apk 后没有显示

也可以使用 -keep class 解决。

【问题讨论】:

    标签: android gradle apk


    【解决方案1】:

    如果你使用 minify,默认情况下你会启用代码混淆..

    它还删除了未使用的方法。我有来自 Google 支持库的 20k+ 方法,当我使用 minify 时,它被减少到大约.. 5k 左右.. 所以你必须修改你的 proguard-rules 让你的应用程序告诉代码混淆器不要删除你的类。

    例如:

    -keep class com.app.example.** {*;}
    -dontwarn com.app.example.**
    
    # Ensure annotations are kept for runtime use.
    -keepattributes *Annotation*
    # Don't remove any GreenRobot classes
    -keepnames class org.greenrobot.** {*;}
    # Don't remove any methods that have the @Subscribe annotation
    -keepclassmembers class ** {
        @de.greenrobot.event.Subscribe <methods>;
    }
    

    你可以通过阅读错误日志找到需要哪个类,它通常会在“需要类x但未找到”那一行写着什么

    【讨论】:

    • 我只发现了这个: 警告:处理任务 java.io.FileNotFoundException 时出现异常:D:\workspace\Appname\app\build\intermediates\proguard-rules\release \aapt_rules.txt(系统找不到指定的路径)
    • @bdevloper 嗯,试试在你的gradle中只使用proguardFiles getDefaultProguardFile('proguard-android.txt'),而且,它说proguard的文件没有找到,所以检查目录是否在那里
    • 意味着如果我在我的 apk 的 gradle 逆向工程中不使用 minifyEnabled 很困难?
    • 并且目录在那里,但没有找到 aapt_rules.t‌​xt
    • 我正在使用 AES 算法。 隐藏我的网址,但它也在“”中,所以我将我的密钥发送到服务器,它也可能被黑客入侵。那么如何隐藏呢?
    猜你喜欢
    • 2019-08-16
    • 2013-07-13
    • 2019-10-11
    • 2014-03-26
    • 2015-09-07
    • 2018-01-24
    • 2011-09-09
    • 2016-09-27
    • 2021-09-25
    相关资源
    最近更新 更多