12

我正在尝试在我的应用中测试应用内计费。我在 Play 商店中设置了计费和产品 ID,但要测试交易,我需要使用我的发布密钥库签署我的应用程序,否则它会失败。

我正在使用 IntelliJ Idea (Ver. 11 CE) 并且不太清楚如何配置项目以使用调试集构建并在部署到我的设备之前使用我的发布密钥库进行签名。

我看到我可以为配置设置一个 ant 目标,我假设这是要走的路,但由于我的 build.xml 导入了 Android SDK /tools/ant/build.xml,因此没有任何目标可供选择。

要调试,我只需要在清单中启用 set android:debuggable="true" 吗?有人对可以做我需要的事情的蚂蚁目标有建议吗?我可以添加到我的 build.xml 中吗?

4

6 回答 6

2

通过Ixx中正确方向的指针,我最终设置了 android:debuggable="true" 并使用命令行来构建和部署。然后附加到正在运行的进程进行调试。

我的应用程序设置为在命令行使用 ant build.xml 文件构建,该文件导入 androidSDK/tools/ant/build.xml 和支持的 build.properties 文件。我发现当我设置 android:debuggable="true" 然后执行 'ant release' 时,构建过程将创建一个可调试的 apk 并使用发布密钥对其进行签名。

我在我的 build.xml 文件中创建了一个目标,我可以为此案例设置一个名为 set-debuggable 的目标

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

然后在我的 -pre-build 目标中我添加了

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

这将创建我的可调试 apk,当我使用“ant set-debuggable release”时,它使用我的发布密钥签名。然后我使用“adb install -r myApp-release.apk”重新安装新版本。然后我可以启动并附加到正在运行的应用程序以通过应用内购买进行调试。

似乎 IntelliJ Idea 和 Eclipse 都在系统某处使用自签名调试密钥来从 IDE 构建和部署调试 apk。

事后看来,我可能已经能够用我的发布密钥替换 IDE 创建的调试密钥,并尝试让构建使用该密钥签名(并找到使用密钥的密码)但上面的构建过程花了我很少的时间是时候设置和开始使用了。如果有人朝这个方向发展并让它发挥作用,请在我的回答中添加评论。

于 2012-09-06T15:22:49.393 回答
1

从 IntelliJ IDEA 12 开始(不知道以前的版本),您可以在 Android 方面为顶级模块设置“自定义调试密钥库”。通过这种方式,您可以控制 APK 的签名方式并实际使用您的发布密钥从 IDE 进行调试。

于 2013-01-02T23:55:04.820 回答
0

Given that Lint now advises against hardcoding of "android:debuggable" flag in AndroidManifest.xml I've come with a better solution (at least for my case). Just define a new ant target in your custom_rules.xml that does everything exactly the same as the android debug target does, but signs the apk with release key as well.

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

The only subtask that needs to be added is "-release-sign" before "-post-build" and then run your "bulid-debug" instead of android "debug" target.

Or, you can just "-release-sign" to debug dependency like this:

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

but this doesn't work for me, because I do some extra stuff on "-post-build" and need to sign the package before "-post-build".

于 2013-05-29T14:17:24.613 回答
0

IntelliJ 默认使用 .android/debug.keystore 文件对应用程序的调试版本进行签名。您可以使用您的发布密钥库更改此文件或将您的发布证书导入到 debug.keystore 文件。我已在http://www.denizoguz.com/2013/01/12/failure-install_parse_failed_inconsistent_certificates/上为此准备了分步说明

于 2013-01-12T01:20:57.087 回答
0

我在 build.xml 中有这个来设置可调试属性:

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

像这样将 build.env 传递给 ant 程序的地方(在“发布”的情况下):

ant <targets> -Dbuild.env=release

为了签名,您将其添加到属性文件中:

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

调试应用程序有一个调试密钥库(尽管我目前不记得确切为什么需要这个密钥库)->这里有更多信息。可能您只需要使用发布密钥库。

于 2012-08-22T17:13:15.597 回答
-1

尝试在您的 android 清单中将 debuggable 标志设置为 true。

 <application
        android:debuggable="true"

可调试标志

于 2012-08-30T03:28:25.327 回答