Proguard с проблемой библиотеки AAR

У меня есть библиотека Android с одним классом, и я хочу сделать ее библиотекой .aar. Когда я устанавливаю для minifyEnabled значение true, другой проект Android не может использовать библиотеку (это нормально, если для minifyEnabled установлено значение false). Я хотел бы спросить, какова правильная конфигурация proguard с библиотекой AAR.

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 *;}

person Joshua    schedule 28.06.2016    source источник
comment
Можете ли вы попробовать изменить последнюю строку в правилах proguard на -keep class com.example.hello.** {public *;}   -  person Anuj    schedule 28.06.2016
comment
@basilisk Кажется, это работает, но нормально ли, что Android Studio все еще может декомпилировать его? Кроме того, это правильный способ обработки библиотеки зависимостей?   -  person Joshua    schedule 28.06.2016
comment
@Joshua Любой APK можно декомпилировать. Proguard никоим образом не защищает APK или библиотеку. Он немного запутывает классы, не принадлежащие API.   -  person Robert    schedule 28.06.2016


Ответы (2)


Попробуйте изменить последнюю строку в proguard-rules на

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

Что касается возможности декомпиляции Android Studio, вы не можете этого предотвратить. Если вы хотите защитить свой код, я полагаю, что лучшее, что вы можете сделать, это запутать большую его часть, а затем расширить желаемую функциональность с помощью интерфейсов, которые вы не запутываете, добавив соответствующие правила proguard.

person Anuj    schedule 28.06.2016
comment
я попробовал это решение + proguard из исходного вопроса. я получаю странное поведение, когда я использую полученный файл aar, некоторые из моих объектов aar дают ошибку «Не удается разрешить символ». НО компилируется правильно. - person user1506104; 08.05.2018
comment
Две звездочки больше не компилируются. Любые другие решения? - person Daniel; 16.07.2020

Любой APK можно декомпилировать. Proguard просто делает декомпилированные коды более сложными для понимания.

person Zijian    schedule 28.06.2016