¿Cómo cargar dinámicamente archivos de Android y cómo comprimir el tamaño del apk?
1. Introducción al kit de herramientas (dirección del proyecto:/liyu Ming 1978/nativelibcompression)
El conjunto de herramientas de compresión de Android proporciona un método extremadamente simple que puede almacenar más que Android en la aplicación. El archivo Zip so original tiene una relación de compresión más alta (las versiones posteriores también pueden admitir la compresión de paquetes jar cargados dinámicamente y archivos de recursos del juego) y también proporciona un método para actualizar y descargar archivos comprimidos en la red dentro de la aplicación, de modo que. la aplicación puede La parte de almacenamiento en la nube reduce así el tamaño de la aplicación.
Principio de compresión: la herramienta de compresión utilizará el algoritmo LZMA para comprimir todo en el directorio de afirmación. Cuando la aplicación se inicia por primera vez, se descomprimirá en el directorio privado de la aplicación.
2. La composición del conjunto de herramientas
El conjunto de herramientas es un programa de instalación, por lo que se recomienda instalarlo en la ruta predeterminada. Si se instala en archivos de programa, pueden ocurrir algunas excepciones porque win7 puede tener problemas de permisos de lectura y escritura.
Después de la instalación, podrá ver cuatro directorios, todos los cuales contienen código fuente.
Los cuatro directorios después de la instalación son los siguientes
Entre ellos, ApkLibComrepss es el código fuente del programa de línea de comandos de Java. En el subdirectorio bin de este directorio, puede encontrar ApkCompress.jar, que se puede utilizar para convertir archivos apk normales en archivos apk comprimidos.
CompressDemo es un código de muestra. Puede consultar este código para comprender cómo integrar el SDK comprimido.
DecRawso es un SDK de compresión. Su proyecto de desarrollo debe hacer referencia a este SDK y realizar algunas modificaciones en el código fuente para integrar la función de compresión.
RawsoCreator es una herramienta de conversión en Windows. Generalmente no es necesaria y solo se usa durante la depuración y el desarrollo secundario del SDK de compresión.
En tercer lugar, cómo integrar el SDK comprimido
Abra la demostración de compresión. Usaremos este proyecto como ejemplo para ilustrar cómo integrar el SDK de compresión.
1. En primer lugar, es necesario presentar el proyecto DecRawso.
2. Entonces necesitas llamar a DecRawso. NewInstance se coloca en la ubicación inicial del proyecto. En este proyecto de demostración, este método se llama en OnCreate de MainActivity.java. Este método crea una instancia de descompresión única. Nota: Este método es asincrónico, por lo que se puede pasar un mensaje indicando que el controlador acepta la decodificación asincrónica. Si también se pasa el parámetro showProgress=true, se generará un cuadro de diálogo de progreso en el SDK para bloquear el proceso principal. Decrawso.newinstance(mcontext, null, false) está en desuso. De esta manera, no se aceptan mensajes y no hay ningún diálogo de progreso. La descompresión se completará automáticamente en segundo plano y se bloqueará al aplicar la primera carga hasta que se complete la descompresión en segundo plano. Entonces, si el tiempo de bloqueo es demasiado largo, es posible que la aplicación deje de responder.
3. Cómo modificar el archivo de carga: ¿Cambiar todo System.loadlibrary(***) a? System.load(DecRawso.GetInstance().GetPath(" * * * ");
Para versiones nuevas, este paso se puede omitir y el SDK modificará la ruta de carga de libaray del sistema. En circunstancias normales , actualizaciones del sistema No habrá ningún problema (el código no está estandarizado y es poco probable que modifique el nuevo código con la actualización de Android. Si es conveniente, todavía usamos la carga del sistema (declawso.getinstance().getpath (). "* *)).
Después de estos sencillos pasos, el SDK comprimido se ha integrado en el proyecto.
Cuarto, cómo comprimir y publicar el APK
Utilice la herramienta ApkCompress.jar para comprimir y publicar el APK. Es una herramienta de línea de comandos.
El uso general de este comando es: ejecutar compressapk . jar -a c:/my/test apk -k c:/key * * # # alias-x86 (también puede ejecutar java -jarComPressApk.jar).
-a va seguido del nombre de la ruta del apk, que puede no ser la ruta completa.
Después de -k está el archivo de firma [alias de contraseña del almacén de claves], no es necesario que la clave sea un nombre de ruta completo (si no se escribe ningún nombre, el valor predeterminado es CERT).
-x86 significa que los archivos de la biblioteca x86 deben almacenarse en la nube, seguido de /cloudrawso_x86.
Después de ejecutar el comando, test_Compressialign. Se generará el apk. Esta apk es una apk comprimida.
Modo de desarrollo y modo de compresión del verbo (abreviatura de verbo)
Para facilitar el desarrollo, durante el proceso de desarrollo (después de modificar el código fuente para admitir la compresión), se puede descomprimir. Y el apk también puede funcionar normalmente. El SDK del paquete comprimido determinará automáticamente si existe un paquete comprimido. Si no hay ningún paquete comprimido, la ruta cargada se restaurará a la ruta predeterminada de Android. Entonces, el desarrollo más conveniente es integrar el código primero, desarrollarlo como antes (sin compresión) y comprimir el apk al publicar.
Llamadas mixtas de verbos intransitivos X86 y bibliotecas ARM
Durante el proceso de implementación y desarrollo, puede haber algunas bibliotecas de terceros que no tengan versiones x86. Por lo general, los ISV no colocan bibliotecas de terceros en el directorio x86 y pueden producirse escasez de bibliotecas en las operaciones reales. En el caso de bibliotecas insuficientes, el SDK comprimido descomprimirá automáticamente el paquete comprimido arm en el dispositivo x86 para evitar bibliotecas insuficientes. (En realidad, sólo se cargan las bibliotecas que faltan, y los archivos de biblioteca inconsistentes no necesariamente son bibliotecas que faltan).
Pero obviamente, esto conducirá a la ineficiencia. Si las bibliotecas de terceros y x86 no hacen referencia entre sí en absoluto (es decir, JNI llama a estas bibliotecas en la capa java, no en la capa nativa), entonces puede copiar la biblioteca de terceros arm en x86. directorio, para que no haya escasez de inventario. Por supuesto, esta situación dará lugar a copias redundantes de la biblioteca arm, lo que haría que el paquete comprimido fuera más grande en la situación de compresión zip anterior, pero en la nueva situación de compresión LZMA, el tamaño de la biblioteca no aumentará en absoluto, porque LZMA compresión debido al diccionario Si es relativamente grande, puede intentar comprimir varios archivos relacionados. Si los archivos son idénticos, la compresión de LZMA será esencialmente la misma que para un solo archivo.
Si está satisfecho, haga clic en el botón derecho para aceptar la respuesta. Si tiene alguna pregunta, haga clic en Preguntar.
¡Espero que mi respuesta te sea útil y espero que la adoptes!
~O(∩_∩)O~