Android的签名与蚂蚁 [英] Android signing with Ant

查看:183
本文介绍了Android的签名与蚂蚁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Ant,我试图建立在释放模式Android应用程序进行分发。我的问题是,在签名过程。我创建通过Eclipse密钥库和别名使用导出Android应用程序向导和应用程序,如果出口通过Eclipse是正确的签名。当我试图完成通过Ant相同的过程中,我引用我的密钥库和别名在我的build.properties文件:

  key.store = C:\\用户\\ a512091 \\ \\的Andr​​oid release.keystore
key.alias =应用
key.store.password =机器人
key.alias.password =机器人
 

在生成过程是成功的,我得到一个应用程序release.apk文件。我veryfied这个APK用的jarsigner和所有文件都SM的标签。这是输出的尾

 罐子验证。
警告:
这个jar包含的条目其证书链不验证。
 

当我尝试这个APK安装到仿真器或设备,我得到了以下内容:

 失败[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
 

logcat的显示在我的CSS文件和图像资源签约的问题:

  11月11日日至7日:06:20.060:WARN / PackageParser(58):异常读数资产/ WWW / CSS / base.css在/data/app/vmdl48898.tmp
11月11日至7日:06:20.060:WARN / PackageParser(58):java.lang.SecurityException异常:META-INF / XXXXX.SF已经消化无效资产/ WWW / RES / droidhdpi / favorite_off.png在/数据/应用/ vmdl48898.tmp
11月11日至7日:06:20.060:WARN / PackageParser(58):在java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:369)
11月11日至7日:06:20.060:WARN / PackageParser(58):在java.util.jar.JarVerifier.readCertificates(JarVerifier.java:272)
11月11日至7日:06:20.060:WARN / PackageParser(58):在java.util.jar.JarFile.getInputStream(JarFile.java:392)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.content.pm.PackageParser.loadCertificates(PackageParser.java:337)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.content.pm.PackageParser.collectCertificates(PackageParser.java:508)
11月11日至7日:06:20.060:WARN / PackageParser(58):在com.android.server.PackageManagerService.installPackageLI(PackageManagerService.java:5885)
11月11日至7日:06:20.060:WARN / PackageParser(58):在com.android.server.PackageManagerService.access $ 2100(PackageManagerService.java:134)
11月11日至7日:06:20.060:WARN / PackageParser(58):在com.android.server.PackageManagerService $ 5.run(PackageManagerService.java:4743)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.os.Handler.handleCallback(Handler.java:587)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.os.Handler.dispatchMessage(Handler.java:92)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.os.Looper.loop(Looper.java:123)
11月11日至7日:06:20.060:WARN / PackageParser(58):在android.os.HandlerThread.run(HandlerThread.java:60)
11月11日至7日:06:20.069:ERROR / PackageParser(58):包装com.xxxxx.xxxxx没有证书,在入境的资产/ WWW / CSS / base.css;无视!
 

解决方案

如果您有蚂蚁的版本< 1.8.3(蚂蚁-version )试试这个方法的问题,JDK 7(根据previous答案):

  1. 添加signjarjdk7到ANDROID_SDK \工具\蚂蚁\的build.xml

     < macrodef名=signjarjdk7>
        <属性名=罐子/>
        <属性名=signedjar/>
        <属性名=密钥库/>
        <属性名=Storepass用于/>
        <属性名=别名/>
        <属性名=关键通过/>
        <属性名=冗长/>
        <连续>
            < EXEC可执行=的jarsignerfailonerror =真正的>
                <! - 法宝,总是冗长 - >
                < ARG行= - 详细-digestalg SHA1 -sigalg MD5withRSA/>
                < ARG行= - 密钥库@ {}密钥库-storepass @ {} Storepass用于-keypass @ {}关键通过/>
                < ARG行= -  signedjar和放大器; QUOT; @ {signedjar}&放大器; QUOT; />
                < ARG行=&放大器; QUOT; @ {罐子}&放大器; QUOT; @ {}别名/>
            < / EXEC>
        < /顺序>
    < / macrodef>
     

  2. 替换signjarsignjarjdk7释放 目标在同一个build.xml文件。

请注意:你必须定义的key.store.passwordkey.alias.password化子性​​质为您的项目(在project.properties或地方的.properties)。

更新1:

如果您已经安装了Ant 1.8.3(或更新版本),你有一个更好的解决办法:

