От Eclipse до Android Studio: почему proguard.cfg используется, когда НЕ создается Release?
Итак, я пытался перенести разработку мультипроектного приложения (проекты eclipse) в Android Studio (v1.1).
Импортировать через Файл> Импортировать проект было действительно легко и прошло без происшествий.
Однако, когда я попробовал проект Make/Rebuild, я столкнулся с множеством сюрпризов. Первый, не связанный с Proguard, был связан с кодировкой исходного файла (первоначально в Windows-1252), но я быстро нашел решение, используя этот ответ Windows-1252 > Перезагрузить> UTF-8 > Преобразовать.
Затем "ошибка: не удается найти класс символов" для com.comp.mod.X
мой класс. Затем я решил эту проблему, перейдя к модулю (модуль Android Studio, который ранее был проектом Eclipse), который содержит этот класс и добавил в его proguard.cfg следующее:
-keep public class com.comp.mod.X
Что оставило меня с "ошибкой: невозможно найти символьную переменную" для константного BB, определенного в вышеупомянутом классе. Я решил это, добавив к тому же proguard.cfg следующее:
-keepclassmembers class com.comp.mod.X {
public static final boolean BB;
}
Это оставило меня только с одной "ошибкой: невозможно найти метод символа getPreferenceX()". Я решаю эту проблему, добавляя к тому же методу -keepclassmembers тот метод, чтобы приведенное выше теперь выглядело так:
-keepclassmembers class com.comp.mod.X {
public static final boolean BB;
public static java.lang.String getPreferenceX();
}
Я думал, что все готово, но, к моему ужасу, когда я попытался перестроить проект, я получил множество дополнительных ошибок от других модулей в проекте, все типа "ошибка: не удается найти класс / переменную / метод символа" и связанные с ними к некоторому proguard.cfg.
Я мог бы продолжить разделывать файлы proguard.cfg для каждого модуля, но в этот момент я начинаю подозревать, что я делаю что-то принципиально неправильное, потому что эти файлы proguard.cfg отлично работают в Eclipse. Так,
- Почему вдруг они больше не подходят для Android Studio?
- Если ProGuard запускается только при сборке приложения в режиме выпуска, почему сборка на основе Android Studio жалуется на "не удается найти символ" из-за обфускации Proguard?
Что мне не хватает?
Примечание: я не пытался "Создать подписанный APK". Все, что я делаю, это "Перестройка проекта".
1 ответ
В настоящее время (по состоянию на 2015-04-24), minifyEnabled
значение по умолчанию false
для всех типов сборки некорректно для многомодульных проектов, в которых некоторые модули (включая приложение) зависят от других модулей. Это связано с ошибкой #52962, из-за которой типы сборки не распространяются на библиотеки - они всегда создаются как RELEASE.
Предложения обойти эту ошибку или уведомления о ее исправлении приветствуются.