2016-09-14 2 views
0

У меня есть некоторые классы, которые используются при отражении. Похоже, ProGuard удаляет их при создании для выпуска.Proguard: Держите классы в определенном пакете

Можно ли указать, что все классы в определенном пакете (в отличие от конкретных имен классов) не будут удалены при запуске ProGuard. В качестве примечания, обфускация разыскивается. Как еще одно замечание, все эти классы расширяют один класс, который присутствует.

Благодаря

+0

Вы попробовали упомянутое решение [здесь] (http://stackoverflow.com/questions/4447145/proguard-and-reflection-in-android)? – baskara

+0

Я смотрел на это, но не понял. С одной стороны, в первом примере говорится, как избежать обфускации класса, второй пример говорит о том, что он не запутывает конкретный метод. Так что это не то же самое, что и мой случай. Я хочу, чтобы классы, включенные в сборку и обфускации. – zundi

+0

хорошо, классы с отражением не должны быть запутаны, чтобы заставить его работать. поэтому вы можете просто применить «-keep class your-package» на своих классах, которые используют отражение. – baskara

ответ

0

Использование -keep class com.yourpackage.name.** { *; } хорошо работает в моем случае. Он по существу использует подстановочный знак для хранения всех классов, принадлежащих этому пакету. Также обратите внимание: *; не требуется.

Кроме того, чтобы помочь отладить вашу проблему, вы должны проверить сгенерированный seeds.txt, если класс включен, то он сохраняется.

Кроме того, это может быть другая проблема, например, использование общедоступных статических внутренних классов или около того. Лучший способ отладки - декомпилировать minified apk, используя dex2jar и JD-GUI, и вручную пропустить код, чтобы увидеть, что лишено или хранится. Не забывайте, прежде чем -dontdeobfuscate.

+0

Это сохраняет классы в сборке, однако они не запутываются (как определено путем проверки mapping.txt) – zundi

0

Вы пытались добавить эту строку в свой файл proguard-rules.pro?

-keep class com.company.application.PackagePrefix* 
{ 
*; 
} 

Если вы не хотите использовать префикс пакета, который вы можете использовать вместо **.

Надеюсь, это поможет.

Смежные вопросы