【问题标题】:Proguard with AAR library issue带有 AAR 库问题的 Proguard
【发布时间】:2016-06-28 11:43:06
【问题描述】:

我有一个带有一个类的 android 库,我想让它成为一个 .aar 库。当我将minifyEnabled 设置为true 时,另一个android 项目无法使用该库(如果minifyEnabled 设置为false 很好)。我想问一下带AAR库的proguard的正确配置是什么

HelloWorld.java

package com.example.hello;

import android.util.Log;

public class HelloWorld {
    public static void Hello(){
        Log.v("HelloWorld","Hello World!");
    }
}

build.grandle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

proguard-rules.pro

-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

-keep class com.example.hello {public *;}

【问题讨论】:

  • 你能不能把proguard-rules的最后一行改成-keep class com.example.hello.** {public *;}
  • @basilisk 好像可以,但是android studio还是可以反编译正常吗?另外,这是处理依赖库的正确方法吗?
  • @Joshua 任何 APK 都可以被反编译。 Proguard 不会以任何方式保护 APK 或库。它只对不属于 API 的类进行一点混淆。

标签: android android-proguard aar


【解决方案1】:

尝试将 proguard-rules 中的最后一行更改为

-keep class com.example.hello.** {public *;}

至于 Android Studio 能够反编译,你无法阻止。如果你想保护你的代码,我想你能做的最好的就是混淆它的大部分,然后通过添加相关的proguard规则来通过你不混淆的接口扩展所需的功能。

【讨论】:

  • 我试过这个解决方案+原始问题的proguard。当我使用生成的 aar 文件时,我遇到了一个奇怪的行为,我的一些 aar 对象出现“无法解析符号”错误。但它编译正确。
  • 两个星号不再编译。还有其他解决方案吗?
【解决方案2】:

任何 APK 都可以被反编译。 Proguard 只是让反编译的代码更难理解

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2014-05-12
    • 1970-01-01
    • 2014-11-13
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多