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.

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.

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).

  • Cargas lentas en el emulador de Android
  • ¿Cómo generar firmado y unsigned APK usando gradle?
  • Apk instalado en el dispositivo pero no lo veo en las aplicaciones
  • Instalación de la aplicación de Android a través del servicio OTA
  • Phonegap modo no debug y firma con clave de licencia
  • Android: cómo obtener el nombre del archivo apk mediante programación?
  • Jarsigner no es reconocido comando interno o externo
  • Los paquetes de desgaste de Android no funcionan
  • No se puede crear apk: El número de referencias de métodos no puede superar los 64K
  • Distinguir entre Tablet y teléfono inteligente en ICS
  • Android ADB Shell no activa los paquetes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.