web-dev-qa-db-fra.com

Comment puis-je spécifier l'emplacement du magasin de clés de débogage pour les versions Android de débogage et de débogage?

Est-il possible de spécifier l'emplacement d'un magasin de clés de débogage créé par l'utilisateur lors de la création du débogage .apk '(<project-name>-debug.apk) avec ant debug? Je ne vois que la possibilité de spécifier l'emplacement du magasin de clés de publication.

Je souhaite partager le fichier de clés de débogage sur plusieurs PC sans les copier sur celui qui est placé dans le répertoire ".Android". Le magasin de clés de débogage pourrait par exemple résider dans le référentiel de code source. Mais j'ai besoin d'un moyen de dire à ant où trouver le magasin de clés de débogage.

39
Huupke

Vous pouvez supprimer la signature de l'apk final et la signer à nouveau. C'est juste une construction de débogage afin d'éviter le zipalign (au moins je n'ai aucun problème dans ma construction).

Copiez votre magasin de clés dans un fichier debug.keystore du projet et ajoutez les éléments suivants dans ant.properties

debug.key.store.password=Android
debug.key.alias.password=Android
debug.key.store=../debug.keystore
debug.key.alias=androiddebugkey

Et ajoutez ce qui suit dans votre build.xml

<target name="-post-build" if="${build.is.packaging.debug}">
    <!-- Remove the signature of the debug build, and sign it again with our own debug keystore -->
    <delete dir="tmp" includeemptydirs="true" failonerror="false" />
    <mkdir dir="tmp" />
    <unzip src="${out.final.file}" dest="tmp" />
    <delete dir="tmp/META-INF" includeemptydirs="true" verbose="true" failonerror="true" />
    <delete file="${out.final.file}" failonerror="true" />
    <Zip destfile="${out.final.file}" basedir="tmp" />
    <delete dir="tmp" includeemptydirs="true" failonerror="false" /> 

    <echo level="info">Signing final DEBUG apk with a common signature...
        signapk
            input="${out.final.file}"
            output="${out.packaged.file}"
            keystore="${debug.key.store}"
            storepass="${debug.key.store.password}"
            alias="${debug.key.alias}"
            keypass="${debug.key.alias.password}"
    </echo>

    <signapk
        input="${out.final.file}"
        output="${out.packaged.file}"
        keystore="${debug.key.store}"
        storepass="${debug.key.store.password}"
        alias="${debug.key.alias}"
        keypass="${debug.key.alias.password}"/>

    <delete file="${out.final.file}" failonerror="true" />
    <move file="${out.packaged.file}" tofile="${out.final.file}" failonerror="true" />

</target>
4

Vous devriez pouvoir spécifier le magasin de clés à utiliser avec ces propriétés. 

key.store=/path/to/key.keystore
key.alias=alias
key.store.password=pass
key.alias.password=pass

Il suffit de passer les propriétés à Ant.

[EDIT] À partir de la documentation à http://developer.Android.com/guide/publishing/app-signing.html#setup

Les outils de génération Android fournissent un mode de signature de débogage qui facilite le développement et le débogage de votre application, tout en respectant les exigences du système Android pour la signature de votre .apk. Lorsque vous utilisez le mode débogage pour créer votre application, les outils du SDK appellent Keytool pour créer automatiquement un fichier de clés de débogage. Cette clé de débogage est ensuite utilisée pour signer automatiquement le fichier .apk, vous n'avez donc pas besoin de signer le package avec votre propre clé.

Les outils du SDK créent le magasin de clés de débogage avec des noms/mots de passe prédéterminés:

  • Nom du magasin de clés: "debug.keystore"
  • Mot de passe du keystore: "Android"
  • Alias ​​de clé: "androiddebugkey"
  • Mot de passe clé: "Android"
  • CN: "CN = Android Debug, O = Android, C = US"

Si nécessaire, vous pouvez modifier l'emplacement/le nom du fichier de clés de débogage/clé ou fournir un fichier de clés de débogage personnalisé pour utiliser. Cependant, tout magasin de clés/clés de débogage personnalisé doit utiliser les mêmes noms et mots de passe de magasin de clés/clés que la clé de débogage par défaut (comme décrit ci-dessus). (Pour ce faire dans Eclipse/ADT, accédez à Windows> Préférences> Android> Construire.)

19
codemonkey

Autant que je sache, pour ce faire, vous devez remplacer la cible "-do-debug". J'aimerais savoir s'il existe un moyen plus élégant. J'ai ajouté ceci à mon build.xml

