如何为Android蚂蚁调试版本指定调试密钥库的位置?

Huu*_*pke 39 ant debugging android keystore

在创建debug .apk的s(<project-name>-debug.apk)时,是否可以指定自己创建的调试密钥库的位置ant debug?我只看到指定发布密钥库的位置的可能性.

我想在多台PC上共享调试密钥库,而不是将它们复制到放在".android"目录中的那个.调试密钥库可以例如驻留在源代码库中.但是我需要一种方法来告诉ant在哪里找到调试密钥库.

cod*_*key 19

您应该能够指定要与这些属性一起使用的密钥库

key.store=/path/to/key.keystore
key.alias=alias
key.store.password=pass
key.alias.password=pass
Run Code Online (Sandbox Code Playgroud)

只需将属性传递给Ant即可.

[编辑]来自http://developer.android.com/guide/publishing/app-signing.html#setup上的文档

Android构建工具提供了一种调试签名模式,使您可以更轻松地开发和调试应用程序,同时仍满足Android系统对.apk签名的要求.使用调试模式构建应用程序时,SDK工具会调用Keytool来自动创建调试密钥库和密钥.然后,此调试密钥用于自动签署.apk,因此您无需使用自己的密钥对包进行签名.

SDK工具使用预定的名称/密码创建调试密钥库/密钥:

  • 密钥库名称:"debug.keystore"
  • 密钥库密码:"android"
  • 关键别名:"androiddebugkey"
  • 密码:"android"
  • CN:"CN = Android Debug,O = Android,C = US"

如有必要,您可以更改调试密钥库/密钥的位置/名称,或提供要使用的自定义调试密钥库/密钥.但是,任何自定义调试密钥库/密钥必须使用与默认调试密钥相同的密钥库/密钥名称和密码(如上所述).(要在Eclipse/ADT中执行此操作,请转到Windows>首选项> Android> Build.)

  • 使用ant构建命令行时不使用Eclipse首选项,这是我的问题.构建调试时省略了key.store. (3认同)
  • 它似乎不适用于调试,但仅适用于发布.你确定这适用于签署调试apk吗? (2认同)

hea*_*kit 11

据我所知,为了做到这一点,你需要覆盖"-do-debug"目标.不过,我想知道是否有更优雅的方式.我把它添加到我的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" />
Run Code Online (Sandbox Code Playgroud)


Ign*_*spo 4

您可以删除最终 apk 的签名并重新签名。这只是一个调试版本,因此可以避免 zipalign (至少我的版本没有问题)。

将您的密钥库复制到项目中的文件 debug.keystore 并在 ant.properties 中添加以下内容

debug.key.store.password=android
debug.key.alias.password=android
debug.key.store=../debug.keystore
debug.key.alias=androiddebugkey
Run Code Online (Sandbox Code Playgroud)

并在 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>
Run Code Online (Sandbox Code Playgroud)