LoginSignup
0
0

More than 5 years have passed since last update.

Corona SDKでAndroid用ビルドをした時にインストールエラー103が出た時の対応

Last updated at Posted at 2016-04-29

とりあえず自分がハマった問題のメモ。

経緯

  1. 今までCoronaSDKでAndroidアプリを作成していた
  2. ある時MacOSXを再インストールして開発環境をイチから再構築した。
  3. その後、CoronaSDKでアプリのアップデートを作成して公開した
  4. しかし、古いAndroid端末(Android4.0)でインストールエラー103が出るとの報告がきた。

原因の推測

OSX El Capitanをクリーンインストールした時にJava1.7をインストールしていた。古いAndroidをサポートするためにはJava1.6でビルドしないと問題になることが多いっぽい。

対応1

とりあえずJava1.6にダウングレードすることにした。

1.まず、以下のページを参考にJava1.7以降をアンインストール
https://machow2.com/how-to-uninstall-java-from-el-capitan/

OSX_Terminal
$sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane

$sudo rm -fr /System/Library/Java/JavaVirtualMachines/jdk1.x.x_xx.jdk
or
$sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.x.x_xx.jdk

2.次に、以下からOSX用のJava1.6をダウンロードしてインストール
https://support.apple.com/kb/dl1572?locale=en_US

これで解決すると思ったら・・・

Android build failed (256)!?

CoronaSDKでリリース用のAndroid用ビルドをしようとしたところ「Android build failed (256)」が発生。Corona Terminalのログを見るとどうやら「jarsigner returned: 1」が原因らしい。いろいろ調べたところ、jarsignerは1.6と1.7以降で処理が違うらしく、この辺の処理を考慮する必要があるらしい。

対応2

いろいろ試行錯誤した結果、以下の手順でエラーが消えた・・・?

  1. Corona SimulatorでAndroid用ビルドをするときにbrowseボタンからkeystoreを再度選択。
  2. パスワードを入力
  3. ビルド

なんだかよくわかりませんがパスワードを入力した時のJDKとビルドをするときのJDKのバージョンが異なるとjarsignerがうまく動かないっぽいです。なので、JDKを変更した時は一度keystoreを再選択してパスワードを入力し直しましょう。たぶん。

対応3

上記でOKかとおもいきや、いつの間にかエラー256が復活するようになり、今度はパスワードを入れなおしてもうまくいかない現象に当たりました・・・。

jarsignerがエラーを返すというのまでは同じなので、Corona Simulatorが呼んでいるビルドスクリプトを少し追ってみました。自分の場合は、どうもkeysotoreで使用した暗号化アルゴリズムとbuild.xmlで指定しているアルゴリズムが異なるのが問題っぽいです。JDK1.7のjarsignerだとこの辺を上手く捌いてくれるっぽいのですが、JDK1.6だとなんかエラーになるっぽい?でも昔は上手くビルドできてたような気がするのだが・・・謎。

$keytool -v -list -keystore <アプリのキーストアファイル名>
(略)
     署名アルゴリズム名: SHA1withDSA
build.xml
/Applications/CoronaSDK/Corona Simulator.app/Contents/Resources/build.xml

        <exec executable="jarsigner"
              dir="${TEMP_DIR}"
              failonerror="false"
              resultproperty="sign.apk.via.command.line.result">
            <arg value="-signedjar"/>
            <arg value="${APK_APP_NAME}-signed.apk"/>
            <arg value="-keystore"/>
            <arg value="${KS}"/>
            <arg value="-storepass"/>
            <arg value="${KP}"/>
            <arg value="-sigalg"/>
            <arg value="MD5withRSA"/> <!-- ここ -->
            <arg value="-digestalg"/>
            <arg value="SHA1"/>
            <arg value="${APK_APP_NAME}-unsigned.apk"/>
            <arg value="${KA}"/>
        </exec>

とりあえず、いいのかどうかわかりませんが、上記build.xmlの-sigalgの引数を署名アルゴリズム名と同じにしてみました(自分の場合はSHA1withDSAで)。そうしたところようやくエラーも消え、古いAndroidでも動くようになりました。ただし、Corona Simulatorではなく、Corona Terminalでないとなぜか上手くいきません・・・。まあ、でも動いたからいいや。ふぅ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0