<property name="build.is.signing.debug" value="false"/>
<target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package">
    <!-- only create apk if *not* a library project -->
    <do-only-if-not-library elseText="Library project: do not create apk..." >
        <sequential>
            <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />

            <!-- Signs the APK -->
            <echo>Signing final apk...</echo>
            <signjar
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

            <!-- Zip aligns the APK -->
            <zipalign-helper
                    in.package="${out.unaligned.file}"
                    out.package="${out.final.file}" />
            <echo>Debug Package: ${out.final.file}</echo>
        </sequential>
    </do-only-if-not-library>
    <record-build-info />
</target>
<import file="${sdk.dir}/tools/ant/build.xml" />
11
heathkit
  • Créez un nouveau dossier vide dans votre espace de travail Eclipse.

  • Copiez le fichier "debug.keystore" à partir de son emplacement standard ("c: /Users/YourAcount/.Android/" sous Windows, par exemple) dans ce nouveau répertoire.

  • Configurez Eclipse pour utiliser ce nouveau répertoire/fichier pour tous les APK de débogage (Eclipse -> Fenêtre -> Préférences -> Android -> Construire -> Fichier de clés de débogage personnalisé ".

4
Harald Wilhelm

Une méthode simple que vous pouvez utiliser comme solution de contournement (ce qui est particulièrement agréable dans notre système de CI où de nombreux projets sont construits et où un toucher doux est requis lorsque vous traitez avec des magasins de clés) consiste à exécuter la construction du débogage à l'aide de AAPT pour supprimer le contenu du dossier META-INF et exécutez jarsigner pour le signer avec votre debug.keystore personnalisé.

En pseudo-script, cela ressemble à: # Génération de débogage Ant normale ant débogage

# Remove default debug signing
aapt remove YourDebugApp.apk META-INF/MANIFEST.MF
aapt remove YourDebugApp.apk META-INF/CERT.SF
aapt remove YourDebugApp.apk META-INF/CERT.RSA

# Use Jarsigner and the custom debug.keystore. 
# NOTE: This assumes you explicitly called out MD5withRSA as your signing algorithm 
# when you generated the key; drop the -sigalg tag if you did not.
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -storepass Android YourDebugApp.apk

# Verify signing
jarsigner -verify YourDebugApp.apk
4
Russell Collins

D'après ce que j'ai vu jusqu'à présent, aucune solution existante ne fonctionne avec la dernière version de fourmi.

La seule façon primitive de le faire est de remplacer le dossier debug.keystore par défaut par son dossier par défaut.

L'emplacement par défaut est le dossier .Android. Habituellement, dans C:\Utilisateurs\NOM_UTILISATEUR.Android Sous Windows, vous pouvez y accéder en utilisant% USERPROFILE% .Android.

Ce que j'ai fait est de créer un script PowerShell pour sauvegarder le fichier par défaut, copier le fichier de magasin de clés dans l'emplacement par défaut, créer l'apk de débogage signé, supprimer mon fichier de magasin de clés, restaurer le fichier d'origine.

Faites-moi savoir si vous avez besoin de plus d'informations ici.

0
Guy

J'ai trouvé l'autre solution ..

Ajoutez les éléments suivants dans $ {PROJECT_HOME} /custom_rules.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules">
    <!-- @Override -->
    <target name="-set-debug-mode" depends="-setup">
        <!-- record the current build target -->
        <property name="build.target" value="debug" />

        <if>
            <condition>
                <and>
                    <istrue value="${project.is.testapp}" />
                    <istrue value="${emma.enabled}" />
                </and>
            </condition>
            <then>
                <property name="build.is.instrumented" value="true" />
            </then>
            <else>
                <property name="build.is.instrumented" value="false" />
            </else>
        </if>

        <!-- whether the build is a debug build. always set. -->
        <property name="build.is.packaging.debug" value="true" />

        <!-- signing mode: debug -->
        <property name="build.is.signing.debug" value="false" />

        <!-- Renderscript optimization level: none -->
        <property name="renderscript.opt.level" value="${renderscript.debug.opt.level}" />

    </target>

    <!-- @Override -->
    <!-- Builds debug output package -->
    <target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package">
        <property name="out.unsigned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unsigned.apk"/>
        <move file="${out.packaged.file}" tofile="${out.unsigned.file}"/>
        <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />

        <!-- Signs the APK -->
        <echo level="info">Signing final apk...</echo>
        <signapk
            input="${out.unsigned.file}"
            output="${out.unaligned.file}"
            keystore="${out.absolute.dir}/../debug.keystore" <!-- your debug.keystore path -->
            storepass="Android"
            alias="androiddebugkey"
            keypass="Android"/>

        <!-- only create apk if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not create apk..." >
            <sequential>
                <zipalign-helper in.package="${out.unaligned.file}" out.package="${out.final.file}" />
                <echo level="info">Debug Package: ${out.final.file}</echo>
            </sequential>
        </do-only-if-not-library>
        <record-build-info />
    </target>

</project>
0
Sinhyeok