В настоящее время я работаю над проектом Android, в котором я делаю вычисления на C, используя Android NDK.Метод во внутреннем классе, отнятый proguard
Мое приложение работает нормально, пока я не запускаю proguard, но когда я это делаю, метод «reportProgress», удаляется прогард. Этот метод является частью частного внутреннего класса, который расширяет AsyncTask
private class CalculateTask extends AsyncTask
Я называю мой родной код со ссылкой на экземпляр CalculateTask. Нативный код затем вызвать элемент в этом классе, используя следующий код в JNI
jclass taskClass = (*env)->GetObjectClass(env, task);
jmethodID reportProgressMid = (*env)->GetMethodID(env, taskClass, "reportProgress", "(Ljava/lang/String;I)Z");
где задача является ссылка на экземпляр CalculateTask. Я с трудом рассказываю програде, чтобы не отрывать
public boolean reportProgress(String, int)
метод, который вызывается только через JNI.
До сих пор я принял следующие подходы, ни один из которых сделали трюк:
Keeping всего класса:
-keep class MYPACKAGENAME.CalculateScreen$CalculateTask
только хранение упомянутого метода, выполнив:
-keep class MYPACKAGENAME.CalculateScreen$CalculateTask {
public boolean reportProgress(java.lang.String,int);
}
Или это:
-keepclassmembers class MYPACKAGENAME.CalculateScreen$CalculateTask {
public boolean reportProgress(java.lang.String,int);
}
Использование аннотаций (повторное использование аннотацию Google AdMob):
-keep class MYPACKAGENAME.CalculateScreen$CalculateTask {
@com.google.android.gms.common.annotation.KeepName <methods>;
}
Или это:
-keepclassmembers class MYPACKAGENAME.CalculateScreen$CalculateTask {
@com.google.android.gms.common.annotation.KeepName <methods>;
}
Моя конфигурация ProGuard основана на "оптимизации" распределенным с Android SDK, под названием Proguard-андроида-оптимизируют .текст.
Обратите внимание, что proguard запускается через Gradle, и я убедился, что задача proguard очищена и повторно запущена.
Несколько соответствует этому вопросу: http://stackoverflow.com/questions/9298992/proguard-setting-to-not-remove-unused-method/9302402#9302402 Но я не вижу, как мой подход # 3 отличаются от предлагаемого решения. – darkdark