Сборка Gradle + Proguard + APKLib

Я разработал библиотеку Android, используемую тестовым приложением, которое я также разработал.

Мне нужно запутать код библиотеки Android, чтобы иметь возможность доставлять его некоторым клиентам, чтобы они не могли видеть слишком много кода. Но в результате мне нужна библиотека Android с той же структурой, что и моя не запутанная библиотека, чтобы я мог открывать ее с помощью Eclipse и использовать в других приложениях.

Я пытался сделать это с Gradle, а затем с Proguard, но мне там тяжело.

Сначала я использовал плагин: «android-library» для сборки моей apklib, но я не очень хорошо понимаю структуру папок, созданных в папке сборки.

В какой папке должен находиться новый проект библиотеки Android с запутанными классами? Я делаю это правильно?

Более того, мне тяжело, потому что многие из исходных классов, похоже, не генерируются и отсутствуют после того, как я сделал сборку, но я не могу понять, почему, каковы возможные причины этого?

Возможно ли, что это может быть из-за использования какого-то устаревшего метода или что-то в этом роде?

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

16:36:33.809 [INFO] [system.out] Исходное количество классов библиотеки: 5366 16:36:33.809 [INFO] [system.out] Окончательное количество классов библиотеки: 615

Что может быть причиной этого? Я знаю, что мой вопрос довольно расплывчатый, но я целый день боролся с этим и пока не могу улучшить свою сборку. Мы будем очень признательны за любую помощь или совет о том, как правильно создать библиотеку Android с запутыванием с помощью Gradle и Proguard.

Редактировать :

Я нашел какие-то похожие сообщения, но на самом деле ничего не ясно о выводе, созданном Gradle с помощью Proguard. Похоже, что выводом посещения является файл .aar в папке lib, но это не совсем то, что я искал. До сих пор мне удавалось использовать некоторые специальные правила в моем файле настроек Proguard, чтобы принудительно сохранить некоторые из моих файлов с помощью правила -keep (но я действительно не могу понять, почему они не сохраняются и не запутываются, если я не Не спрашивайте эти правила). Затем я использовал class.jar, сгенерированный в папке bundles/release, и переместил его в новую папку libs проекта библиотеки Android, скопировав ресурсы из моего исходного проекта библиотеки Android. Делает меня проектом библиотеки Android с запутанными источниками, но не кажется очень чистым.


person tchoum    schedule 08.07.2014    source источник
comment
Есть новости по этому поводу? Как вы упомянули в своем ответе Эшвину, почти все, включая Ксавьера и Эрика Лафортьюна, утвердительно говорят о том, что, по их мнению, вы должны делать (библиотеки Android не запутаны; Android-библиотека). Google явно запутывает свои библиотеки Android (карты, аналитику и т. д.), так как же это делается? Используете DexGuard?   -  person swooby    schedule 30.07.2015


Ответы (1)


Прежде всего, вы не можете открыть свой запутанный код в eclipse. Поскольку процесс запутывания не будет генерировать структуру проекта, которую вы хотите открыть в eclipse. Закрытие — это процесс для защиты вашего двоичного распределенного кода, а не исходного кода. Пожалуйста, сохраните это ясно в вашем уме.

Я думаю, вам нужно выполнить бинарное распространение вашего проекта библиотеки Android. Для бинарного распространения проектов библиотеки Android используется расширение aar, как указано в ФОРМАТ AAR

Это означает, что вам нужно искать файл yourlibrary.aar, созданный в папке сборки. Для проектов библиотеки Android не запутывайте свой код. Так как вашим клиентам будет сложно использовать библиотеку.

Вы получите файл .aar в папке build/outputs/aar.

Думаю, этого вполне достаточно, чтобы двигаться дальше.

person Ashwin N Bhanushali    schedule 09.07.2014
comment
Спасибо за ваш ответ и ваше время. Как я уже сказал в своем посте, я уже знаю о сгенерированной библиотеке AAR, но это не совсем то, что я хочу получить. Я немного устал от людей, которые на самом деле не читают вопросы или так утвердительно говорят о том, что мне нужно делать. Я также знаю, что мне нужно, чтобы точки входа в мою библиотеку не были запутаны, чтобы мои клиенты могли ее использовать. В любом случае, спасибо за напоминание о том, для чего на самом деле нужна обфускация. Я понял, что это не даст мне проект, который я мог бы использовать в Eclipse. Но имейте в виду, что не все клиенты смогут использовать библиотеку AAR. - person tchoum; 09.07.2014