2013-08-15 1 views
0

Есть ли способ снять определенные классы из APK с помощью proguard? Мне нужно сделать это, чтобы собрать 2 разных APK, один с ограниченными функциями. Например, некоторые действия не должны быть доступны в одном из двух APK, поэтому его не должно быть в нем.Удалить классы из APK (построено с помощью Eclipse)

Я не могу использовать библиотеку и 2 проекта для достижения этого, потому что фактический прецедент намного сложнее и уже включает в себя построение 4 APKs, еще 2 APK должны быть построены из одной и той же библиотеки, удаляя определенные компоненты из APK.

Я пробовал что-то вроде этого, но он вообще не работал и ничего не удалял из встроенного APK.

-assumenosideeffects class app.package.activities.classes_to_strip.** { 
    public *** *(...); 
    public static *** *(...); 
    public *; 
    private *; 
    protected *; 
} 

ОБНОВЛЕНИЕ: Я изменил название, чтобы лучше отразить то, что я пытаюсь достичь.

До сих пор я смог создать сокращенный APK (с меньшим количеством действий), однако все остальные коды активности остаются в финальной APK, потому что на них ссылаются из разных частей кода (это не совсем проблема, потому что такой код не будет работать).

+0

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

ответ

0

Нет, proguard предназначен для смешивания кода, а не для кода 'build option'.

+0

Я понимаю, что, однако, варианты сборки невозможны в Java как таковые (например, #ifdef в C), и у меня есть одна основная библиотека, содержащая все, что используется для сборки 4 (тогда 6) APK. Этот вариант ProGuard оказался разумным способом добиться этого легко. – 3c71

+0

Любое решение для опции сборки, которое позволит удалить определенные классы из окончательного APK? – 3c71

0

С Proguard, вы легко смешивать большую часть кода и исключить некоторые используя -keep класс *. Однако, что вы хотите сделать, это наоборот.

Я думаю, вы могли бы просто вручную удалить код в ваш AndroidManifest.xml

+0

Основная библиотека AndroidManifest на самом деле унаследована другими APK, поэтому я отключу компоненты, которых не хочу в финальной APK, однако все классы остаются присутствующими в этих APK с обрезанным вниз. Окончательный APK составляет около 8 Мб, тогда как фактический использованный код будет около 2 МБ! – 3c71

+0

Основная проблема с этим подходом заключается в том, что для этого потребуется поддерживать 6 различных манифестов, если я когда-либо забуду обновить один, окончательный APK будет FC. – 3c71

1

Андроида Ant/Затмение/Gradle процесс сборки автоматически создает конфигурацию Proguard (бен/proguard.txt), который держит деятельность (и другие классы), которые ссылаются на AndroidManifest.xml (и другие файлы XML). Поэтому вам нужно как-то запустить свои сборки с помощью разных файлов AndroidManifest.xml.

+0

Не хотите иметь разные манифесты (всего 6) для поддержания. В этих обрезанных APK я отключил компоненты, которых я не хочу, но не удаляет их из окончательных APK. – 3c71

+0

Протестировано с помощью различных манифестов, на самом деле это не помогает. Только классы, на которые не ссылаются нигде в коде/xml, будут удалены. Мне нужно удалить набор классов из окончательного APK. – 3c71