JDK7でandroidの署名に失敗する

Ant+AndroidでHelloWorld実機版の設定でAndroidアプリケーションを開発していたのだが、Java 7にしたら

     [exec]     pkg: /data/local/tmp/MainActivity.apk
     [exec] Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
     [exec] 1162 KB/s (39269 bytes in 0.033s)

といわれるようになってしまった。

これはapkに署名できていないときに出るエラーのはずなのだが…。

で、調べたら

The jarsigner command supports the -digestalg and -sigalg options to specify
the algorithms used for digesting (the lines in MANIFEST.MF and *.SF) and
signing (*.RSA). It would be nice if the signjar task can support it.

In fact, in JDK 7, the default algorithms have been bumped to SHA-256 and
SHA256withRSA respectively, and they are not supported on Android.
Bug 52344 ? Add -sigalg and -digestalg support to the signjar task

「JDK 7のデフォルトの暗号化とかハッシュアルゴリズムがAndroidでサポートされてないから認証に失敗してるんだ。だからオプションでこいつらを切り替えられる部分を書いたよ。」ということであった。

で、残念ながらバイナリにはなってないようなのでsvnでとってきてビルドしなくちゃならない。以下の操作を行った環境はcygwinだが、コマンドプロプトでもやってみてもすんなりビルドできた。

Installing Apache Antに従ってやるだけ。

レポジトリのありかはApache Ant – SVN Repositoriesを見る。

$ svn co http://svn.apache.org/repos/asf/ant/core/trunk ant-core
$ cd ant-core
$ sh build.sh -Ddist.dir=. dist
Buildfile: D:\home\download\ant-core\build.xml

dist:

prepare:

check_for_optional_packages:

build:
Created dir: D:\home\download\ant-core\build
Created dir: D:\home\download\ant-core\build\classes
Created dir: D:\home\download\ant-core\build\lib
Compiling 766 source files to D:\home\download\ant-core\build\classes
:
:
dist_javadocs:
Copying 1259 files to D:\home\download\ant-core\manual\api

internal_dist:
Warning: api\stylesheet.css modified in the future.
Copying 1 file to D:\home\download\ant-core\etc

BUILD SUCCESSFUL
Total time: 2 minutes 50 seconds
$ sh build.sh install
Buildfile: D:\home\download\ant-core\build.xml

install:

prepare:

check_for_optional_packages:

build:
Copying 2 files to D:\home\download\ant-core\build\classes
:
:
internal_dist:
Created dir: D:\usr\local\etc
Copying 1 file to D:\usr\local\lib
Copying 1 file to D:\usr\local\lib
Copying 22 files to D:\usr\local\lib
Copying 1 file to D:\usr\local\lib
Copying 229 files to D:\usr\local\manual
Copying 8 files to D:\usr\local
Copying 15 files to D:\usr\local\etc

BUILD SUCCESSFUL
Total time: 2 minutes 13 seconds

インストールの前に.ant.propertiesを作って少なくともant.installだけは書いておかないといけないっぽい。

ant.install=c:/cygwin/usr/local

あとはbuild.xmlに例えばこんなのを書いて、

    <setup />
    <property name="out-signed-package"
	      value="${out.dir}/${ant.project.name}.apk"/>

    <target name="deploy" depends="clean,compile,release">
      <signjar jar="${out.dir}/${ant.project.name}-unsigned.apk"
	       signedjar="${out-signed-package}"
	       alias="${key.alias}" storepass="${key.store.password}"
	       keypass="${key.alias.password}" keystore="${key.store}"
	       sigalg="MD5withRSA" digestalg="SHA1" />
      <exec executable="${adb}" failonerror="true">
	<arg value="-d" />
	<arg value="install" />
	<arg value="-r" />
	<arg path="${out-signed-package}" />
      </exec>
    </target>

いつものように

$ ant deploy

途中でなぜかdeploysignjarで止まって進まなく(なったように見えていただけで実はadb installで止まっていた)なって困ったが、adb serverを再起動したら直った。

One Trackback

  1. [...] JDK7でandroidの署名に失敗する [...]

Post a Comment

Your email is never shared.

引く

PageTop