Как настроить ProGuard в Eclipse при экспорте подписанного, запутанного Android-приложения? - PullRequest
6 голосов
/ 21 сентября 2010

Я публикую приложение для Android, разработанное в Eclipse, и, как указано в заголовке, я хотел бы интегрировать обфускацию Proguard в сборку, особенно для экспорта подписанного приложения.

Кому-нибудь повезло, если вы не пошли по пути муравья?

Ответы [ 3 ]

4 голосов
/ 22 сентября 2010

Я также хотел сделать это без использования Ant или подхода командной строки. Вот что сработало (только в Eclipse + Windows):

  • (Вам необходимо скачать Proguard. Сценарий должен найти его здесь: C: \ android-sdk_r04-windows \ proguard \ lib \ proguard.jar).

  • Создайте пакетный файл Windows "C: \ android-sdk_r04-windows \ obfusc.bat":


    DEL /S /Q obfuscated
    MKDIR obfuscated

    java -jar C:\android-sdk_r04-windows\proguard\lib\proguard.jar @android.pro

    DEL /S /Q bin\com\
    DEL /S /Q bin\org\

    ROBOCOPY obfuscated\com bin\com /S
  • В Eclipse откройте страницу свойств вашего проекта Android, выберите панель «Строители» и добавьте новый построитель типа «Программа». В поле «Местоположение» главной вкладки укажите абсолютный путь к сценарию на предыдущем шаге. В поле «Рабочий каталог» поместите переменную $ {build_project}. На вкладке «Параметры сборки» выберите «После очистки» в разделе «Запуск сборщика».

  • Убедитесь, что этот инструмент сборки стоит последним, непосредственно перед сборщиком пакетов Android.

  • Создайте файл конфигурации proguard в корневой папке проекта Android. Я немного их настраиваю и включаю в контроль версий, но это на ваше усмотрение. Файл, который я использую, называется «android.pro», как указано в сценарии, и похож на конфигурацию в блоге разработчика, но содержит заголовок с инструкциями injar, outjar и libraryjar, например:


    -injars      bin(!.svn/**)
    -outjars     obfuscated
    -libraryjars C:\android-sdk_r04-windows\android-sdk-windows\platforms\android-1.6\android.jar
    -libraryjars C:\GoogleAnalyticsAndroid_0.7\libGoogleAnalytics.jar

    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    -printmapping proguard.map
    -keepattributes SourceFile,LineNumberTable

    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class com.android.vending.licensing.ILicensingService

    -keepclasseswithmembernames class * {
        native ;
    }

    -keepclasseswithmembernames class * {
        public (android.content.Context, android.util.AttributeSet); 
    }

    -keepclasseswithmembernames class * {
        public (android.content.Context, android.util.AttributeSet, int); 
    }

    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
  • Вы хотите оставить этот Строитель выключенным большую часть времени. Когда пришло время протестировать или экспортировать запутанный APK, включите его, а затем выполните «Проект> Очистить» из Eclipse, включая проект и любые проекты библиотеки, от которых он зависит.

Я думаю, вот и все.

3 голосов
/ 22 сентября 2010

Хорошо, это самый актуальный и недавний пост на тему:

http://android -developers.blogspot.com / 2010/09 / ProGuard-андроида-и-лицензирования server.html

Он использует муравья, но все трудные части сделаны для вас, и пока вы следуете инструкции, это работает. Примечание: не пропускайте обновление, это работает только с SDK r7 +, и запускать обновление eclipse неплохо, в том числе и для обновления AVD.

И для всех, кто добавляет внешние файлы jar, настройте ProGuards procfg.txt и добавьте:

-libraryjars {путь} {имя_файла} .jar

1 голос
/ 26 октября 2014

Если вы используете затмение, просто раскомментируйте строку project.properties

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
...