Red de conocimiento informático - Material del sitio web - Cómo cargar dinámicamente archivos Android y cómo comprimir el tamaño del apk

Cómo cargar dinámicamente archivos Android y cómo comprimir el tamaño del apk

Hola, estaré feliz de responder a tu pregunta.

I. Introducción al conjunto de herramientas (dirección del proyecto: /liyuming1978/NativeLibCompression)

El conjunto de herramientas de compresión de Android proporciona una forma extremadamente concisa de almacenar archivos en su aplicación. Es más alto que el Zip original de Android (las versiones posteriores también pueden admitir la carga dinámica comprimida (las versiones posteriores también pueden admitir paquetes jar comprimidos cargados dinámicamente y archivos de recursos de juegos) y también proporciona una forma de descargar archivos comprimidos desde la actualización de red en la aplicación. El método permite que la aplicación almacene parte del SO en la nube, reduciendo así el tamaño de la aplicación.

Principio de compresión: la herramienta de compresión utilizará el algoritmo LZMA para comprimir todo el SO en el directorio de afirmación. y la aplicación lo comprimirá por primera vez. Extráigalo al directorio privado de la aplicación al iniciar

El conjunto de herramientas consta de las siguientes partes

El conjunto de herramientas es un instalador y es se recomienda instalarlo en la ruta predeterminada porque está instalado en Win7. Puede haber problemas de permisos de lectura/escritura en los archivos del programa, lo que genera algunas excepciones

Después de la instalación, puede ver cuatro directorios que contienen el código fuente

Después de la instalación. Los cuatro directorios son los siguientes

Uno de ellos es ApkLibComrepss, que 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. Para archivos comprimidos

CompressDemo es un código de muestra, puede consultar este código para comprender cómo integrar el SDK de compresión. >

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 para Windows. generalmente no es necesario y solo se usa para la depuración del SDK de compresión y el desarrollo secundario.

Cómo integrar el SDK de compresión

Abra CompressDemo, usaremos este proyecto como ejemplo. explique cómo integrar el SDK de compresión

1. Primero, debe presentar el proyecto DecRawso.

2. Luego, debe llamar a DecRawso.NewInstance en la ubicación inicial del proyecto. En este proyecto de demostración, OnCreate llama a este método en MainActivity.java. Se creará una instancia única de DecRawso. Nota: este método es asincrónico, por lo que puede pasar un controlador para recibir el mensaje de finalización de decodificación asincrónica, si también lo pasa. showProgress=true, se generará un cuadro de diálogo de progreso en el SDK para bloquear el proceso principal. No se recomienda utilizar el método DecRawso.NewInstance(mContext, null, false); este método no acepta ningún mensaje y no tiene un cuadro de diálogo de progreso. La descompresión se completará automáticamente en segundo plano y se bloqueará cuando se inicie la aplicación por primera vez. cargado hasta que la descompresión se realice en segundo plano. Por lo tanto, si se bloquea durante demasiado tiempo, es posible que la aplicación deje de responder.

3 Modifique el método de carga de archivos: cambie todo System.loadlibrary(***) a System.load(DecRawso.GetInstance().GetPath("***")); p>

En la nueva versión, este paso se puede omitir.

Si se omite, el SDK modificará la ruta de carga del sistema libaray. En circunstancias normales, no habrá problemas con las actualizaciones del sistema (código informal, existe una pequeña probabilidad de que sea un código nuevo modificado durante la actualización de Android). es conveniente, utilice System.load( DecRawso.GetInstance().GetPath("***"));

4.load(DecRawso.GetInstance().GetPath("***") );

Para versiones nuevas, este paso se puede omitir. El SDK modificará la ruta de carga de libaray. En términos generales, no habrá problemas con las actualizaciones del sistema (código informal, existe una pequeña probabilidad de uso). actualización de Android para modificar el nuevo código). Si es conveniente, use System.load(DecRawso .GetInstance()."***"))

Después de estos sencillos pasos, el SDK comprimido se ha integrado. en el proyecto.

4. Cómo comprimir y publicar APK

Utilice ApkCompress.jar para comprimir y publicar APK. Esta herramienta es una herramienta de línea de comandos. El uso general de este comando es: ejecute ComPressApk.jar -a en la línea de comando C:/my/test.apk -k c:/key *** ### alias-x86 (también puede ejecutar java -jarComPressApk.jar)

Utiliza ApkCompress.jar para comprimir y publicar el APK. jar)

-a seguido del nombre de la ruta del apk, que puede no ser la ruta completa

-k seguido del archivo de firma [key storepasskeypass alias name], la clave puede no ser el nombre de la ruta completa (si no está escrito, el nombre predeterminado es CERT)

-x86 significa que necesita almacenar el archivo de la biblioteca x86 en la nube, seguido del nombre del archivo en el formato /cloudrawso _x86

Después de ejecutar el comando, se generará test_CompressAlign.apk. Esta apk es una apk comprimida

V. Modo de desarrollo y compresión

Para facilitar el desarrollo, durante el proceso de desarrollo (después de modificar el código fuente para admitir la compresión), no es necesario. comprimirlo. Ejecute el apk normalmente. El SDK comprimido determinará automáticamente si hay un paquete comprimido. De lo contrario, la ruta de carga se restaurará a la ruta predeterminada de Android. Por lo tanto, la forma más conveniente de desarrollar es integrar el código primero, desarrollarlo de la misma manera que el código original (sin comprimirlo) y luego comprimirlo al lanzar el apk.

Sexto, mezcla de X86 y uso de bibliotecas ARM

Durante el proceso de desarrollo, pueden aparecer algunas bibliotecas de terceros que no tienen versiones x86. Por lo general, los ISV no colocarán bibliotecas de terceros ARM en el directorio x86. En términos generales, los ISV no colocarán bibliotecas de terceros de ARM en el directorio x86, lo que puede provocar que la biblioteca se pierda durante el tiempo de ejecución real. En el caso de que falten bibliotecas, el SDK de compresión descomprimirá automáticamente el paquete arm en dispositivos x86 para evitar que falten bibliotecas. (Una biblioteca faltante solo es una biblioteca faltante si realmente está cargada; los archivos de biblioteca inconsistentes no son necesariamente una biblioteca faltante)

Sin embargo, esto obviamente conducirá a una ineficiencia, por lo que si no hay una biblioteca cruzada. referencia entre la biblioteca de terceros y la biblioteca x86 (es decir, estas bibliotecas se llaman desde la capa java usando JNI y no tienen referencia cruzada con la capa local), puede copiar la biblioteca de terceros de arm al x86 directorio, para que no aparezca El caso de bibliotecas faltantes.

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 el caso de compresión zip anterior, pero en el nuevo caso de compresión LZMA, el tamaño de la biblioteca no aumentará en absoluto, porque LZMA compresión debido a El diccionario es relativamente grande y varios archivos asociados se pueden comprimir tanto como sea posible. Si los archivos son exactamente iguales, el archivo comprimido LZMA es básicamente el mismo que un solo archivo.

Si está satisfecho, haga clic en el botón derecho para aceptar la respuesta. Si aún tiene preguntas, haga clic para preguntar.

Espero que mi respuesta sea útil para usted y para mí. Espero que lo aceptes!

~O(∩_∩)O~