pudo - variable path linux
cómo establecer la ruta hacia donde el comando aapt add agrega el archivo (2)
Estoy usando la herramienta aapt para eliminar algunos archivos de diferentes carpetas de mi apk. Esto funciona bien
Pero cuando quiero agregar archivos al apk, el comando aapt tool add no me permite especificar la ruta hacia donde quiero que se agregue el archivo, por lo tanto, puedo agregar archivos solo a la carpeta raíz del apk. Esto es extraño porque no creo que los desarrolladores nunca deseen agregar archivos a una subcarpeta de la apk (carpeta de res, por ejemplo). ¿Es esto posible con aapt o con cualquier otro método? Porque eliminar archivos de cualquier carpeta funciona bien, y agregar archivos solo funciona para la carpeta raíz de la aplicación. No se puede usar para ninguna otra carpeta.
Gracias
La herramienta aapt retiene la estructura de directorio especificada en el comando agregar, si desea agregar algo a una carpeta existente en una aplicación, simplemente debe tener una carpeta similar en su sistema y debe especificar cada archivo para agregar una lista completa del directorio. Ejemplo
$ aapt list test.apk
res/drawable-hdpi/pic1.png
res/drawable-hdpi/pic2.png
AndroidManifest.xml
$ aapt remove test.apk res/drawable-hdpi/pic1.png
$ aapt add test.apk res/drawable-hdpi/pic1.png
El pic1.png que se añadirá a la voluntad reside en una carpeta en el directorio de trabajo actual de la terminal res / drawable-hdpi /, espero que haya respondido a su pregunta
De hecho, hay un error en aapt
que hará esto aleatoriamente imposible. La forma en que se supone que debe funcionar es como dice la otra respuesta: las rutas se mantienen, a menos que pase -k
. Veamos cómo se implementa esto:
La bandera que controla si se ignora la ruta es mJunkPath
:
bool mJunkPath;
Esta variable está en una clase llamada Bundle
, y está controlada por dos accesadores:
bool getJunkPath(void) const { return mJunkPath; }
void setJunkPath(bool val) { mJunkPath = val; }
Si el usuario especificó -k
en la línea de comando, se establece en true
:
case ''k'':
bundle.setJunkPath(true);
break;
Y, cuando los datos se agregan al archivo, se verifican:
if (bundle->getJunkPath()) {
String8 storageName = String8(fileName).getPathLeaf();
printf(" ''%s'' as ''%s''.../n", fileName, storageName.string());
result = zip->add(fileName, storageName.string(),
bundle->getCompressionMethod(), NULL);
} else {
printf(" ''%s''.../n", fileName);
result = zip->add(fileName, bundle->getCompressionMethod(), NULL);
}
Desafortunadamente, la única instancia de Bundle
utilizada por la aplicación se asigna en main
en la pila, y no hay inicialización de mJunkPath
en el constructor, por lo que el valor de la variable es aleatorio; sin una forma de establecerlo explícitamente en false
, en mi sistema I (aparentemente determinista) no puedo agregar archivos en las rutas especificadas.
Sin embargo, también puedes usar zip
, ya que una APK es simplemente un archivo Zip y la herramienta zip
funciona bien.
(Para el registro, no he presentado la solución trivial para esto como un parche para Android, sin embargo, si alguien más quisiera, el mundo probablemente sería un lugar mejor. Mi experiencia con el proceso de envío de código de Android fue tener que soportar una Mecanismo de presentación increíblemente complejo que al final demoró seis meses para que alguien me respondiera, en algunos casos con modificaciones menores que podrían haberse realizado en su final, su proceso de envío no fue tan terriblemente complejo. Dado que hay una muy fácil solución a este problema, no lo considero lo suficientemente importante como para molestar con todo eso de nuevo.)