¿Alguien puede compartir con muestra/ofuscación simple tarea ANT para Android? Siempre que tenga APK completo y solo necesito aprobar * class hru Proguard y luego preparar * .dex para compilar APKANT compilación para Android Proguard ofuscación
Respuesta
que he encontrado:
- Get Proguard - copia en el directorio proguard.jar conocido (por ejemplo MiProyecto/Proguard)
- Prepare proguard.cfg -describing qué y cómo optimizar el/obfuscate. Este proceso se describe a fondo en la Proguard manual
- Preparar siguiente build.xml de ANT (o algo bajo como éste) - gracias a el gran this guy
ACTUALIZACIÓN build.xml completa
<?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>
Esta tarea ANT debe agregarse a las tareas de constructores (Propiedades/Creadores) de Eclipse después del creador de Java y antes del creador de paquetes de Android.
Prensa "Build All" (que es mejor fuera de verificación Generar automática en el menú de Eclipse)
El proceso de compilación de Android primero compila los archivos fuente de Java (.java) a los archivos de clase Java (.class) , luego convierte estos archivos de clase en código Dalvik (classes.dex), y finalmente empaqueta este código Dalvik en un archivo APK.
ProGuard lee y escribe archivos de clase Java, por lo que debe insertarse en esta interconexión entre el paso de compilación y el de conversión. No lee ni escribe el código Dalvik en sí, por lo que no puede funcionar en el archivo APK.
El Android SDK documentation on ProGuard explica cómo habilitar el paso de ofuscación en Ant build para android-9. En resumen, debe agregar una línea "proguard.config = proguard.cfg" al archivo default.properties, y luego ejecutar "ant release".
No es exactamente lo que estaba preguntando ... Estoy compilando Android APK desde el interior de IDE (Intellij) y antes de la compilación o después de la compilación puedo comenzar una tarea de compilación ANT arbitraria. ¿Es posible de alguna manera definir una tarea ANT separada para eso? – barmaley
Dado que el paso ProGuard debe ejecutarse en el medio de la canalización de compilación, no es posible simplemente agregar una tarea Ant antes o después de la compilación IDEA. Deberá crear un script Ant build.xml para todo el proceso de compilación y modificarlo. El comando de Android de Android SDK crea un archivo Ant para usted. Alternativamente, IDEA puede crear un archivo Ant para usted (Build> Generate Ant build ...). El complemento IDEA Android para IDEA ya parece crear el archivo Ant utilizando el SDK de Android. A continuación, puede ejecutar Ant build desde IDEA (barra de menú a la derecha, suponiendo que Ant plugin esté habilitado). –
El proceso de ofuscación proGuard necesita archivos .class para que no pueda iniciar una Ant antes de la compilación IDE (.java) o después (.dex empaquetado).
echar un vistazo a este post donde se explica cómo añadir el paso PROGUARD en su construcción Ant mundial:
http://www.androidengineer.com/2010/07/optimizing-obfuscating-and-shrinking.html
Si realmente desea utilizar la acumulación IDEA, puede intentar lo siguiente.
- Después de la compilación IDEA, descomprimir el apk con apktool.
- convertir los archivos a .dex .class con dex2jar
- Run PROGUARD ya que el puesto anterior espectáculo que
sentimos que no te adjunto los enlaces de apktool y dexjar pero que a mí novato No puedo publicar más de un hipervínculo. solución
Lo sé, pero solo necesito build.xml para Ant :) – barmaley
Atención: la respuesta de barmaley es desde el año 2011, y parece ser válida para la versión Android SDK Tools 8 o 10.
he intentado adaptar esta solución utilizando herramientas SDK de Android versión 18.1.1, pero están fracasando en el error: taskdef class com.android.ant.SetupTask cannot be found
Incluso tualmente, lo que hice fue lo siguiente:
rm build.xml
android update project -p .
- Si usted no tiene las herramientas del SDK en su camino, tendrá que utilizar la ruta completa de la herramienta androide, por ejemplo, en Windows: C: \ Android \ SDK \ tools
Esto creó un build.xml fresco, que es compatible con las actuales herramientas de SDK, y parecen automatizar una gran parte del trabajo manual que se describe en la respuesta del barmaley.
Después de eso pude ejecutar ant release
, que se encargó de compilar y ofuscar el archivo .apk resultado de la caja.
Con el fin de automatizar la ofuscación a través de hormiga, tendrá que:
- Enable Proguard obfuscator (obviamente)
- Crear un archivo
ant.properties
y llenarlo con los parametros key.store apropiadas (ver this SO reply para más detalles)
Tiene razón, hubo algunos cambios desde 2011. – barmaley
- 1. Uso de Proguard con Android sin ofuscación
- 2. Ofuscación Proguard está rompiendo simplexml
- 3. Ofuscación de Proguard y métodos genéricos
- 4. Ofuscación de clojure uberjars con ProGuard
- 5. Ofuscación de Java - ProGuard/yGuard/other?
- 6. Proguard nombre personalizado para clases, miembros y ofuscación de parámetros
- 7. Android Proguard Duplicate Definition
- 8. cómo usar proguard en android 2.3
- 9. Cómo desactivar todas las funciones de Android ProGuard, excepto la ofuscación?
- 10. Ofuscación del código de Android con ProGuard ... ¿cómo sabe uno que se ha ofuscado?
- 11. ¿Cómo puedo excluir .jar externo de la ofuscación por Proguard (proyecto de Android)?
- 12. Proguard rompe Android WebView, ¿por qué?
- 13. ¿Vale la pena usar Proguard con Android?
- 14. Usando Proguard para Android en Eclipse tengo el error
- 15. Proguard no ofuscar aplicaciones Android
- 16. Uso de ProGuard con Android
- 17. ¿Cómo convertir un proyecto de Android Eclipse para usar Ant para compilación?
- 18. Proguard con OrmLite en Android
- 19. Android ProGuard "java.lang.nosuchfielderror: Tostada" excepción
- 20. Android Proguard skip jar externo
- 21. Error al trabajar con la biblioteca de Jackson después de la ofuscación usando Proguard
- 22. ¿Puedo usar la compilación nativa como ofuscación Java
- 23. ¿Cómo construyo un proyecto de Android usando Ant? (IntelliJ IDE)
- 24. ¿Cómo configurar ProGuard en Eclipse al exportar una aplicación de Android firmada y ofuscada?
- 25. Android y Proguard: ¿cómo ofuscar, pero no optimizar ningún código?
- 26. Android Proguard no elimina todos los mensajes de registro
- 27. Método de ofuscación con la cláusula throws
- 28. ¿Cómo uso UglifyJS de una compilación Ant?
- 29. Generando archivo de compilación Ant para un proyecto en eclipse
- 30. compilación Ant no copia los recursos
¿publicarías el build.xml completo? – eros
no se puede encontrar jarutils.jar – eros
¿Por qué agregó "es mejor desactivar el control de compilación automática en el menú de Eclipse"? ¿Es esto significativamente más lento que los constructores Eclipse Java/Android predeterminados? Si es así, ¿es solo por el paso de Proguard, o es el proceso de compilación de ant malo para detectar dependencias? –