2012-08-22 12 views
11

Estoy tratando de probar la facturación en la aplicación en mi aplicación. Tengo la identificación de facturación y del producto configurada en Play Store, pero para probar una transacción necesito firmar mi aplicación con el almacén de claves de lanzamiento, de lo contrario, falla.¿Puedo construir mi aplicación para Android como depuración pero firmar con release keystore

Estoy usando IntelliJ Idea (Ver. 11 CE) y no puedo entender cómo configurar el proyecto para compilar con el conjunto de depuración y firmar con mi almacén de claves de liberación antes de implementarlo en mi dispositivo.

Veo que puedo establecer un objetivo ant para una configuración y supongo que ese es el camino a seguir, pero como mi build.xml importa el SDK de Android/tools/ant/build.xml, no hay ningún objetivo en elegir.

Para depurar, simplemente necesito habilitar set android: debuggable = "true" en el manifiesto? ¿Alguien tiene una sugerencia para un objetivo ant que haría las cosas que necesito? ¿Una que puedo agregar a mi build.xml?

Respuesta

2

con punteros en la derecha dirección Ixx forma que terminé el establecimiento de android: depurable = "true" y el uso de la línea de comandos para crear y desplegar. A continuación, adjunte al proceso en ejecución para depurar.

Mi aplicación está configurada para compilar en la línea de comandos con un archivo ant build.xml que importa androidSDK/tools/ant/build.xml y un archivo build.properties compatible. Descubrí que cuando configuro android: debuggable = "true" y luego hago 'ant release', el proceso de compilación creará un apk depurable y lo firmará con la clave de liberación.

creé un objetivo en mi archivo build.xml que pudiera establecer para este caso llamado Set-depurable

<target name="set-debuggable" description="sets internal named property"> 
    <echo>Setting internal named property...</echo> 
    <property name="set.debuggable" value="true" /> 
</target> 

Luego, en mi objetivo -preparaciones de construcción que añade

<if> 
     <condition> 
      <isset property="set.debuggable"/> 
     </condition> 
     <then> 
      <replaceregexp 
        file="AndroidManifest.xml" 
        match="(android:debuggable=&#34;).*(&#34;)" 
        replace="\1true\2"/> 

     </then> 
     <else> 
      <replaceregexp 
        file="AndroidManifest.xml" 
        match="(android:debuggable=&#34;).*(&#34;)" 
        replace="\1false\2"/> 

     </else> 
    </if> 

Este crea mi apk depurable que está firmado con mi clave de liberación cuando uso 'ant set-debuggable release'. Luego uso 'adb install -r myApp-release.apk' para volver a instalar la nueva compilación. Luego puedo iniciar y adjuntar a la aplicación en ejecución para la depuración a través de compras en la aplicación.

Parece que tanto IntelliJ Idea como Eclipse utilizan una clave de depuración autofirmada en algún lugar de su sistema para compilar e implementar una depuración del IDE.

En retrospectiva, pude haber reemplazado la clave de depuración que el IDE creó con mi clave de liberación e intenté que la construcción firmara con esa clave (y busque la contraseña para usarla) pero el proceso de compilación anterior Me tomó muy poco tiempo para configurar y comenzar a usar. Si alguien va en esta dirección y lo pone en funcionamiento, por favor agregue un comentario a mi respuesta.

0

tengo esto en build.xml para establecer el atributo de depurable:

<condition property="build.env" value="${build.env}" else="local"> 
    <isset property="build.env" /> 
</condition> 

<!-- set debuggable=false for release and true for debug and others --> 
<condition property="isDebuggable" value="false" else="true"> 
     <equals arg1="${build.env}" arg2="release" /> 
    </condition> 
    <replaceregexp 
     file="AndroidManifest.xml" 
     match="(android:debuggable=&#34;).*(&#34;)" 
     replace="\1${isDebuggable}\2" 
     > 
    </replaceregexp> 

Dónde build.env se pasa al programa de hormigas como esto (en el caso de "liberación"):

ant <targets> -Dbuild.env=release 

con el fin de firmar, se añade esto a los archivos de propiedades:

key.store=C:/path/to/keystore/mykeystore.keystore 

aplicación de depuración tiene un almacén de claves de depuración (aunque Curren I tly no recuerdo exactamente por qué este almacén de claves es necesario) ->here 's más información sobre él. Probablemente solo tenga que usar el almacén de claves de liberación en su lugar.

-1

Intente configurar el indicador de depuración en true en su manifiesto de Android.

<application 
     android:debuggable="true" 

Debuggable Flag

1

A partir de IntelliJ IDEA 12 (no sé acerca de las versiones anteriores), se puede establecer un "almacén de claves de depuración Custom" en la faceta de Android para el módulo de nivel superior. De esta forma puede controlar cómo se firma su APK y realmente usar sus claves de liberación para la depuración desde el IDE.

+9

Intenté esto, pero ¿cómo puedo configurar la contraseña asociada al almacén de claves? Siempre obtengo 'java.io.IOException: Keystore fue manipulado, o la contraseña era incorrecta' – ffleandro

0

Teniendo en cuenta que ahora Lint desaconseja la codificación de la marca "android: debuggable" en AndroidManifest.xml, he venido con una mejor solución (al menos para mi caso). Simplemente defina un nuevo objetivo ant en su custom_rules.xml que hace todo exactamente igual que el objetivo de depuración de Android, pero firma el apk con la clave de liberación también.

<target name="build-debug" depends="-set-debug-files, -do-debug, -release-sign, -post-build" /> 

La única subtarea que necesita ser añadido es "-release-signo" antes "-post-build" y ejecute el "tobulid-debug" en lugar de "depuración" androide objetivo.

O bien, puede simplemente "-release-señal" para la dependencia de depuración de esta manera:

<target name="build-debug" depends="debug, -release-sign" /> 

pero esto no funciona para mí, porque hago algunas cosas extra en "-post-build" y necesita firmar el paquete antes de "-post-build".

Cuestiones relacionadas