библиотека dexguard не может шифровать классы

Я пытаюсь зашифровать классы в моем проекте библиотеки Android. Но я не могу этого сделать. Переменные и строки изменяются dexguard, но это не влияет на -encryptclasses. Я получаю журналы в выводе сборки:

Warning: not encrypting kept class com.justexample.SomeClass1
Warning: not encrypting kept class com.justexample.SomeClass2
Warning: the configuration specifies to encrypt 2 classes that it keeps at the same time.
      Not encrypting those classes to avoid problems at runtime.
Note: inner class com.justexample.SomeClass1 is unencrypted, while its outer class is encrypted.
Note: inner class com.justexample.SomeClass2 is unencrypted, while its outer class is encrypted.
Note: one or more encrypted classes have unencrypted inner classes.

Мой dexguard-project.txt:

-verbose
-encryptstrings com.justexample.SomeClass1
-encryptclasses com.justexample.SomeClass1, com.justexample.SomeClass2

И мой град для модуля:

apply plugin: 'com.android.library'
apply plugin: 'dexguard'

android {
compileSdkVersion 25
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName gitVersionName()
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFile getDefaultDexGuardFile('dexguard-library-release.pro')
        proguardFile 'dexguard-project.txt'

    }
}
sourceSets { main {
    assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/']
} }
}

dependencies {
//my dependecies
}

person kamilf    schedule 07.11.2018    source источник


Ответы (1)


Вы используете конфигурацию библиотеки по умолчанию: dexguard-library-release.pro, которая по умолчанию сохраняет все общедоступные/защищенные классы.

Вы не можете шифровать классы, которые хранятся.

Чтобы решить эту проблему, используйте агрессивную конфигурацию: dexguard-library-release-aggressive.pro и укажите общедоступный API вашей библиотеки, который не следует запутывать.

Не забудьте также использовать -repackageclasses com.mypackage.internal

чтобы переместить все запутанные классы в этот пакет.

person T. Neidhart    schedule 07.11.2018
comment
Оно работает. Но у меня другая проблема. У меня также есть SomeClass3 со статическим Builder внутри. Я исключил SomeClass3, чтобы не шифровать, и он виден, но Builder исчезает. Я пытаюсь с -keep, -keepattributes, -keepclassmembers, но ничего не работает. - person kamilf; 07.11.2018
comment
Чтобы сохранить внутренние классы, вы должны использовать, например, -keep class com.myclass$** { *; }, внутренние классы имеют имя внешнего класса $ имя внутреннего класса. - person T. Neidhart; 07.11.2018