12月 28, 2012 - 41 Comments - Android, Application, IME, Modding -

POBox 5.3をXperia以外の端末でも動くようにする。(root不要)

POBox 5.3で五十音キーボードと手書きの軌跡を有効化し、ソニーチェックを無効化した状態。

POBox 5.3で五十音キーボードと手書きの軌跡を有効化し、ソニーチェックを無効化した状態。

すでに某所で公開しましたが、一応。ちなみにWindows向けです。

POBox 5.3はAndroid 4.0/ICS 以上向けです。それ以下の端末では動作しません。(2.3/GB,2.2/CCなど)

この記事でPOBox5.4について扱っています。タブレット向けレイアウトも追加されていますが、個人的にはタブレット向けにはPOBox5.3の方がいいと思います。

準備するもの(ツール編):

  1. やる気(結構大事。
  2. いろいろやる知識ちょこっと。
  3. Grepできるもの(ここではGrep and Replaceを使います。)
  4. テキストエディタ(TeraPadでもサクラエディタでもEmEditorでもUTF-8対応のものならおk。ただし、Grep and Replaceを使う場合は不要。)
  5. 展開ソフト(7-zipやWinRARなど。)
  6. apktool(android-apktool | Google Project Hosting)
  7. JarSigner
  8. zipalign(某所ではやり忘れてました;)
  9. JDK(英Oracle、パスの設定はここを参考にしてみてください。一応パックにはバッチを含めてあります。)

3,4,5,9については各自インストールしておいてください。

6,7,8については別途記事を書きます。たぶん。とりあえずパック(#2012/01/10 23:10更新)しておきました(Windows向け)。

あるいはAPK Multi-Toolを使うと6,7,8は簡略化できます。

 

準備するもの(データ編):

  1. POBox5.3関係のファイル(POBox 5.3 | 所感 ~android~
  2. apkを展開(デコード)するのに必要なファイル(SemcGenericUxpResVL.apk)

手順:

1.適当なフォルダを作成し、コマンドプロンプトで開く。

適当なフォルダを今回はC:\Temp\POBoxとします。必要に応じて各自読み替えても結構です。

ついでにいろいろ展開。

コマンドプロンプトやGrep and Replaceなどは指示があるまで終了しないでください。

Windowsキー+R」を押下しファイル名を指定して実行を開き「cmd」入力しOKをクリック。

ファイル名を指定して実行

すると

コマンドプロンプト

こんなんが出てくるので、

mkdir C:\Temp\POBox
C:
cd C:\Temp\POBox
start .

この4行をコピペして「Enter」を押すとこんな感じになると思います。

コピペ後のコマンドプロンプト

エクスプローラーで「C:\Temp\POBox」が開かれたはずなのでそこに先ほどダウンロードした、APK-modding-tools.zipを展開。

続いて、POBox_5.3cwm.zipを7zipやWinRARなどで開きsystemの下のlibというフォルダ、appフォルダの中身も展開。

手順1の段階でのフォルダの中身

手順1の段階でのフォルダの中身
最新のzipではzip.exeとtr.exe、set_java.batが加わっています。

 

 

 2.展開してlibを配置、文字列の置換

何も言わずにコマンドプロンプトに以下4行をコピペして「Enter

zip -d POBoxSknSelector.apk META-INF/*
apktool if SemcGenericUxpResVL.apk Sony2012
apktool d -b -r -t Sony2012 JapaneseIME.apk POBox53
xcopy C:\Temp\POBox\lib C:\Temp\POBox\POBox53\lib\armeabi\

その後、Grep and Replaceを開き

ファイルの名前に「*」、

含まれる文字列に「/system/lib/」、

探す場所に「C:\Temp\POBox\POBox53\lib\armeabi\」、

置換に「/data/data/com.sonyericsson.android.pobox/lib/」と入力します。

また、動作設定をクリックし、「保存時バックアップ作成」を無効化します。

 

Grep and Replace

入力が終わった状態。

次に、「検索」をクリックすると「置換」が押せるようになるので押します。

Grep and Replace

追記した手順を行うと、IWnnEngine.smali、IMorphemeService.smaliがリストアップされます。

すると、このようになるので、「リストのファイルを一括置換」を選択。

Grep and Replace

 

保存確認が3回出るので全部「はい」を選択します。

 

追記: 実行する際は最新のパックを用いてください。

左下の検索設定をクリックし、「サブフォルダも探す」にチェックを入れ有効化します。

その後、探す場所に「C:\Temp\POBox\POBox53\smali」を入れ再度検索、置換、リストのファイルを一括置換を選択します。(暫く時間がかかると思います。)

また、改行コードを修正するために次のコードをコマンドプロンプトにコピペし「Enter

set libPath=C:\Temp\POBox\POBox53\lib\armeabi
tr -dIO \r < %libPath%\lib_dic_en_USUK.conf.so > %libPath%\lib_dic_en_USUK.conf.tmp
tr -dIO \r < %libPath%\lib_dic_ja_JP.conf.so > %libPath%\lib_dic_ja_JP.conf.tmp
tr -dIO \r < %libPath%\lib_dic_morphem_ja_JP.conf.so > %libPath%\lib_dic_morphem_ja_JP.conf.tmp
move /y %libPath%\lib_dic_en_USUK.conf.tmp %libPath%\lib_dic_en_USUK.conf.so
move /y %libPath%\lib_dic_ja_JP.conf.tmp %libPath%\lib_dic_ja_JP.conf.so
move /y %libPath%\lib_dic_morphem_ja_JP.conf.tmp %libPath%\lib_dic_morphem_ja_JP.conf.so

 

 

3.smaliの書き換え

ここでもGrep and Replaceを使います。

探す場所に「C:\Temp\POBox\POBox53\smali」と入力しておいてください。

引数はやるたびに違うので参考程度にとどめてください。

・ソニーチェックの無効化

該当ファイル:

  • OpenWnn.smali
  • IWnnLanguageSwitcher.smali
  • ControlPanelJaJp.smali

含まれる文字列に「Ljava/lang/String;->startsWith(Ljava/lang/String;)Z」を入力して検索。

その後、上記のファイル名をクリックするとウィンドウの右下に内容が表示されるため、赤い下線が引かれた行の引数(ひきすう)を一致させます。この際、どちらに合わせてもよいのですが、ここでは後ろの引数に合わせます。1つのファイルが終わり次のファイルを選ぶと保存確認が出るのでOKを選んでください。3つめが終わったあとは保存するためどれかファイル名をクリックしてください。

Grep and Replace

 

・50音キーボードと手書きの軌跡有効化

該当ファイル:

  • POBoxConfig.smali

Lcom/sonyericsson/android/pobox/preferences/POBoxPreference;->setEnable50Letter(ZZ)V
Lcom/sonyericsson/android/pobox/preferences/POBoxPreference;->setEnableHandwritingFading(ZZ)V

この2行には2つではなく3つの引数が含まれるので後半の2つを一致させてください。

たとえば、

invoke-virtual {v1, v0, v2}, Lcom/sonyericsson/android/pobox/preferences/POBoxPreference;->setEnable50Letter(ZZ)V

これを

invoke-virtual {v1, v2, v2}, Lcom/sonyericsson/android/pobox/preferences/POBoxPreference;->setEnable50Letter(ZZ)V

こう。

 

・存在しないリソースへの参照を書き換え

該当ファイル、書き換え回数:

  • IWnnImeJaJp.smali ×2
  • SkinData.smali ×3

含まれる文字列で「

0x206

」を検索します。

IWnnImeJaJp.smaliの場合は、

    invoke-virtual {p0}, Lcom/sonyericsson/android/pobox/core/IWnnImeJaJp;->getResources()Landroid/content/res/Resources;

    move-result-object v5

    const/high16 v6, 0x206

    invoke-virtual {v5, v6}, Landroid/content/res/Resources;->getColor(I)I

    move-result v5

この「invoke-direct」から「move-result v5」までを次の1行に置き換えます。

    const/16 v5, 0xffffffff

このとき「move-result v5」の「v5」という引数と、置き換えたあと「const/16 v5, 0xffffffff」の「v5」という引数が一致することに注意してください。これを2ヶ所。

 

 2013/01/06追記

コメントからこうならない場合も有ると発覚したので上記のようなヶ所が見当たらなかった場合はコメントも見てみてください。
手順を確認していて勘違いに気づきました。間違った修正箇所を掲載していたようです。すみません。したがって次の画像の書き換え範囲は間違っています。

 

Grep and Replace

 

SkinData.smaliの場合は、

    const/high16 v2, 0x206

    invoke-virtual {p1, v2}, Landroid/content/res/Resources;->getColor(I)I

    move-result v0

これを、次の1行に置き換えます。

    const/16 v0, 0xffffffff

先ほどと同じで、引数を一致させるように気をつけてください。3ヶ所。

 

・存在しないフォントの置き換え

該当ファイル:

  • KeyboardView.smali

SoMARegular.ttf→Roboto-Regular.ttf

SoMABold.ttf→Roboto-Bold.ttf

このようになるように置き換えます。それぞれ2ヶ所の計四ヶ所。

 

 4.apkのビルド、署名

 Grep and Replaceはこの段階になったら終了してください。

・apkのビルド

コマンドプロンプトに次のコマンドをコピペし「Enter

apktool b POBox53 POBox5.3.apk

 ・apkの署名

この作業はとても厄介なのでしっかりと確認してください。

コマンドプロンプトに次の行をコピペして「Enter

keytool -genkey -v -sigalg SHA1withRSA -keyalg RSA -keystore test.keystore -alias testkey -validity 10000

すると、キーストアのパスワード、姓名、組織名、都市名、州名、国番号を問われるので答えていきます。答えを入力、「Enter」という流れです。

パスワード入力中は入力中の文字は表示されません。

必要になった際に使えるようにしておくためキーストアパスワードは忘れないでください。

国番号を答えたあと、 「[いいえ]:」とひょうじされるので「y」と入力し「Enter

その次に再度「Enter」と押すと署名に必要なキーができあがります。

 

コマンドプロンプトに次の行をコピペして「Enter

jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -verbose POBox5.3.apk testkey

キーストアのパスワードを聞かれるので入力して「Enter

 

次の行も同じです。

jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -verbose POBoxSknSelector.apk testkey

 

・apkの最適化(zipalign)

次の2行をコピペして「Enter

zipalign -v 4 POBox5.3.apk POBox5.3_aligned.apk
zipalign -v 4 POBoxSknSelector.apk POBoxSknSelector_aligned.apk

 

 5.インストール

さすがにここは書かなくてもいいかなと思ったのですが一応書いておきます。

ここまででapkの改変そのものは作業が終了しています。

改変済みなのとインストールした方がよいapkは

  • POBox5.3_aligned.apk
  • POBoxSknSelector_aligned.apk
  • POBoxSknMono.apk

 

・提供元不明のアプリ

Android端末の設定を開きます。

セキュリティをタップし、提供元不明のアプリにチェックを入れます。すると警告が表示されるのでしっかりと読んだ上で「OK」をタップします。

提供元不明のアプリ

TabUIなので通常の表示とは違いますがこんな感じです。

 

・インストール

adbが使える環境なら話は簡単で、端末をPCにつなぎ次の3行をコマンドプロンプトにコピペ、「Enter」で完了です。

adb install POBoxSknSelector_aligned.apk
adb install POBoxSknMono.apk
adb install POBox5.3_aligned.apk

問題はそういった環境がない場合です。

たとえばPCと端末をつなぎ、SDカード上に「apk」など適当なフォルダを作り、前述のapkを転送します。

そこに「ES ファイルエクスプローラー」などを使ってアクセスし、インストールしたいapkをタップすればインストール可能です。

 

・有効化

ほかのIMEを使ったことがある人は知っていると思いますが、POBoxもその例に外れず、インストールしただけでは使うことができません。

そこで何をすればよいかというと、先ほどのようにAndroidの設定を開きます。

言語と入力をタップし、POBox Touch (日本語)にチェックを入れます。ここでも注意が表示されるので納得の上で「OK」をタップしてください。

言語と入力

IMEが多すぎる件にはあんまり突っ込まないでください…

 

 ・テスト

無事に起動しましたか?50音キーボードの有効化はできていますか?手書きの軌跡は表示されていますか?

何事もなく成功した人はお疲れ様でした。

失敗してしまった人はトライアンドエラーを繰り返してみてください。それでもだめなら、分かる範囲、できる範囲で対応します。

 

 

6.最後に

ここまで読んでくれてありがとうございました。

初めて書いた記事なので至らない点など多々あると思いますが、なにとぞご容赦のほどを…

Twitter – @watiko

 

追記:2013/01/07 22:40

XP Mode上で一通り動作するのを確認しました。一先ず、手順はこれでよいはずです。

 

 

一応今回できたものPOBox5.3

 

では。

POBox 5.3をXperia以外の端末でも動くようにする。(root不要) への41件のフィードバック

  1. Pon

    質問です!存在しないリソースへの参照を書き換えのところでいつも引っかかります。
    どこを探しても同じような文字列はありませんでした。なぜでしょうか?

    6 1月 2013 - Reply
    • watiko

      現時点で考えられる範囲では2つ考えられます。

      「0x206」という文字列が見つからないという場合。
      まず「0x206」というのはXperiaシリーズの/system/app/SemcGenericUxpRes.apkというファイル(この記事ではSemcGenericUxpResVL.apkが当該ファイルです)に定義されている値を参照しているのですが、
      apktool if でこのファイル以外のファイルを展開時に読み込むように設定されていると別のアドレスに置き換わっている可能性があるので、次のコードを「ファイル名を指定して実行」から動かして戴いた上でいったん既存の準備物等(C:\Temp\POBoxフォルダ内全部)を削除、再度手順を実行すると改善するかもしれません。

      cmd  /c "rd /s /q %USERPROFILE%\apktool\"

      或いはとしてあげているものと全く同じヶ所が見当たらないという場合。
      smaliの書き換えの冒頭でも「引数はやるたびに違う」と書きました。
      例示したものはあくまでも私が実行した際のものなのでそのことをご留意ください。

      これで解決しなかった場合は、もう少し詳細に情報を提供して戴けると助かります。

      6 1月 2013 -
    • Pon

      返信ありがとうございます!
      SkinData.smaliのほうは出来たのですが、IWnnImeJaJp.smaliの方ができません。

      記事のところと思われる所が
      invoke-virtual {p0}, Lcom/sonyericsson/android/pobox/core/IWnnImeJaJp;->getResources()Landroid/content/res/Resources;

      move-result-object v5

      const/high16 v6, 0x206

      invoke-virtual {v5, v6}, Landroid/content/res/Resources;->getColor(I)I

      move-result v5
      二つともこうなっています。

      この場合はmove-result v5まで消してconst/16 v5, 0xffffffffにすればいいんでしょうか?

      まったく分からなくてごめんなさい

      6 1月 2013 -
    • watiko

      そうです。
      invoke-virtual {p0}からmove-result v5までをconst/16 v5, 0xffffffffという1行に置き換えてください。

      6 1月 2013 -
    • Pon

      手順を踏んでインストールまで行きました。しかし何回手順をやり直してもインストールできません。

      adbの場合 POBoxSknMono以外Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]と出ます。

      手動インストールの場合 POBoxSknMono以外「インストールされていません。」となります。

      6 1月 2013 -
    • watiko

      「INSTALL_PARSE_FAILED_NO_CERTIFICATES」というエラーは読んでそのままapkの署名がないというエラーです。
      まずは、apkの署名でコマンドプロンプトから次の2つの行をそれぞれ実行、

      jarsigner -keystore test.keystore -verbose POBox5.3.apk testkey

      キーストアのパスワードを入力し「Enter」を押すと「署名中:ファイル名」という出力がされ
      「署名中: resources.arsc」が最後に表示されて終われば成功しています。

      jarsigner -keystore test.keystore -verbose POBoxSknSelector.apk testkey

      この場合は、最後に「署名中: classes.dex」と表示されます。

      上記手順でエラーが出ていればapkの署名、最適化という手順を再度実行してみてください、但しそのまま実行すると「test.keystore」が既にあり、エラーとなるため「ファイル名を指定して実行」から次のコードを動かしておいてください。
      この際、署名の必要があるのはPOBox5.3.apkとPOBoxSknSelector.apkの2つです。

      cmd  /c "del /q C:\Temp\POBox\test.keystore"
      6 1月 2013 -
  2. Pon

    署名のとこからやり直しました。最後に表示されてる文字も確認しながらやりましたが、同じエラーです。

    6 1月 2013 - Reply
    • watiko

      すみません。結論から申し上げると調査不足でした。
      AndroidはJDK7のキーと署名を受け付けないとのことです。これは、デフォルトで用いられるオプションが変わったためです。
      で、それに対応するためオプションを追加することで対応できるようです。

      まず、既存のキー(test.keystore)を削除するため次のコマンドを「ファイル名を指定して実行」から動かしてください。

      cmd /c "del /q C:\Temp\POBox\test.keystore"

      その後、再度apkの署名、最適化を実行して戴ければ、恐らくインストール可能なapkファイルができあがると思います。
      また、署名の際は次のコマンドで読み替えてください。(後で差し替えますが)

      keytool -genkey -v -sigalg MD5withRSA -keyalg RSA -keystore test.keystore -alias testkey -validity 10000
      
      jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore test.keystore -verbose POBox5.3.apk testkey
      
      jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore test.keystore -verbose POBoxSknSelector.apk testkey
      
      
      6 1月 2013 -
    • Pon

      keytool -genkey -v -sigalg MD5withRSA -digestalg SHA1 -keyalg RSA -keystore test.keystore -alias testkey -validity 10000

      これの-digestalgのところは-destaliasではないでしょうか?

      -digestalgでやったところできませんでしたが、-destaliasでやったところパスワード入力へ進みます。

      Pobox5.3の方はインストールできましたが、SknSelectorのほうがインストールできませんでした。もう少し頑張ってみます!

      6 1月 2013 -
    • watiko

      むしろいらないです…
      コメント投稿前に動作確認した段階ではなかったのですがコピペした後に消し忘れてました。(修正済み)
      因みに-destaliasというオプションは別名(-aliasで指定されている文字列)を書き換えるものなのですが、同時に-aliasが指定されることによって無効化(或いは上書き)されています。

      POBox5.3とSknSelectorは両方同じ署名がされている必要があるので、一端キーを変更したら両方とも同じ署名をし直してください。

      7 1月 2013 -
    • Pon

      いらなかったですか・・・初心者でなにもわからないのでヘルプをみて似てる文字打っただけでした。ごめんなさい。

      署名を同じキーを使っても作り直して両方署名し直してもどちらか一方しかインストールできませんでした…

      深夜までほんとうにすみません

      7 1月 2013 -
    • watiko

      これに関しては失念していました…
      POBOxSknSelector.apk内のMETA-INFというフォルダを削除してから署名しないとAndroid側のチェックに引っかかってしまうのです。
      申し訳ありません。

      コマンドラインからお手軽に行きたいところですが、windows標準ではzipに関するものがないので7-zip等で開いて削除してください。

      7 1月 2013 -
  3. marty

    apkの署名で失敗します。

    keytool -genkey -v -sigalg MD5withRSA -digestalg SHA1 -keyalg RSA -keystore test.keystore -alias testkey -validity 10000

    と入力すると

    ‘jarsigner’ は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    と出ます。

    それともうひとつ質問ですが、apkのビルドをすると C:\temp\POBox\POBox53\build\apk に.apkファイルが出来上がるのでしょうか?
    7zipでウィンドウを二つ開くとあるので、.apkファイルが出来上がるのだと思いますが、存在しません。

    ちなみにビルドした時は

    C:\temp\POBox>apktool b POBox53 POBox5.3.apk
    I: Checking whether sources has changed…
    I: Smaling…
    Exception in thread “main” brut.androlib.AndrolibException: Could not smali file
    : java.io.FileInputStream@5d769b56
    at brut.androlib.src.DexFileBuilder.addSmaliFile(DexFileBuilder.java:45)

    at brut.androlib.src.DexFileBuilder.addSmaliFile(DexFileBuilder.java:33)

    at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:64)
    at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:48)
    at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:35)
    at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:243)
    at brut.androlib.Androlib.buildSources(Androlib.java:200)
    at brut.androlib.Androlib.build(Androlib.java:191)
    at brut.androlib.Androlib.build(Androlib.java:174)
    at brut.apktool.Main.cmdBuild(Main.java:188)
    at brut.apktool.Main.main(Main.java:70)

    C:\temp\POBox>

    と出ます。

    6 1月 2013 - Reply
    • watiko

      まずjarsignerが見つからない問題ですが、ここを参考にしてみてください。
      実は今これに関して簡単にできないか考えていたのですが、とりあえず上記リンクの通り設定してみてください。但し、現時点では「C:\java\jdk1.7.0_09\bin;」ではなく「C:\java\jdk1.7.0_10\bin;」が最新版です。

      次に、ビルドしたapkの在処ですが「apktool」とだけ入力すると表示されるヘルプに詳細がのっていますが、
      出力ファイル名(パス)を指定していない場合は「/< 対象プロジェクトファイル>/dist/< オリジナルファイル名>」に保存されます。
      「/< 対象プロジェクトファイル>/build/」は一時ファイル置き場です。

      apktoolで出たエラーは「Could not smali file」つまりビルドできないといっているのですが…
      結構環境依存なツールなのでなぜできないのかはハッキリと分かりませんが、

      cmd  /c "rd /s /q %USERPROFILE%\apktool\"

      これを「ファイル名を指定して実行」一端apktoolの依存ファイルを削除してからもう「3.smaliの書き換え」を試して戴くと改善するかもしれません。

      6 1月 2013 -
    • marty

      深夜にもかかわらず返答ありがとうございます。
      今から試してみたいと思います。

      さしあたりお礼まで。

      6 1月 2013 -
    • marty

      PathとJAVA_HOMEの設定を行ってもう一度やってみました。

      ですがまずsmaliが作成されなくなったのでまず詰まりました。
      これは前の状態でバックアップを取ってあったので、それをコピペして何とかいけましたが、ビルド、署名と進んでいき

      jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore test.keystore -verbose POBox5.3.apk testkey

      までは行けました。

      ただその次の

      jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore test.keystore -verbose POBoxSknSelector.apk testkey

      を入力したところで

      jarsigner: 次のjarファイルを開くことができません: POBox5.3.apk

      と出て進めません。
      apkファイルも出来てない様で、検索しても出てきませんでした。
      試しに別のPCでもやってみましたが、全く同じ内容でできませんでした。

      どうやら無理な様なので諦めます、ありがとうございました。

      7 1月 2013 -
    • watiko

      smaliが作成されないのはapktoolのバージョンが古いせいかもしれません。
      ここからapktool1.x.x.tar.bz2とapktool-install-windows-rxx-ibot.tar.bz2を手に入れて「C:\Temp\POBox」に中身を展開すれば改善する可能性があります。

      今日一日で結構書き換えたので不整合があるのです… すみません。

      7 1月 2013 -
    • marty

      丁寧に教えてもらっているのにできないので投げやりになってしまいました。
      こちらこそすみません。

      smaliですが、教えていただいた方法で作成されるようになりました。

      ただ「2.展開してlibを配置、文字列の置換」の所で

      set_java.bat
      zip -d POBoxSknSelector.apk META-INF/*
      apktool if SemcGenericUxpResVL.apk Sony2012
      apktool d -b -r -t Sony2012 JapaneseIME.apk POBox53
      xcopy C:\Temp\POBox\lib C:\Temp\POBox\POBox53\lib\armeabi\

      と入力すると

      C:\Temp\POBox>set_java.bat
      ‘set_java.bat’ は、内部コマンドまたは外部コマンド、
      操作可能なプログラムまたはバッチ ファイルとして認識されていません。

      C:\Temp\POBox>zip -d POBoxSknSelector.apk META-INF/*
      ‘zip’ は、内部コマンドまたは外部コマンド、
      操作可能なプログラムまたはバッチ ファイルとして認識されていません。

      と返ってきます。

      3~5行目はできているようですが・・・
      そのまま進めていくとビルドのところでapkファイルは作成されていませんでした。

      7 1月 2013 -
    • watiko

      1行目と2行目に関しては昨日追加したので、その前から読んでいた場合ファイルが足りない状況です。
      こちらからzipファイルをダウンロードしてもらい、中のzip.exeとset_java.batをC:\Temp\POBoxに展開してもらうと動作する思います。
      #バッチファイルに若干不備があったので更新。
      ただset_java.batは環境変数を変更するために用意したので既に設定済みの場合走らせる必要はありません。

      ビルドの際にエラーが出ていますか…
      メッセージは昨夜のものと同じでしたか?

      ちょこちょこ書き換えているので一通りやってもうまくいかなくなっている可能性があるので、時間ができたら試して見ます。すみません。

      7 1月 2013 -
    • marty

      ありがとうございます
      試してみました。

      ビルド前までは行けましたが、ビルドで詰まるようです。
      エラーメッセージは

      C:\Temp\POBox>apktool b POBox53 POBox5.3.apk
      I: Checking whether sources has changed…
      I: Smaling…
      [14926,16] Label “cond_0” is not defined.
      Exception in thread “main” brut.androlib.AndrolibException: Could not smali file
      : java.io.FileInputStream@561c2c45
      at brut.androlib.src.DexFileBuilder.addSmaliFile(DexFileBuilder.java:45)

      at brut.androlib.src.DexFileBuilder.addSmaliFile(DexFileBuilder.java:33)

      at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:66)
      at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:50)
      at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:37)
      at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:256)
      at brut.androlib.Androlib.buildSources(Androlib.java:213)
      at brut.androlib.Androlib.build(Androlib.java:204)
      at brut.androlib.Androlib.build(Androlib.java:176)
      at brut.apktool.Main.cmdBuild(Main.java:218)
      at brut.apktool.Main.main(Main.java:74)

      と出ています。
      昨日と似たような内容ですが、 [14926,16] Label “cond_0” is not defined. と言うのが四行目に新しく出てきました。

      ところで、毎回試してて思うのですが、distフォルダが作成されないのはビルドが成功していないからですか?

      7 1月 2013 -
    • watiko

      ラベルcond_xというのは条件分岐で跳ぶ先のことで、それがないのでエラーになっているようです。
      smaliを編集する際に誤って消してしまったか、apktoolがデコードする際にバグで消えたかだと思います。
      今気づいたのですが画像で示されている書き換え範囲は間違っていました;;訂正しますが、とりあえず文字で書いてある方は訂正したので、それに従えばエラーは出ない可能性が高いです…

      簡単な例で示すと。

      .method public Example()V
        略 //下処理とか。
        if-nez v1 :cond_0 //引数v1がNotEqualZeroつまり零以外のときcond_0に跳ぶ。
        略 //この間でv1に0を代入、次にこの関数が用いられたときは実行されない。
        :cond_0 //これが件のラベルです。
        return-void //戻り値を持たない
      .end method
      

      まあ、v1の初期値はどこで決められたとかいろいろありますがこんな感じです。

      「< 対象プロジェクト>/dist/< オリジナルファイル名>」が作成されるのは「apktool b < 対象プロジェクト> [< 出力ファイル名>]」([]というのは省略可を表す)という構文で出力ファイル名がないときです。
      従って、「apktool b POBox53」などとすれば生成されると思います。とはいえ、エラーで空のフォルダができるだけだと思いますが…

      7 1月 2013 -
    • marty

      無事インストールまでできました。
      丁寧に教えていただきありがとうございました。

      8 1月 2013 -
  4. watiko

    とりあえず、apktoolでデコードする際にいろいろオプションを有効にしてみたので作業が簡略化されました。(具体的にはリソースを差し替える必要がなくなりました。)
    個々のオプションに関してはapktoolを引数なしで用いると表示されますが簡単に解説しておきます。

    デコード時のオプション

    -s, --no-src
        ソース(classes.dex)をデコードしない。
    -r, --no-res
        リソース(resources.arsc)をデコードしない。
    -d, --debug
        デバッグモードでデコード、詳しくはGoogleCode上のプロジェクトを参照。←恐らこのページ
    -b, --no-debug-info
        Baksmaliはデコードしたsmaliにデバッグ情報を含めない。 (.local, .param, .line, etc.)
    -f, --force
        対象フォルダを上書き。
    -t <tag>, --frame-tag <tag>
        <tag>でタグ付けされたリソースを参照する。
    --frame-path <dir>
        特定のフォルダのフレームワークファイルを参照する。
    --keep-broken-res
        エラーが表示されリソースが欠損する場合、(例えば「Invalid config flags detected. Dropping resources」等)
        それでも全てをデコードしたい時に用います。但し、ビルドする前にエラーの原因を見つけて修正する必要があります。
    

    これ以外のオプションなどは今後記事にするときに。

    7 1月 2013 - Reply
  5. Pon

    どちらともインストールすることができました!
    質問をたくさんしてしまいご迷惑をおかけしました。
    完成までお付き合いいただきありがとうございました。

    気づいたことなのですが、パックのファイルが削除されてるように思います。気のせいだったらすみません。

    7 1月 2013 - Reply
    • watiko

      パックはリンクが古いものでした。先ほどとりあえずの動作確認済み版に置き換えておきました。

      zipalignがどうしても通らなかったはずですので、もし気になるようであれば「C:\Temp\POBox\test.keystore」を削除したうえで現行手順を試してもらえれば通ると思います。

      お疲れ様でした。

      7 1月 2013 -
  6. Pon

    たびたびすいません。困ったことになりました!今日1日使ってみたのですが、どうしてか変換候補が出ません。
    5回ほどやり直してみたんですが、やっぱり変換候補が出てきません。

    ここ間違ったら変換候補出ないよ!とかいう場所がありますでしょうか?

    8 1月 2013 - Reply
    • watiko

      遅くなりました。すみません、手順を少々間違っていました。

      2.展開してlibを配置、文字列の置換
      探す場所が間違っていました。正確には/lib/以下のファイルと/smali/以下のファイルを書き換える必要があったのを片方しか書き換えていない状態でした。
      探す場所を「C:\Temp\POBox\POBox53\smali」に書き換えて、再度検索・置換・一括置換を行う必要があります。
      確認はしていないのですが、これで行けると思います。

      今エラーログを見たところ恐らく改行コードのせいです。Grep and Replaceが原因ですね。
      Linuxは改行コードがLFなので/lib/*.conf.soファイルを読むときにおかしくなっていると思われます…
      何か手段を考えますがとりあえずは当該3ファイルの改行コードをLFに変更してからビルドすれば解決します。

      9 1月 2013 -
    • marty

      当方では、スマホ(HTL21)では変換候補はちゃんと出ます。中華パッドでは出ません。
      watikoさんが作成してアップしてあるのでも同様です。

      それで「2.展開してlibを配置、文字列の置換」の所、探す場所を「C:\Temp\POBox\POBox53\」で試してみました。
      すると「リストのインデックスが範囲を超えています」とエラーが返ってきます。
      範囲が広すぎるということでしょうか。

      ともあれ、「C:\Temp\POBox\POBox53\lib\armeabi\」で合っててどこか他の所がおかしいのかなぁと思ったのですがどうでしょう。

      素人なので分かりませんが(笑

      10 1月 2013 -
    • watiko

      Grep and Replaceは今回の記事のために探したものでしたが、悪くないなと思っていたのですが、
      検索範囲関係と改行コードの強制は痛いです…

      10 1月 2013 -
    • marty

      訂正

      中華タブでも変換候補が表示されました。
      なんでしょうね、単に機種によってはちゃんと動作しないということでしょうか。

      10 1月 2013 -
    • Pon

      改行コードをLFに変更…ですか・・・
      よく分からないので少しそれについて勉強してきます!

      ちなみにwatikoさんがアップしたものは変換候補が出ます。

      10 1月 2013 -
    • watiko

      一応、zipにtrコマンド含めてみたので、追記部分を参考にして戴ければとおもいます。

      それか、テキストエディターによっては保存するときに改行コードを選べるものもあるので、そういったもので変更しても構いません。

      10 1月 2013 -
    • Pon

      変換候補でました。ありがとうございました。

      存在しないリソースへの参照を書き換えのIWnnImeJaJp.smaliのところで

      この「invoke-direct」から「move-result v0」までを次の1行に置き換えます。

      const/16 v0, 0xffffffff
      このとき「move-result v0」の「v0」という引数と、置き換えたあと「const/16 v0, 0xffffffff」の「v0」という引数が一致することに注意してください。これを2ヶ所。

      ここがv0で書かれています。余計なお世話だったらすみません。

      14 1月 2013 -
    • watiko

      お疲れ様です。

      該当箇所を修正しておきました、ありがとうございます。

      差し替えたときに忘れていたようです;

      14 1月 2013 -
  7. もくもく

    質問です。
    apkの署名の段階で、
    keytool -genkey -v -sigalg SHA1withRSA -keyalg RSA -keystore test.keystore -alias testkey -validity 10000
    をコマンドプロンプトに入力した所
    ‘keytool’ は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    と出てしまいました。
    JDKのパス設定は上手くいっているのにここだけ引っかかってしまいます…
    どの様にしたらよいのでしょうか?

    12 1月 2013 - Reply
    • watiko

      JDK 17u10を導入したものとします。

      開いているコマンドプロンプトで有効な環境変数を確認するため、「set」を実行してみてください。
      「Path=略;C:\Program Files\Java\jdk1.7.0_10\bin\」のような記述が見つかればJDKのパスは有効です。

      設定してあるのに表示されない場合はコマンドプロンプトを開き直すと有効になるときもあります。
      また「set Path=%Path%;追加したいパス」等とするとそのコマンドプロンプトでのみ有効なパスを追加することができます。

      あまりいい手とは言えませんが、

      "C:\Program Files\Java\jdk1.7.0_10\bin\keytool.exe" -genkey -v -sigalg SHA1withRSA -keyalg RSA -keystore test.keystore -alias testkey -validity 10000

      などと直接動かすこともできます。
      その際はjarsignerも「”C:\Program Files\Java\jdk1.7.0_10\bin\jarsigner.exe”」に書き換える必要があります。

      12 1月 2013 -
    • もくもく

      すばやいご回答ありがとうございます
      コマンドプロンプトを開き直したら進む事が出来ました!
      が、次の
      jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -verbose POBoxSknSelector.apk testkey
      を入れ、先ほど決めたキーを入力すると
      jarsigner: 次のjarファイルを開くことができません: POBox5.3.apk
      と出てしまいます…

      12 1月 2013 -
    • もくもく

      すみません訂正です

      jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -verbose POBox5.3.apk testkey
      ↑のコマンドを入力の間違いです。申し訳ございません。

      12 1月 2013 -
    • watiko
      cd C:\Temp\POBox

      このコマンドを実行してから再度「apkの署名」からやり直してみてください。
      (もう一度keytoolを実行します。)

      その後も同様のエラーが発生するのならば、apkをビルドする段階で失敗しています。

      12 1月 2013 -
  8. marty

    すみませんまたお世話になります。
    POBOX5.4やってみました。

    まず、2.展開してlibを配置、文字列の置換 の所、
    「その後、探す場所に「C:\Temp\POBox\POBox53\smali」を入れ再度検索、置換、リストのファイルを一括置換を選択」で検索しても何も出てきませんでした。
    とりあえずそのまま進めてみると完成はしたのですが、スマホのHTL21では見た目は特に問題なく動作してるのですが、タブレットでICS→JBにアップデートしたものではテンキーが使えないのと検索候補が出てきませんでした。

    21 1月 2013 - Reply
    • watiko

      書き換えにもに漏れが有ったようです。
      誤 POBox53
      正 POBox54

      タブレットでの動作はそれで正常です。
      POBox5.4からタブレット向けにレイアウトが追加されました。
      POBox5.4の記事の最後にスクリーンショットを乗せてあるので確認してみて下さい。

      些末なことですが、コメントは読んだ記事のコメント欄に投稿してもらうと誤解がないと思います。
      5.3の記事でPOBox53だと一瞬どこが違うのか分かりませんでした。

      21 1月 2013 -

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です