androbookで作り、Android Marketに掲載されている作品が、QVGA端末のMarketに出てこない件について調査。
マニフェスト問題だろう、というあたりはあったので、とりあえず適当にandrobookで作り、apk入手。
# apktool d パッケージ名
で、展開して、AndroidManifest.xmlの内容を確認。
想定通り、supports-screens設定がされていない。
参考: Y.A.Mの雑記帳: Android multi screen 対応 より
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
とりあえず、AndroidManifest.xmlを編集して、上記を追加。
あと、「android:versionCode」の値を増やして更新版であることを認識させる。
次に、「apktool b ディレクトリ名 新apk」でapkファイルを作ってみる。
でも、このapkファイルは署名してないということで、marketにアップロードできなかった。
じゃぁ、日本語リソース追加手法と同様にすればいいのかな?
ディレクトリ名/build/apkにあるAndroidManifest.xmlとresources.arscだけ置き換えればいいかな?と思ったので・・・
「apktool b ディレクトリ名」でbuildディレクトリを作ったあと、
「zip -u 元々のapkファイル名 -0 AndroidManifest.xml resources.arsc」を実行してみる。
あと、Android Marketにアップしてみたらzipalign実行しろと言われたので「zipalign -v 4 元apk 新apk」。
で、これでできた新apkファイルをアップロードしてみると、ちゃんとQVGA端末のMarketで出てくるアプリができあがった。
でも、このapkファイルをインストールしようとしたら、「Unknown reason: -102」というエラーでインストールが失敗しましたけどね。
まぁ、ここによると改変したのが原因っぽいエラーコードになってますね
102: Installation failed: Invalid package.
The application cannot be installed properly because some of the package contents are invalid or missing.
とりあえず検証自体はできたので、okかなっと
-------------------------------------------------------
で、もうちょっと、ちゃんとしてみようかな?と思って、継続
/usr/java/jdk~/bin/keytool -genkey -v -keystore my-release-key.keystore -alias 名前 -keyalg RSA -keysize 2048 -validity 10000
でkeyを作成。
そのあと、
apktool b ディレクトリ名 apk名
でapkファイル作成
その後、
/usr/java/jdk~/bin/jarsigner -verbose -keystore my-release-key.keystore apkファイル 名前
でapkに署名
そのあと、jarsigner -verbose -verify apkファイル名で検証
で、zipalignで整えてMarketにアップロード。
・・・いままでの署名と違う、と言われる
仕方がないのでもうちょっと手を入れる
どうせなので、アプリケーション名も自分のにしちゃえ
・AndroidManifest.xmlのpackage=を自分の独自のものに変更
・smaliディレクトリ内部にあるディレクトリ構造を、上記の自分独自のものに変更
・「~.smali」ファイル内にあるpackage名の部分をsedを使って置き換え
・apktool bでapk作成
・jarsignerで署名
・zipalignで最適化
・・・パッケージファイルが無効です。ですか・・・
もしかして「net.~.androbook.001」なんてパッケージ名が不可?
「net.~.androbook.book001」という名前で再チャレンジ→インストール成功!!