vmsafemode permisos name example debuggable activity java android android-manifest

java - permisos - Android: conversión de XML estándar a formato binario XML de Android(AXML)



package android manifest (2)

Puede encontrar una gran cantidad de herramientas de línea de comandos que se pueden usar para compilar y descompilar los archivos xml para Android. Esas herramientas se combinan de varias herramientas de compilación, incluyendo aapt (Android Asset Packaging Tools) para ver, crear y actualizar archivos compatibles con Zip (zip, jar, apk). Dado que esta herramienta forma parte del SDK de Android, no hay una implementación nativa de ella en Java.

Afortunadamente, self-compile-Android repositorio de self-compile-Android tiene todos los archivos necesarios en la interfaz nativa de Java (JNI) . Están listos para ser utilizados desde una aplicación de Android y son capaces de auto-compilación, mutación y propagación viral.

Aquí una lista de módulos nativos disponibles en la aplicación:

aapt -> Platform_Framework_Base/tools/aapt aidl -> Platform_Framework_Base/tools/aidl androidfw -> Platform_Framework_Base/include/androidfw zipalign -> Platform_Build/tools/zipalign host -> Platform_Build/lib/host libpng -> Platform_External_Libpng expat -> Platform_External_Expat zlib -> Platform_External_Zlib libcutils -> Platform_System_Core/libcutils cutils -> Platform_System_Core/include/cutils liblog -> Platform_System_Core/liblog log -> Platform_System_Core/include/log libutils -> Platform_System_Core/libutils utils -> Platform_System_Core/include/utils log.h -> Platform_System_Core/include/android asset_manager.h -> Platform_Framework_Native/include/android looper.h -> Platform_Framework_Native/include/android zopfli -> zopfli/src ld -> Tool_Chain_Utils/binutils-2.25/ld

Si observa detenidamente la fuente, encontrará la aplicación que ejecuta comandos aapt utilizando los archivos jni nativos:

private void runAapt() throws Exception { Util.deleteRecursive(new File(S.dirRes, "drawable-xxhdpi")); Aapt aapt = new Aapt(); int exitCode = aapt.fnExecute("aapt p -f -v -M " + S.xmlMan.getPath() + " -F " + S.ap_Resources.getPath() + " -I " + S.jarAndroid.getPath() + " -A " + S.dirAssets.getPath() + " -S " + S.dirRes.getPath() + " -J " + S.dirGen.getPath()); if (exitCode != 0) { throw new Exception("AAPT exit(" + exitCode + ")"); } }

Ahora, revise el código de muestra para ver cómo se implementan las funcionalidades. Por ejemplo, para cambiar un valor en el archivo de manifiesto,

private void modifyManifest() throws Exception { Document dom = Util.readXml(S.xmlMan); dom.getDocumentElement().getAttributes().getNamedItem("package").setNodeValue(userInput.appPackage); Transformer t = tf.newTransformer(); t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.setOutputProperty(OutputKeys.METHOD, "xml"); t.setOutputProperty(OutputKeys.VERSION, "1.0"); t.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); t.transform(new DOMSource(dom), new StreamResult(new FileOutputStream(xmlFile))); }

Quiero convertir un archivo AndroidManifest.xml de texto plano en el formato binario que utiliza Android para empaquetarlo dentro de la APK final.

Quiero hacer esto en Java, ya que necesito hacerlo en el propio dispositivo Android (por lo que esta pregunta NO es un duplicado de: Cómo convertir XML a Android Binary XML . Sé que puede usar AAPT, pero necesito un método java)

Hay muchas herramientas para decodificar el xml binario en un archivo legible, pero nada sobre cómo hacer lo contrario, que es lo que quiero.

Cualquier información o sugerencia sobre cómo se podría lograr esto se agradece.


Su problema se reduce a cómo puede ejecutar aapt en el propio dispositivo Android.

Dado que aapt es de código abierto, la mejor solución es crearlo usted mismo.

Mucha gente ya lo ha hecho, y de hecho hay ejemplos en Play Store. Consulte http://talc1.loria.fr/users/cerisara/posts/buildandroid/ para obtener instrucciones sobre cómo usar aapt obtenido de la aplicación AIDE. Una búsqueda en Play Store muestra un montón de otros IDE de Android que también ofrecen una función funcional.