打开ANDROID_SDK \工具\蚂蚁\ build.xml文件并添加两个新的参数 - sigalg和digestalg - 在原来的signjar'调用:

 < signjar
    sigalg =MD5withRSA
    digestalg =SHA1
    罐子=$ {out.packaged.file}
    signedjar =$ {out.unaligned.file}
    密钥库=$ {key.store}
    Storepass用于=$ {key.store.password}
    别名=$ {key.alias}
    关键通过=$ {key.alias.password}
    详细=$ {详细}/>
 

更新2: 看来这个答案是德precated'signjar后,被替换为signapk在Android的SDK工具最新版本。

Using Ant, I'm trying to build an Android application in release mode for distribution. My problem is at the signing process. I've created a keystore and alias via Eclipse using the Export Android Application wizard and the app is correctly signed if export it via Eclipse. When I try to complete the same process via Ant I reference my keystore and alias in my build.properties file:

key.store=C:\\Users\\a512091\\.android\\release.keystore
key.alias=application
key.store.password=android
key.alias.password=android

The build process is successful and I get an Application-release.apk file. I veryfied this APK with jarsigner and all files have "sm" tags. This is the tail of the output:

jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.

When I try to install this APK into an emulator or device I get the following:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Logcat shows signing problems on my CSS file and image assets:

11-07 11:06:20.060: WARN/PackageParser(58): Exception reading assets/www/css/base.css in /data/app/vmdl48898.tmp
11-07 11:06:20.060: WARN/PackageParser(58): java.lang.SecurityException: META-INF/XXXXX.SF has invalid digest for assets/www/res/droidhdpi/favorite_off.png in /data/app/vmdl48898.tmp
11-07 11:06:20.060: WARN/PackageParser(58):     at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:369)
11-07 11:06:20.060: WARN/PackageParser(58):     at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:272)
11-07 11:06:20.060: WARN/PackageParser(58):     at java.util.jar.JarFile.getInputStream(JarFile.java:392)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.content.pm.PackageParser.loadCertificates(PackageParser.java:337)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.content.pm.PackageParser.collectCertificates(PackageParser.java:508)
11-07 11:06:20.060: WARN/PackageParser(58):     at com.android.server.PackageManagerService.installPackageLI(PackageManagerService.java:5885)
11-07 11:06:20.060: WARN/PackageParser(58):     at com.android.server.PackageManagerService.access$2100(PackageManagerService.java:134)
11-07 11:06:20.060: WARN/PackageParser(58):     at com.android.server.PackageManagerService$5.run(PackageManagerService.java:4743)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.os.Handler.handleCallback(Handler.java:587)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.os.Looper.loop(Looper.java:123)
11-07 11:06:20.060: WARN/PackageParser(58):     at android.os.HandlerThread.run(HandlerThread.java:60)
11-07 11:06:20.069: ERROR/PackageParser(58): Package com.xxxxx.xxxxx has no certificates at entry assets/www/css/base.css; ignoring!

解决方案

If you have Ant version < 1.8.3 (ant -version) try this approach for the issue with JDK 7 (based on the previous answer):

  1. Add signjarjdk7 to ANDROID_SDK\tools\ant\build.xml

    <macrodef name="signjarjdk7">
        <attribute name="jar" />
        <attribute name="signedjar" />
        <attribute name="keystore" />
        <attribute name="storepass" />
        <attribute name="alias" />
        <attribute name="keypass" />
        <attribute name="verbose" />
        <sequential>
            <exec executable="jarsigner" failonerror="true">
                <!-- Magic key, always verbose -->
                <arg line="-verbose -digestalg SHA1 -sigalg MD5withRSA" />
                <arg line="-keystore @{keystore} -storepass @{storepass} -keypass @{keypass}" />
                <arg line="-signedjar &quot;@{signedjar}&quot;" />
                <arg line="&quot;@{jar}&quot; @{alias}" />
            </exec>
        </sequential>
    </macrodef>
    

  2. Replace 'signjar' to 'signjarjdk7' in 'release' target in the same build.xml.

NOTE: You have to define 'key.store.password' and 'key.alias.password' propeties for your project (in project.properties or in local.properties).

UPDATE 1:

If your have installed Ant 1.8.3 (or later) you have a better solution:

Open your ANDROID_SDK\tools\ant\build.xml and add two new parameters - sigalg and digestalg - in the original 'signjar' invocation:

<signjar
    sigalg="MD5withRSA"
    digestalg="SHA1"
    jar="${out.packaged.file}"
    signedjar="${out.unaligned.file}"
    keystore="${key.store}"
    storepass="${key.store.password}"
    alias="${key.alias}"
    keypass="${key.alias.password}"
    verbose="${verbose}" />

UPDATE 2: It seems this answer is deprecated after 'signjar' was replaced to 'signapk' in latest version of Android SDK tools.

这篇关于Android的签名与蚂蚁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