Czy ktoś może udostępniać przykładowe/proste zadanie ANT obfuskacji dla Androida? Pod warunkiem, że mam kompletny pakiet APK i potrzebuję po prostu przekazać * klasę hru Proguard, a następnie przygotować * .dex do zbudowania APKANT kompilacja dla systemu Android Obraźenie proguardem
Odpowiedz
znalazłem rozwiązanie:
- Get Proguard - kopia proguard.jar do znanego katalogu (słownie myproject/PROGUARD)
- Przygotuj proguard.cfg -describing co i jak optymalizować/Niewidoczność. Ten proces opisany dokładnie w Proguard na manual
- Przygotuj następujące build.xml Ant (lub smth jak ten) - wielki thanx this guy
UPDATE kompletny build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject" default="zipalign" basedir=".">
<property name="target" value="android-8"/>
<!--property file="default.properties" /-->
<property name="encoding" value="UTF-8"/>
<!-- dirs -->
<property name="sdk.dir" location="Location of Android SDK"/>
<property name="proguard.dir" value="proguard" />
<property name="src.dir" value="src"/>
<property name="gen.dir" value="gen"/>
<property name="res.dir" value="res"/>
<property name="assets.dir" value="assets"/>
<property name="libs.dir" value="libs"/>
<property name="out.classes.unoptimized.dir" value="out"/>
<property name="out.classes.optimized.dir" value="out/optimized"/>
<!-- files -->
<property name="manifest.file" value="AndroidManifest.xml"/>
<property name="signed.apk" value="${ant.project.name}-signed.apk"/>
<property name="unsigned.apk" value="${ant.project.name}-unsigned.apk"/>
<property name="final.apk" value="${ant.project.name}.apk"/>
<property name="android.jar" value="${sdk.dir}/tools/platforms/${target}/android.jar"/>
<property name="unoptimized" value="unoptimized.jar" />
<property name="optimized" value="optimized.jar" />
<property name="proguard.config" value="${proguard.dir}/proguard.cfg"/>
<!-- tools -->
<property name="dx.jar" value="${sdk.dir}/platform-tools/lib/dx.jar"/>
<property name="aapt" value="${sdk.dir}/platforms/${target}/tools/aapt.exe"/>
<property name="zipalign" value="${sdk.dir}/tools/zipalign.exe"/>
<property name="jarsign" value="jarsigner.exe location is here"/>
<property name="keystore" value="Your key store is here"/>
<property name="keyalias" value="Your key alias is here"/>
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
<pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
<pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs" />
<setup import="false"/>
<!--taskdef name="aaptexec"
classname="com.android.ant.AaptExecLoopTask"
classpathref="android.antlibs" /-->
<target name="clean" description="Removes output files created by other targets.">
<echo>Cleaning...</echo>
<delete dir="${out.classes.unoptimized.dir}" verbose="true" />
<delete dir="${out.classes.optimized.dir}" verbose="true" />
</target>
<target name="dirs">
<echo>Creating output directories if needed...</echo>
<mkdir dir="${out.classes.unoptimized.dir}" />
<mkdir dir="${out.classes.optimized.dir}" />
</target>
<!-- Compiles this project's .java files into .class files. -->
<target name="compile" depends="dirs"
description="Compiles project's .java files into .class files">
<echo>Compiling sources...</echo>
<javac encoding="${encoding}" target="1.6" debug="true" extdirs=""
destdir="${out.classes.unoptimized.dir}"
bootclasspathref="android.target.classpath"
includeantruntime="true">
<src path="${src.dir}" />
<src path="${gen.dir}" />
<classpath>
<fileset dir="${libs.dir}" includes="*.jar" />
</classpath>
</javac>
</target>
<target name="preobfuscate" depends="compile">
<echo>Preparing to obfuscation...</echo>
<jar destfile="${unoptimized}"
basedir="${out.classes.unoptimized.dir}"
includes="**/**"
excludes="optimized/**"
/>
</target>
<!-- Obfuscation with ProGuard -->
<target name="optimize" unless="nooptimize" depends="preobfuscate">
<echo>Proguard obfuscation...</echo>
<java jar="${proguard.dir}/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=16" />
<arg value="@${proguard.dir}/proguard.cfg" />
<arg value="-injars ${unoptimized}" />
<arg value="-outjars ${optimized}" />
<arg value="-libraryjars ${android.jar}" />
</java>
<unzip src="${optimized}" dest="${out.classes.optimized.dir}" />
<!-- Delete optimized jar (now unzipped into bin directory) -->
<delete file="${optimized}"/>
<delete file="${unoptimized}"/>
</target>
<target name="dex" description="Converting JVM bytecodes into Dalvik bytecodes" depends="optimize">
<echo>Converting bytecodes to Dalvik VM bytecodes...</echo>
<java jar="${dx.jar}" fork="true">
<arg line="--dex --verbose --output=${out.classes.optimized.dir}/classes.dex ${out.classes.optimized.dir}"/>
</java>
</target>
<target name="aapt" depends="dex" description="compile resources">
<echo>Packing resources...</echo>
<exec executable="${aapt}" logerror="true" osfamily="windows">
<arg line="p
-f
-M ${manifest.file}
-I ${android.jar}
-S ${res.dir}
-A ${assets.dir}
-F ${out.classes.optimized.dir}/${unsigned.apk}
-m -J ${gen.dir}"/>
</exec>
</target>
<target name="sign" depends="aapt" description="sign apk">
<input message="Please enter keystore password (store:${keystore}):"
addproperty="keystore.password" />
<echo>Signing apk...</echo>
<exec executable="${jarsign}" logerror="true" osfamily="windows">
<arg line="-verbose
-keystore ${keystore}
-storepass ${keystore.password}
-signedjar ${out.classes.optimized.dir}/${signed.apk}
${out.classes.optimized.dir}/${unsigned.apk} ${keyalias}"/>
</exec>
</target>
<target name="zipalign" depends="sign" description="zip align">
<echo>Aligning apk...</echo>
<exec executable="${zipalign}" logerror="true" osfamily="windows">
<arg line="-f
-v
4
${out.classes.optimized.dir}/${signed.apk}
${final.apk}"/>
</exec>
</target>
</project>
To zadanie ANT musi zostać dodane do zadań budowniczych Eclipse (Właściwości/Builders) po twórcy Javy i twórcy pakietów Androida.
Prasa "Build All" (lepiej off Automatyczna kontrola budowy w menu Eclipse)
Proces kompilacji systemu Android najpierw kompiluje pliki źródłowe Java (.java) do plików klasy Java (.class) , a następnie konwertuje te pliki klas do kodu Dalvik (classes.dex), a na końcu pakuje ten kod Dalvik do pliku APK.
ProGuard odczytuje i zapisuje pliki klasy Java, więc musi zostać wstawiony do tego potoku między etapem kompilacji a krokiem konwersji. Nie czyta ani nie pisze samego kodu Dalvik, więc nie może działać na pliku APK.
The Android SDK documentation on ProGuard omawia, jak włączyć krok zaciemniania w kompilacji Ant dla Androida-9. W skrócie, musisz dodać wiersz "proguard.config = proguard.cfg" do pliku default.properties, a następnie uruchomić "release ant".
Nie jest to dokładnie to, o co prosiłem ... Buduję plik APK systemu Android od wewnątrz IDE (Intellij) i przed kompilacją lub po kompilacji mogę uruchomić dowolne zadanie kompilacji ANT. Czy możliwe jest zdefiniowanie w tym celu oddzielnego zadania ANT? – barmaley
Ponieważ krok ProGuard musi zostać wykonany w środku potoku budowania, nie można po prostu dodać zadania Ant przed lub po kompilacji IDEA. Musisz utworzyć skrypt Ant build.xml dla całego procesu kompilacji i zmodyfikować go. Polecenie android z zestawu SDK systemu Android tworzy dla Ciebie plik Ant. Alternatywnie IDEA może utworzyć dla Ciebie plik Ant (Build> Generuj kompilację Ant ...). Wtyczka IDEA dla systemu IDEA wydaje się już tworzyć plik Ant za pomocą zestawu SDK systemu Android. Następnie możesz uruchomić kompilację Ant z IDEA (pasek menu po prawej, zakładając, że wtyczka Ant jest włączona). –
Proces obfuskacji proGuard wymaga plików .class, więc nie można uruchomić Anta przed budową IDE (.java) lub po (.dex).
rzucić okiem na to stanowisko, gdzie wyjaśnił, w jaki sposób dodać krok PROGUARD w globalnej Ant produkcji:
http://www.androidengineer.com/2010/07/optimizing-obfuscating-and-shrinking.html
Jeśli naprawdę chcesz skorzystać z wbudowanych idea, można spróbować wykonać następujące czynności.
- Po kompilacji IDEA rozpakuj pakiet apk z apktoolem.
- Konwersja .dex pliki .class z dex2jar
- Run PROGUARD jak poprzedniego postu koncert ty
Przepraszam, że nie przywiązują cię więzi apktool i dexjar ale jak jestem nowicjuszem Nie mogę opublikować więcej niż jednego hiperłącza.
Wiem, ale potrzebuję po prostu build.xml dla Anta :) – barmaley
Uwaga: odpowiedź barmaley jest od 2011 roku, i wydają się być ważne dla systemu Android w wersji SDK Tools albo 8 lub 10.
próbowałem dostosowania tego rozwiązania przy użyciu Android SDK Tools w wersji 18.1.1, ale trzymane na braku błędu: taskdef class com.android.ant.SetupTask cannot be found
Nawet tually, co zrobiłem, było to:
rm build.xml
android update project -p .
- Jeśli nie mają narzędzia SDK na swojej drodze, trzeba użyć pełnej ścieżki do android narzędzia, na przykład w systemie Windows: C: \ Android \ sdk \ tools
To stworzyło nową build.xml, który jest zgodny z aktualnymi SDK Tools, i wydają się zautomatyzować wiele pracy ręcznej, który jest opisany w odpowiedzi barmaley użytkownika.
Po tym czasie mogłem uruchomić ant release
, który zajął się budowaniem i zaciemnianiem wyniku. Plik APK po wyjęciu z pudełka.
W celu zautomatyzowania zaciemniania poprzez mrówki, musisz:
- Enable Proguard obfuscator (oczywiście)
- Utwórz plik
ant.properties
i wypełnić go z odpowiednich params key.store (patrz this SO reply szczegóły).
Masz rację - było kilka zmian od 2011 roku. – barmaley
- 1. Kompilacja systemu Android z wiersza poleceń w systemie Windows
- 2. co to jest kompilacja ANT?
- 3. Uaktualnienie systemu Android Kompilacja z powodu shrinkReleaseMultiDexComponents
- 4. JavaFX i kompilacja HelloWorld z Ant
- 5. Natychmiastowe uruchamianie nie działa z proguardem
- 6. Android Ant Build
- 7. Wydanie Android ICS Kompilacja
- 8. Odpowiednik iOS dla systemu Android()
- 9. Ustawienie powinowactwa dla systemu Android:
- 10. Obsługa systemu Android dla AVRCP
- 11. Czy mogę utworzyć specyficzne dla systemu operacyjnego zadanie kopiowania Ant?
- 12. Kodowanie systemu Android Gradle
- 13. Kompilacja krzyżowa biblioteki statycznej z systemu Linux dla Windows
- 14. Kompilacja na 64-bitowym systemie dla systemu 32 bit - Kompatybilność
- 15. Mono dla makr preprocesora dla systemu Android
- 16. Kompilacja Anta zawodzi wewnątrz Eclipse
- 17. Obfuscating clojure uberjars z ProGuardem
- 18. Android Gradle kompilacja i zależność cykliczna
- 19. Kompilacja iPhone'a dla kciuka
- 20. Krzyż Kompilacja dla ramienia
- 21. Cocos2d dla systemu Android obsługujących różne rozdzielczości
- 22. Selektor systemu Android xml dla układów
- 23. Wykrywanie oryginalnego serwisu UPnP dla systemu Android
- 24. Rozpoznawanie obrazów dla systemu Android/iPhone
- 25. Określanie kliknięcia AddAction dla powiadomień systemu Android
- 26. Jak debugować natywną aplikację dla systemu Android?
- 27. Przetwarzanie dla systemu Android, korzystanie z bibliotek
- 28. Najlepsza książka programistyczna dla systemu Android 2.0?
- 29. RESTful frameworks dla systemu Android, iOS ...?
- 30. ProgressBar.setProgressDrawable nie działa dla systemu Android 2.3
czy opublikujesz kompletny build.xml? – eros
nie można znaleźć jarutils.jar – eros
Dlaczego dodałeś "lepiej wyłączyć sprawdzanie kompilacji automatycznej w menu Eclipse"? Czy jest to znacznie wolniejsze od domyślnych kreatorów Eclipse Java/Android? Jeśli tak, czy to tylko z powodu kroku Proguard, czy też proces budowania mrówek jest zły w wykrywaniu zależności? –