Как уже упоминал Моррисон Чанг, в настоящее время нет никакого способа выпустить проект библиотеки Android в качестве jar-файла, и нет никакого способа запутать проект, за исключением исходного кода java.Однако есть способ запутать исходный код, хотя это официально не поддерживается.
Все, что вам нужно сделать, это запустить команду «ant clean release» в вашей библиотеке.Запутанный источник записывается в «bin / proguard / obfuscated.jar».Просто поместите этот jar-файл в каталог libs вашего экспортированного библиотечного проекта и удалите содержимое каталога src, и вы в значительной степени сделали это.
Однако есть один метод с вышеуказанным подходом.Он не совсем правильно обращается с ресурсами.Чтобы это исправить, вы должны удалить все классы ресурсов (R.class и R $ *. Class) из вашей копии obfuscated.jar.Это в свою очередь потребует от вас отключить запутывание для этих классов ресурсов.Это можно сделать, добавив в файл proguard-project.txt следующее:
-keep public class **.R {
public *;
}
-keep public class **.R$* {
public *;
}
Для справки, вот цель муравья, которую я использую для создания обфусцированного проекта библиотеки Android без исходного кода:
<?xml version="1.0" encoding="UTF-8"?>
<project name="library_rules" default="librelease">
<target name="librelease" depends="release"
description="Build a sourceless and obfuscated android library.">
<property name="libname" value="myProject" />
<property name="librelease.dir" location="bin/${libname}" />
<delete file="${librelease.dir}"/>
<mkdir dir="${librelease.dir}"/>
<mkdir dir="${librelease.dir}/libs"/>
<mkdir dir="${librelease.dir}/src"/>
<copy todir="${librelease.dir}/res">
<fileset dir="res"/>
</copy>
<copy file="AndroidManifest.xml" todir="${librelease.dir}" />
<copy file="ant.properties" todir="${librelease.dir}" />
<copy file="build.xml" todir="${librelease.dir}" />
<copy file="project.properties" tofile="${librelease.dir}/project.properties" />
<jar destfile="${librelease.dir}/libs/${libname}.jar">
<zipfileset src="bin/proguard/obfuscated.jar" excludes="**/R.class,**/R$$*.class"/>
</jar>
</target>
</project>
Экспортируемый проект библиотеки Android будет расположен в bin / myProject.Это было протестировано с использованием инструментов Android SDK v20.0.3 и v21.