2015年5月31日日曜日

Xposedモジュールを入れていると調子が悪くなる事例

Xposedの存在を知ってから、便利そうなモジュールを色々試してみました。
systemui.apkをいじるもので機能が当然重なるものは相性問題が生じるのは当然ですが、そんな中で2つほど本体機能やアプリを阻害するものがあったので備忘録として残します。

1)MTPによるPCとの接続とXposed Media Scanner Optimizer

Xposed Media Scanner Optimizerを有効化しているとPCとの間でMTP接続に失敗します(SO-02EとNexus4で経験)。おそらくMTPのプロセスがMedia Scannerを使用するためそれが原因かと思いますが。
ちなみにXposed Media Scanner OptimizerはAndroidのプロセスのうち最も暴走して電力を消費するMedia Scannerの動作を出来るだけ制限するものです。

2)Titanium Backup root Proキーの認証機能とMinMinGuard

常時使用する本体をSO-02EからD6653に切替直後はrootは取らず使用していました。root取得後にTitanium Backup rootをインストールしたのですが、Pro版のキーの確認作業に失敗する現象に悩まされました。
そんな中、娘の使っているNexus4でTinanium Backupが正常に動作している。そう言えばLollipop(Ver 5.1)でXposedのモジュールはGreenify以外は有効にしていない(v5.1向けのXposedはアルファでかなりのモジュールが対応していないため)、ということで一旦全てのモジュールを無効化後再起動したらちゃんと動作しました。
全モジュールの無効化方法は、「モジュール」の画面で全てのチェックボックスを外すか/data/data/de.roby.xposedにあるxmlファイルを削除すればよいです(新しいフロントエンドアプリで一括解除の機能が出来れば良いですね)
その後、色々なモジュールを切替してみたところ、MinMinGuardが悪さをしていることがわかりました。
MinMinGuardは広告の表示を制限するモジュールなのですが、ライセンスキーを確認する際に外部へのアクセスを制限されて悪さをするのかもしれません(ちなみにこの時MinMinGuardの設定ではTitanium Backupは有効化していませんでした)。

Xposedの仕組上、動作を制限したり競合する機能が生じるのは納得していますが、今まで普通に使えていた機能やアプリが使えなった際のトラブルシュートは以下の通りやり方を考えたほうがいいかもしれません。
・root化して何か新しいアプリや機能を追加した結果動作が安定しない場合は、まず全てのXposedモジュールを無効化して動作が正常に戻るか確認する。
・正常に動作することを確認出来たら、まずは自分のマストアプリから順に復活させて動作を確認していく。その後必要な順番で徐々に有効化する。
・もしXposedモジュール全無効化以後も動作がおかしい場合はXposedが悪さをしていない可能性があるので他のアプリも疑ってみる。

ま、最後のまとめとして、こういう不具合も含めてroot化した端末は自分の責任で動作を確認する必要があるということです(ま、普通のアプリでの不具合でもキャリアのショップに持って行ってもアテにはならないけどね)。

2015年5月9日土曜日

BLUL不可能なAndroid端末でモジュールを作成する方法(その2)

 今、Xperia Z3(D6653)を使用しています。
 入手後はKitkat(4.4.4)であったため、Androplusカーネルからcpufreqモジュールのソースをダウンロードして以前使用していたSO-02Eで作成したソースとのマージを行って使用していました(SmartassH3はZ3のカーネルではearlysuspend設定が無効化されているためそのままではコンパイル不可能)。
 先日Lollipop(5.0.2)が降ってきた際に再度カーネルモジュールを作成しようと思いましたが、以前記載した方法ではvermagic対応が出来ませんでした。(MakefileのEXTRAVERSIONに指定文字列を入力したが、その後ろに"-perf"と付けられてしまった)。
 また、新しいカーネルダウンロード方法(この方法なら場合によっては複数の機種で同一のソースツリーを管理可能)が分かったので、再度まとめてみることにします。

1.カーネルソースのダウンロード方法

以前のブログで紹介したdeveloper worldからダウンロードする方法以外に、最近Githubで直接ダウンロードする方法が追加されましたのでこちらを紹介します。
git clone https://github.com/sonyxperiadev/kernel-copyleft
cd kernel-copyleft
git branch -r
git checkout <branch-name>
まず現在のgithub.comに登録されているsonyのkernelリポジトリを自分のPCに複写します(1行目)。
 次に複写したリポジトリ内部に入り(2行目)、全ブランチ名を表示させます(3行目)。
 ちなみに現在有効+使用中のブランチを表示させるにはgit branchと入力します。このコマンドで行頭に*マークが付いているものが現在使用中のブランチです。
 最後に自分がカーネルメイクしたいブランチを4行目のコマンドで有効化します。この時<branch-name>で指定するブランチ名はgit branch -rで表示したブランチ名一覧から先頭の"origin/"を省いたものです。

2.vermagicの指定方法

  以前紹介した方法ではうまく動かないことがありました。ちょっとググってみましたが、以下の方法がうまく動作したのでこれを紹介します(http://forum.xda-developers.com/showthread.php?t=2495152)。
 上記のリンクの If you want use automaticaly this vermagic, you can modify into the custom kernel this file :に書かれている通り include/config/kernel.release を開き、実機のカーネルバージョンで調べた内容を記載して下さい。
 その後、カーネルのビルドを行い、ストックカーネルで生成されたモジュール(例えば drivers/misc/tspp.ko など)が希望のvermagicを所有していることを確認して下さい。
 もしkernel.releaseファイルが無ければ、touchコマンドやエディタで新規作成して保存するといいでしょう。この方法でもvermagicがうまく動作しない場合は以前に細工したMakefileが悪さしている可能性もあるかもしれませんので、EXTRAVERSIONの記述は消して再実行をお勧めします。
 結局、.configのCONFIG_LOCALVERSIONとMakefileのEXTRAVERSIONが重なる場合があるときちんとバージョン情報が入らないようです。
 実際にコンパイルされる際に付けられるカーネルのバージョンはinclude/config/kernel.releaseファイルに書き込まれるのですが、これはMakefileで生成されるファイルで、記載を見た限りでは $EXTRAVERSIONの後ろに CONFIG_LOCALVERSIONが書込される構造となっています。
 例えば$EXTRAVERSIONに-perf-hogehogeと書き、.configのCONFIG_LOCALVERSIONにストックカーネルのソースコードのように-perfと書き込まれていた場合はkernel.releaseファイルの内容は-perf-hogehoge-perfとなります。
 これを避けるためには.configの_LOCALVERSIONかMakefileのEXTRAVERSIONのどちらかにvermagic関連の記述を統一する必要があります。