Обфускация проекта библиотеки Android / apklib

У меня есть вопрос о том, как запутать проект библиотеки Android. В целом, я хотел бы запутать файл apklib (или действительно файлы .java для любого библиотечного проекта), который содержит как файлы .java (в каталоге Android src/), так и файлы XML/внешние ресурсы (в каталоге Android res/ ). Я хотел бы иметь возможность распространять эту библиотеку среди других разработчиков, подобно библиотеке Facebook SDK (https://github.com/facebook/facebook-android-sdk для справки). Однако я хочу, чтобы код был запутан, чтобы мои методы не были доступны для чтения.

Я пытался использовать Proguard с Maven, но даже после создания моего проекта с Proguard файлы в моем .apklib не были запутаны. Я также пытался запустить Proguard вручную, но мне не удалось заставить его выводить необработанные файлы .java (на которые другой проект может ссылаться как на библиотеку) вместо файлов .class.

Если у кого-нибудь есть информация о том, как запутать код Java в библиотеке apklib/Android, я был бы очень признателен. Кроме того, было бы очень полезно узнать, невозможно ли вообще создать запутанную библиотеку andoroid.

Большое спасибо за вашу помощь.

Бест, Кевин


person Kevin    schedule 03.05.2012    source источник


Ответы (1)


В зависимости от того, как вы настроили цель proguard для плагина android maven, вы, скорее всего, сможете создать запутанный apklib. Я, однако, не пробовал себя. Имейте в виду, что proguard потенциально запутывает вторичный артефакт, а не первичный apklib.

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

person Manfred Moser    schedule 03.05.2012
comment
Манфред -- Большое спасибо. В моей конфигурации Proguard общедоступные методы действительно открыты, так что разработчикам не нужно совершать какие-либо безумства, такие как вызов запутанных методов. Я посмотрю, не запутывает ли Proguard вторичный артефакт — это согласуется с тем, что я видел, но я не уверен, как повторно включить код обратно в импортируемую библиотеку. - person Kevin; 04.05.2012
comment
вы можете просто использовать вспомогательный плагин сборки для развертывания библиотеки в качестве вторичного артефакта... и сделать его доступным, например. с классификатором.. - person Manfred Moser; 04.05.2012