Cambiar el nombre del paquete de aplicación en el paso de creación de Ant personalizado
Estoy intentando usar una compilación personalizada para volver a empaquetar mi aplicación para Android. Quiero crear una versión beta interna que pueda instalar lado a lado con mi aplicación de producción.
Esta respuesta parece exactamente lo que necesito, sin embargo, no parece funcionar.
- ¿Cómo puedo reemplazar el archivo XML en APK?
- Generar android construir con jenkins.Crear archivos .apk
- Problemas con las librerías de archivos de expansión apk de Android
- Si elimino un APK de la consola de desarrollo de Play, ¿está disponible para descargar hasta que publiqué?
- Cómo instalar / reemplazar en Android sin usar Eclipse
Aquí está la actualización de mi build.xml:
<target name="-package-resources" depends="-crunch" > <echo>Repackaging AndroidManifest.xml to ${package.manifest.name} ${out.absolute.dir}/${resource.package.file.name}</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="--auto-add-overlay" /> <arg value="-M" /> <arg path="AndroidManifest.xml" /> <arg value="-S" /> <arg path="${resource.absolute.dir}" /> <arg value="-S" /> <arg path="${android.library.reference.1}/res" /> <arg value="-A" /> <arg path="${asset.absolute.dir}" /> <arg value="-I" /> <arg path="${project.target.android.jar}" /> <arg value="-F" /> <arg path="${out.absolute.dir}/${resource.package.file.name}" /> <arg value="--rename-manifest-package" /> <arg value="${package.manifest.name}" /> </exec> </target>
Ejecutarlo parece funcionar correctamente mi nuevo código:
ant debug -Dpackage.manifest.name=com.example.test ... -package-resources: [echo] Repackaging AndroidManifest.xml to com.example.test /<mypath>/bin/<appname>.ap_ ... BUILD SUCCESSFUL
Sin embargo, cuando uso APKTool para inspeccionar el APK, el nombre del paquete en mi AndroidManifest no se ha cambiado al nuevo valor. Todo lo que parece haber sucedido es que mis rutas de actividad relativa ".MyActivity" se han ampliado a mi nombre de paquete original.
apktool d --force bin/<appname>-debug.apk
¿Alguien sabe lo que estoy haciendo mal? He mirado todas las otras respuestas Stackoverflow y la mayoría parece un poco anticuado. Estoy construyendo con Android SDK Tools Revisión 21.1.0, para minSdkVersion 8.
Actualización : Como @athor comenta debajo de su respuesta, mi suposición acerca de inspeccionar el AndroidManifest.xml es incorrecta. Para probar esto realmente necesita intentar instalarlo en lugar de ver el XML descompilado.
- Telegram Messenger Running Project aún se encuentra: Lamentablemente, Telegram ha parado
- Proyecto Android: Problema de exportación Lanzamiento cancelado! Proguard devuelto con el código de error 1. Consulte consola
- ¿Cómo se instala un archivo APK en el emulador de Android?
- Error de "intento no se puede resolver a un tipo" en eclipse
- No se pudo encontrar Library.apk!
- Ver el contenido del archivo apk
- Error al ejecutar aapt dump badging - Google Play Store
- Eclipse dice que mis proyectos Android contienen errores, pero no hay
Esta es la forma en que lo hago (trabajando)
<target name="-package-resources" depends="-crunch" > <!-- only package resources if *not* a library project --> <echo message="Current Package name: ${app.custompackagename}" /> <do-only-if-not-library elseText="Library project: do not package resources..." > <aapt androidjar="${project.target.android.jar}" apkfolder="${out.absolute.dir}" assets="${asset.absolute.dir}" buildType="${build.target}" command="package" debug="${build.is.packaging.debug}" executable="${aapt}" ignoreAssets="${aapt.ignore.assets}" libraryPackagesRefid="project.library.packages" libraryRFileRefid="project.library.bin.r.file.path" libraryResFolderPathRefid="project.library.res.folder.path" manifest="${out.manifest.abs.file}" manifestpackage="${app.custompackagename}" nocrunch="${build.packaging.nocrunch}" previousBuildType="${build.last.target}" resourcefilename="${resource.package.file.name}" resourcefilter="${aapt.resource.filter}" versioncode="${version.code}" versionname="${version.name}" > <res path="${out.res.absolute.dir}" /> <res path="${resource.absolute.dir}" /> <!-- <nocompress /> forces no compression on any files in assets or res/raw --> <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw --> </aapt> </do-only-if-not-library> </target>
La línea manifestpackage = "$ {app.custompackagename}" es la clave.
Si realmente quieres que tus cambios se reflejen en tu AndroidManifest.xml, podrías crear un destino personalizado que sea algo como esto (utilizo un objetivo similar a este mismo):
<target name="repackage"> <!-- Replaces all of the references to the old package name in files in the "src" directory --> <replace dir="src" value="${new.package}" token="${old.package}" summary="true"/> <!-- renames the src folders --> <move toDir="${new.package.dir}"> <fileset dir="${old.package.dir}"/> </move> <!-- replaces the package name in the manifest --> <replace file="AndroidManifest.xml" value="${new.package}" token="${old.package}" summary="true"/> </target>
Podría hacer una construcción de hormigas reempaquetada a un paquete de depuración, desplegada y luego devuelta al paquete de producción (o viceversa).
- Fragment no creó una vista
- Android: Ejecutar código sólo en la primera ejecución y en cada actualización posterior