2015年11月21日土曜日

Xposedのモジュールが衝突した場合の対応

rootを取る人にとって必要性が高い理由としてはXposedフレームワークを使いたいというのがあると思います。
私も合計13本のアプリをインストール+有効化しています。
  • 3c Toolbox Pro
  • Amplify
  • AndroPlusMod
  • *BubbleUPnP
  • *Force Touch Detector
  • Greenify
  • HandleExternelStorage
  • MinMinGuard
  • Native Clipboard
  • Statusbar download progress
  • SystemUI Patcher
  • *UnrestrictedGetTasks
  • Xperia  Xposed(LP)
  • *YouTube AdAway
*付のは正直あまり使っていない、もしくは機能がよく分かっていないもの。端末の健康を考えて近々整理したいと思います。
で、今回のネタは以前はGravity Boxを使用してタスクバーのアイコン表示を隠していたのですが、最近端末のメモリ消費量を考えてNovaLauncher と LMTの併用をやめてXperiaランチャーをメインにした結果、代わりに入れたSerajr Xperia Xposedとの衝突で画面が真っ暗になったのをこの方法で解決したって話です。
この方法、XposedモジュールとPlayアプリが衝突してブートループを起こした場合も有効です。

基本的操作方法

ここに書いてある方法でXposedを起動時に無効化します、おわり。では「英語なんかわからん」って場合は積んでしまいますので説明します。
/data/data/de.robv.android.xposed.installer/conf に"disabled"という名前のファイルを作成します。
コマンドで言うとtouch disabledになります。

解決方法1

Gravity BoxとXperia Xposedが衝突した場合、画面は真っ暗なのですが何故か電源ボタンの長押しでの電源断ウィンドウは表示されたので、PCに接続しadb shellで以下のコマンドを入力します。
su
cd /data/data/de.robv.android.xposed.installer/conf
touch disabled

解決方法2

XZDRなどリカバリをインストールしている際はリブートしリカバリを起動してリカバリプログラムのシェルから同じ操作をします。
リカバリがTWRPの場合は Advanced > Terminal Command でシェルが開きます。直接/data/data/de.robv.android.xposed.installer/confを"select"で選択してからtouch disabledと入力します。

その後の対応

端末をブートするとXposedフレームワークが無効化されて起動します。その後、フレームワークのアプリから競合関係のモジュールを無効化して下さい。インストールしたアプリが衝突した場合は、そのアプリをアンインストールもしくは設定変更して下さい。
もちろんdisabledファイルを消さないとその後もXposedフレームワークは有効化しないのでお忘れなく。

おまけ

上記とほぼ同じことを行う目的で、Xposed uninstallerのzipファイルでフレームワークを消した(リカバリで実施)場合、消す事自体は可能ですがその後の再インストールに失敗して起動しなくなった場合がありました(再度FTFイメージの焼き直しが必要)。という訳で上記の方法をまず試すことをお勧めします。

2015年11月9日月曜日

Facebookアプリのメモリ消費量対策

iOS界隈でも話題になっておりますが、オリジナルのFacebookアプリはあまりに出来が悪いので正直困ったものです。
アプリ自体も40MB以上のサイズがあり、これをほぼ毎週アップデートさせる。
さらに、ART(Android Ver.5以降)環境ではおおよそメモリを200MB以上も消費しながら常駐する(書込を適時受信する以上常駐するのは分かるにしても機能から考えると正直大きすぎだと思います)。
更に腹立たしいのはチャットの機能をMessengerに外出ししたこと。その行為自体は理解は出来ますが、このアプリ自体も非常にバカでかい。本体ほどではないけれどもサイズも20MB超えと最適化って何?というレベル。
私もいい加減嫌になって先月アンインストールし1週間位はChrome版を使用していたのですが、実は新興国向けに純正でLiteなるアプリを作っていたことがわかり、今回紹介するものです。

お断り

以上の相違・問題点があるので納得した方以外は使わないで下さい。

  • Liteは残念ながらFacebook純正アプリですが、日本ではPlayストア経由での標準インストールは出来ません。以下に書く方法で「自分の責任」で使用する必要があります。
  • 新興国向けのLightなアプリである以上、投稿にある動画をそのまま再生する機能などが省かれています。また私も全部の機能は使っていないので不明ですが今まで使っていた機能が省かれている場合があります。
  • 残念ながら、表示されているフォントが中文フォントです。日本語は見ることは出来ますが中国人特有の明朝とゴシックの入り混じった形で表示されます。さらに句読点の位置が中文フォントの書式にのっとって中心になります。

ダウンロード・インストール方法

"Facebook Lite ダウンロード"とググってAPKファイルを置いてある場所を探して下さい。ちなみに私はAPKMirrorからダウンロードしました。これを書いた時点(2015年11月8日)で1.14.0.98.222が最新版のようです。
なお、自分の端末にファイルをダウンロードしてインストールする際は、以下の2つを設定することをお勧めします(ただしセキュリティホールになりうる設定もあるので注意すること)。
  • 署名されたAPK以外は設定→セキュリティ→提供元不明のアプリを有効化して下さい。このAPKがFacebookにより署名されている場合はこの設定は不要かもしれませんが、それ以外のものはこれを有効化しないとインストールできません(申し訳ありませんが、自分は理解して常時この設定を有効化しているためLiteがこの設定が必要かは検証していません)。
  • 上記の方法で野良アプリをインストール可能にしたので、念の為ウィルススキャナアプリをインストールしておきます。無償提供される所ではAvast!やAVGあたりでもよろしいのではないでしょうか?

使用後の感想

使用後の感想はおおよそ70MBとぐっと使用メモリ量は減っています。やっぱり専用アプリ使いたい人はこっち使う価値はあると思います。ただし少しでも無駄なメモリは使って欲しくないし、逐次更新は不要な場合はChrome使ったほうがいいかもしれませんね。

2015年10月25日日曜日

init.dの使い方(Xperia Z3で確認)

初めに

init.dスクリプトは起動時にデーモンなどを起動させるものです(UNIX系のOSを使用中ならご存知でしょうが)。
Androidの場合はユーザがprocなどでカーネルパラメータを指定した場合や追加モジュールを読込させる目的で使用している場合があるかと思います。
私の現在のメイン環境では起動時にsuperSUは動作しているためrootは普通に使えるのですが、rootkitではinit.dスクリプトサポートがないためせっかく作ったカーネルモジュールを読込出来ない状況でした。
OS周りのカスタマイズにはKernelAdiutorを使用していますが、これのinit.dサポートが/system/etc/init.dにスクリプトを置いても動作していないようなのでちょっと調べてみた結果を備忘録でまとめます。

その0(どちらの方法でも共通事項)

以下の記述+最下行に何も入れない行を1行追加して下さい。
/system/xbin/run-parts /system/etc/init.d 
/system/etc/init.dディレクトリのパーミッションは755もしくは777にし、init.dディレクトリ内部のシェルスクリプトもパーミッションを755もしくは777にします(755で十分動く筈なのですが、Xdaあたりを見ると777の記述も結構あるため)。
ちなみにこのrun-partsコマンド、busyboxのシンボリックリンクです。ということは当然busyboxがインストールされていないと動作しません。

その1(私の環境では動かない)

/system/etc/init.qcom.post_boot.shに記述を追加しました。
init.qcom.post_boot.shはブート中に動作するスクリプトのなのでこれで動きそうだと思ったのですが、何故か認識できず...

その2(SuperSUと同じ方法)

そう言えばSuperSUは現状では起動時にスクリプトを読み込ませる方法で対応していることを思い出し調べてみました。
/system/etc/install-recovery.shの最下行にその1と同じ内容を記載しました。
結果としてはこれが唯一動作した形になっています。
という訳で今回はかるーく流してみました。

おまけ(自分で作ったモジュールを起動時に全て読み込む)

/system/lib/modules配下にカーネルバージョンと同じフォルダを作り、その中に作成したカーネルモジュールを配置した場合にスクリプトで全てロードさせるスクリプトです。

#!/system/bin/sh
# script to load extra modules in /system/lib/modules
KVER=`/system/xbin/uname -r`
/system/bin/insmod /system/lib/modules/$KVER/symsearch.ko
for i in $(ls /system/lib/modules/$KVER);
do
/system/bin/insmod /system/lib/modules/$KVER/$i
done
上の例、簡単に説明しますが行頭の#はコメントを示します。また1行目の#!はこのスクリプトを動作させるためのシェルプログラムを指定します。
symsearch.koを先にinsmodしているのはこれに依存するモジュールがあるからです。
私がinit.dスクリプトを記載する際、おそらくPATHが/system/binには通っておりますが、/system/xbinも含めて実行コマンドはフルパスで記述しています(無用な動作不良を防止するため)。

2015年9月11日金曜日

Chromecastを購入してみた

リビングのAV機器からPS3を片付けたせいでビデオ・写真・音楽を楽しむ手段が無くなったため小型のPCでも置こうかなぁと思っていました。
先日コストコに行った所、店頭でChromecastが並んでいて1個3,980円とちょっとだけ安くなっていたので購入しました。

セットアップについて

帰宅後、MHL向けに常時接続状態のACアダプタ経由でAVアンプに接続しても、何故か画面が表示されない。

という訳でもう一度取説を見て内蔵のACアダプタ+TV直接接続した所、無事にセットアップ画面は表示されました。

  1. ACアダプタのMicroUSB側をChromecastに刺す
  2. ChromecastのHDMIポートをTVに刺す
  3. ACアダプタをコンセントに接続
  4. TVの入力をHDMIに切替

あとはスマホにアプリを入れてペアリングするだけ。ペアリング後はAVアンプに接続変更してもちゃんと画面が表示されました。
我が家ではWiFiのアクセスポイントは5GHzと2.4GHzで2つのSSIDを利用できるため、Chromecast側は2.4GHz専用とし、それ以外の機器はメインで5GHzを使用するなどの動作は可能です。

使用感について

正直使った感想としてはプラットフォームとしては現状ではよく考えてあるけど、対応アプリ側の出来がまだまだ甘いという印象。何がそう感じさせるかというと、対応アプリが用意するChromecastブラウザ向けのHTML・CSSを使いこなして美しい画面を提供出来ているのはGoogle謹製のYoutube等しか自分の手元では無いように見えます。

それに何といっても自分にとって最大の問題はChromecast経由で音楽を聞いた場合、どのアプリもギャップレス再生ができないこと。ライブアルバムやノンストップリミックスアルバムのように途中でブツ切れすると興醒めするのでこれはなんとかして欲しいです。

補足

9/22時点でちょっとわかったので補足します
今現在でギャップレス再生に対応する方法は以下の2つのようです。

  1. Playミュージックアプリをインストールし、ストア経由でネットワークストリームとして再生させChromeCastにキャストした場合。
  2. BubbleUPnPを起動し、ChromeCastに接続させAUDIOCAST機能を有効にした状態で他のプレーヤ(当然ギャップレス再生対応のもの)で楽曲再生した場合。


1.については正直このサービスを利用しないと動作の検証はできません。それに月額798円払うのはどうかなぁという印象(ちょっと高いかなぁと)。
(Playミュージック自体には自分の端末に複写した楽曲をキャストする機能はありませんので動作は確認出来ず...)
2.についてはたしかにこの方法で動作するんだが、端末のCPU負荷(=バッテリ消費)が激しいし、再エンコードの際に生じるラグがあるため制御が数秒程もたつく...

SDKをちょっとだけググった結果ではどうやらスマホ側で音声・映像データをデコードしてそのままストリーム再生出来るようなのですが、それを行っているような賢いアプリは今の所見つからない。これを書いている時点でトラック間のラグが最も小さいのはClockWorkModが作成するAllCastでした。ただしAllCastは自分のメイン環境だと何故か楽曲を再生しようとした瞬間異常終了してしまう(メディアサーバ経由の場合。ファイルとして再生アプリを選択した場合は再生可能だが、この時はアルバムアート等が表示されない)。非常に悩ましいですね。
という訳でアプリ側でデコードし、映像・音声ストリームする(ノンストップで)アプリ無いんでしょうかね?

あともう一つ謎なのはこの映像・音声ストリーム配信のビットレートとChromecast自体が対応するビデオ解像度・音声出力周波数とビット数がよくわからないことです。その辺りはSDKでも見て今度はちょっと調べてみたいと思います。

おまけ(Androidでの音楽再生アプリについて)

今自分の手元では音楽再生用アプリがいくつもインストールされている状況です。
結局メインで使っているPowerampは未だChromecast未対応。
Chromecast対応するアプリだけでもSONY謹製のMusic、BubbleUPnP、Rocket Player、Shuttle、AllCastと使ってみたのですがこれだけと絞ることが出来ない状況...
Chromecast非対応もNoozy、UBIO、HF Playerと未だに入っている。そのうち整理したいと思います...

2015年9月6日日曜日

2010年冬モデルのNEC製VALUESTAR N(VN770WG6B)でメモリを8GBに増設し、Windows10(64bit版)化する


自分のではないのですが、連れのPCはNECのVALUESTAR Nの2010年冬モデル(VN770WG6B)です。
このモデル、Windows7の32bit版がプリインされており、メモリも4GB(最大4GB)しかなく通常動作でメモリ不足による不調を訴えていました。
当初はそのまま使い続けるつもりでしたが、最近使っていなかった地デジチューナのB-CASスロットがいつの間にかカード読取不調になったこと、CPUやチップセットから本来は64bit版で動作可能である疑いを持った矢先、試しに自分のLenovo G570に刺さっていたメモリをこの本体に挿した所あっさりと8GBで認識したことからWindows10(64bit版)にアップグレードしましたので今回紹介します。

まず今回の改造では以下のリスクがありますので予め説明しておきます。

その1)TV放送のPC経由での視聴について

Windows10では現状地デジ・BS他をPCで見られなくなります。
このPC、Windows Media Centerを経由したSmartVisionというソフト経由で地デジを試聴出来ていましたが、Windows Media CenterがWindows 10で消されるため、当然ながら動作できません(将来何らかのソフトウェアで対応する可能性はあるかもしれませんが...)

その2)サポートについて

4GB以上のメモリによる動作はNECのサポートを受けられません。
NECのWebサイトにも最大4GBとしか情報がないですし、バッファロー他の周辺機器のサイトにもこの機種について増設時に認識したという情報はありません。
現状動作しているWindows10機にCPU-Zをインストールしてメモリ関連の情報を表示したところ、DRAM Freqが531MHzと表示されていることから、DDR3-1066(CL=7、7-7-7-20)対応のメモリでないと動作しないようです。


その3)Windows10の出来について

Windows10はこれを記載の時点では正直公開ベータと言える出来です。
後述しますが、この本体の場合はBIOS画面経由でないとWiFiのON/OFFや本体電源OFF時のUSBポートでの給電制御を切替出来ませんでした(このVALUESTARにはWindows7で動作する切替アプリがあるのですが、Windows10では動作しなかった)。
このようにハードウェアが特殊なPCでは現状Windows10 64bit版が動くとは思えません。

あと、私が経験した失敗としてはPCのバックアップを取らずにWindows7→Windows10へアップグレードした所、アップデート最後のユーザプロファイル作成で再起動を繰り返しデスクトップが開かないという不具合が発生しました。
結局はWindowsPEのCD-ROMイメージを作ってこれでUSB HDDにデータをサルベージ出来たので無事に済みましたが、そういう意味も含めて、Windows 10は現時点では公開ベータだと思いますので現状の環境を維持したい方にはお勧めしません。

やり方


それでは今回実施した方法について説明します。

1)メモリを増設する

純正で接続された4GBのメモリを外し、4GB×2=8GBに増設します。
 このPCの場合、DDR3-1066(CL=7、7-7-7-20)対応でないと動作しないと思います。
 BIOSで8GBと表示されることと、バッファローなどのRAMディスクアプリをインストール済みの場合はWindows7の管理アプリで8GBと認識されることを確認して下さい。

2)Windows10のインストールイメージをダウンロードする

そのままだと予約したとしてもおそらく何時までたってもアップグレード案内は届かないと思いますので、その場合はMicrosoftのサイトから直接ダウンロードするしかありません。

 ちなみにダウンロードするイメージについては32bit/64bit両方入っているものが最適でしょう。メモリを増やすつもりがなければ32bit版で使い続ける(それも購入時点の全機能を使うならそのままWindows7で)と良いですが、メモリを増やした状態で使うなら64bit版が最適です。

 64bit化するには一旦32bit版でアップグレード後64bit化する必要があるため、32bit版と両方必要になります。

3)Windows7向けの64bit版ドライバセットをメーカサイトからダウンロードする。

このドライバセット、普通に121ware.comから検索しても見つかりません。このPCの型番で"VN770WG6B 64bit driver"をgoogleで検索しないと表示されません。

 正直、どうしてもインストールしていれないとならないドライバはSDカードスロットぐらいなもので、これ以外は不明なデバイス表示を消す目的しか無いので(無線キーボードのHOTボタン機能やTVチューナ以外は標準で認識されるドライバで正常動作する)、ここは割りきってしなくてもいい処理かもしれません。

4)Windows10のインストールイメージからシステムをアップグレード

念の為アップグレード時の診断でハネられたソフトウェアをアンインストールするだけではなく、それ以外に怪しいソフトは全部消すべきだと思います。
 私の場合はバッファローのRAMディスクドライバを使用していたため、これがアップグレード失敗の原因だったと想定されます。

 なお、Windows7からアップグレードした場合は、もともと動作していたbit数と同じものがインストールされます。
 このPCの場合は32bit版になります
(これが一番NECさんに文句が言いたいところです。この機種販売時点でNECが判断した時は32bit版が最良の選択だったんでしょうが、同時期の他社のように何故32と64bit版の両方用意してユーザで最初期使用前に選択させてくれなかったのか。本当に疑問です。)

5)Windows10が無事立ち上がったら、デバイスの動作チェック

アップグレード後デスクトップが表示されれば多分大丈夫だと思いますが、一番怪しいところとしてWiFiのデバイスドライバがインストールされても接続出来ないというのがあります。
 この場合は一旦本体の電源を再起動してBIOS画面を立ち上げ、WiFiの機能をEnableにしてWindows10を立ち上げてみて下さい。

 TVチューナなど標準ドライバで認識されないデバイスは32bit版のドライバがPC内に保存されているのであればそれをインストールして認識するか確認してみてもよいでしょう(ただしこの後で64bit化するのであればしなくても良い)。

6)64bit版のWindows10をクリーンインストール

せっかく8GBで使用するのでしたら、32bitでは残念ながら広大なRAMディスクとしてしか使えない3.2GB以降のメインメモリを有効活用可能な64bit版にしてしまいましょう。

 64bit化するには再度インストールメディアを使って64bit版をクリーンインストールして下さい。ちなみにディスクを完全消去しない限りは前のWindowsフォルダはWindows.old名で残っています。

 普通クリーンインストールする際は新しいライセンスが必要になりますが、Windows7→10化した時点の(32bit版での)ライセンス認証が残っているため、64bitをクリーンインストールしても認証違反とは表示されません (このやり方での無料での32bit→64bit化は今後もずっと使えるかどうかはわかりません。念のため)。

 また、このWindows10でのライセンス認証状態は現状構成でのハードウェアで適用可能なため、HDD・メモリ・その他本体スロットの拡張ボード類の変更を行った時点で切れる可能性があります。

7)64bit版起動後、標準でサポートされないデバイスのドライバをインストール

このPCで標準ドライバで使えないデバイスはSDカードスロット・地デジTVチューナ・キーボードのHOTキーの3つだけだと思います。

 SDカード・地デジチューナ共に先にダウンロードしたWindows7の64bit版ドライバがあるのでそれをインストールすればデバイスとしては認識すると思います(ちなみに先程手元のSDカードを挿したらスロットは正常に動作しました)。
 キーボードのHOTキーは使えなくても問題ないと判断し、ドライバは探していません。

まとめ

Windows10を使って正直な感想としては、公開ベータだなぁというところですか(出来が良い悪いはともかく、ポリシーが無いのと、OSのソフトウェアアップデートが有無を言わさず自動で行われるのが問題)。コントロールパネルの表示があちこちWindows7の踏襲とWindow8以降のものが混在していたり(同じ設定なのに)、正直不思議なOSです。
 ただ、動かないソフトウェアはある(メーカの動作保証が必要なハードウェア直結関連のもの)のですが、普通のソフトウェアでの動作不具合は今の所あまり遭遇していません。

 現状使っているPCの全機能を失いたくない人、メーカの動作保障が気になる人、互換性の問題により古いソフトが動かなくなるのは嫌な人はメーカから出荷されたWindows7の状態で使い続けるほうがいいと思います。
 でも、現状メモリ不足等で動作が重く何とかしたい(新しいPCなんか買う金はないけど実験はしてみたい)人はお試しする価値はあると思います。
 正直我が家ではWindows10(64bit)化した結果、PCの動作が軽くなりまだ数年はこの本体使い続けられるのではという評価をしております。

 なお、リカバリ用のDVD・BDを作成した人は一度Window10をインストールしても元に戻ることは可能だと思います。ただしデータの復元という面倒臭い作業は残りますが。
 (リカバリメディアなしでも元に戻すことは可能らしいですが、私の遭遇したようなデスクトップが表示されない自体では元に戻すことは出来ませんでした)。

おまけ、ReadyBoostについて

Windows7では8GBのUSBメモリでReadyBoostを使用していました(32bit版のため、4GBしか領域が作られていなかったが)。
 同じUSBメモリWindow10でもReadyBoostとして使いたいと思いましたが、そのままではサポート外のデバイスと表示され弾かれました。USBメモリの全領域をexFATでフォーマットしなおしたところ、RadyBoost対応メモリとして認識出来ました。


2015年8月22日土曜日

TCP輻輳アルゴリズムについて

Xperia Zで対応させてみたCPUガバナ・IOスケジューラに続いてTCP輻輳アルゴリズムに興味を持ってちょっと調べてみました。
標準カーネルではrenoとcubicしか無い。でもカスタムカーネルには多数のアルゴリズムが表示される。それぞれの性能評価については日本語ドキュメントは見かけたことが無いですが3c Toolboxの解説サイトに以下の記載がありました。
この記載、見たとおりスループットの高さはともかく、レイテンシーがwestwoodは他のものに比較すると一段と低い。レイテンシーはデータ転送後その結果が返されるまでの遅延時間ということだから、当然転送速度が早くなるはず。

という訳で、TCP輻輳アルゴリズムの外部ソース探してみましたが、ちょっと見つからない。それではカスタムカーネルからソースを頂いて何とかしましょうということでAndroplusカーネルからソースコードを頂きました。

tcp_westwood.cとMakefileだけ複写すれば良い気もしますが、とりあえずMakefileのobj-yに記載のソースコードを全て複写してモジュールとして作成しました。
westwoodを使った印象としてはやはり転送速度はこちらのほうが体感上でも速い。ストックカーネルでなぜ使わないのか個人的には疑問です。

2015年6月30日火曜日

LMTlauncherでナビバー代わりを有効化する

今回は比較的ライトなところで。
LMTlauncherを使っています。目的は縦画面の時はナビバーを完全に隠しているため、これの機能を何らかのアプリで補う必要があるからです。
簡単なインストール方法は以前にも書きましたが、歳のせいか物忘れがひどくISASの有効化方法をすっかり忘れていました。という訳で備忘録がてら記載します。

1.LMTlauncherのダウンロード+インストール

こちらのサイトからダウンロードして下さい。野良アプリ扱いのため、当然「セキュリテイ」→「提供元不明のアプリ」を有効化する必要があります。
また、インストール後は「ユーザ補助」の「サービス」でLMTをonにし、ゼスチャーを有効化する必要があります。
(おまけですが、Greenifyでもここのサービス有効化が必要です。)

2.設定する

アプリドロアにあるLMTから起動すると、「SETTINGS」タブの「GENERAL」に「ACTIVATE LMT」があるので有効にします。
また、「AUTOSTART LMT」にもチェックボックスを入れます。

次に「SET ACTIVE FEATURES」をクリックし「Define feature set」で「Gestures, ISAS and pie」を選択します。
これはLMT launcherの3つの機能を有効化するための処理です。
LMTには以下の3つの機能があります。

  1. pie:標準機能。円弧状のメニューを表示します。最初見た目がイヤでしたが、片手使いには本当に便利です。
  2. Gestures:デスクトップ上で規定されたゼスチャーを行うとコマンドを実行するものです。自分は使っていないので余りわかりませんが、便利だと思います。
  3. ISAS:仮想のナビバーが存在するに振る舞う操作です。正確には画面外からスワイプして操作します。自分のようにナビバーを完全に隠した場合は非常に役立ちます。


ISASだけ使えれば良いと思いがちですが、pieは保険だと思っておけばいいかと思います(逆にナビバーを隠しているためLMTが動作しないとまともに使えなくなる)。また、ISASはGesturesの一種なのでISASを使うには上記の設定が必要ということです。

次に、「GESTURE RECOGNITION」で「AUTO CONFIGURATION」を指定します。
LMTのダウンロード先でも英文で書かれている通り自動設定をまず行ってみてどうしてもうまく動かない場合はその下の設定で調節してみて下さい。
ちなみにZ(C6603化済み)・Z3(D6653)では、
Input device=1
Touchscreen/screen factor x=100%
Touchscreen/screen factor y=100% となりました。

次はISASを使用する際のPIEの表示位置を規制します。「PIE ACTIVATION」をクリックしデフォルトのallから変更します。私の場合は左右で表示したいので「Left and right」にしました(ここはISASを有効化した場合は"all"は選択できなくなるようです)。

最後に「ISAS」タグに移動し「INVISIBLE SWIPE AREAS BOTTOM」を以下の通り設定します。要はLollipopの標準のソフトキー配置にする場合はこの通りってことです。

  1. 「ISA 1」BACK
  2. 「ISA 2」HOME
  3. 「ISA 3」RECENTAPPS
当然AREAのTOP・LEFT・RIGHTにそれぞれゼスチャーを割り当てると最大12個のISASを操作可能になります。私はナビバーの代わりで充分なため、BOTTOMに3つだけ割り当てしています。

設定後、画面外からドックのちょっと上までスワイプし「ホーム」・「バック」・「アプリ履歴」が全て正常に動作するか確認して下さい。
また、画面の左右からスワイプした際に円弧形のメニューが表示されるか確認してみて下さい。

3.カスタマイズ方法

LMTの標準アイコンはNexusなどのAndroid標準アイコンです。
実は/mnt/sdcard/Android/data/com.android.lmt/files/に指定の名前のPNG(back.png・home.png・menu.png・recentapps.png)ファイルを入れることで変更できます。という訳で、私の使っているLollipopとKitkat用のPNGファイル貼っておきますので自由に使って下さい。
この画像ファイルを既定のフォルダに複写後、LMTの設定は「PIE ICONS」の「SHOW AND SCALE USER IMAGES」を2にして下さい(自動拡大表示させる)。



2015年6月21日日曜日

通勤を快適に(ノイズキャンセラで)

現在公共交通機関で通勤中です。
スマホに楽曲データを入れて聞いているのですが、コンプライ(ウレタンスポンジのヘッドフォン)でもそれなりに騒音は入ります。
というわけで、Z2からはノイズキャンセラが入ったので、今回はその検証をします。

1.ノイズキャンセル機能付きヘッドセットを購入する

ノイズキャンセル機能を使用するには、ソニーから対応ヘッドセットを購入しなければ鳴りません。なぜなら、周囲の雑音を消すためにマイクで集音し、雑音の逆位相の音をイヤホンに流す方法で雑音を打ち消しているからです。
2015年6月現在では以下の機種が販売されています。
31EMは5,500円します。ちょっとでも安く手に入れたいと思うなら、実はヤフオクがお得なの知ってますか?
設定→音と通知→アクセサリー設定→ヘッドホンで選択可能なノイズキャンセリングヘッドセットの名称のうちノイズキャンセル対応イヤホンは「MDR-NC31E/NC31EM」ですが、MDR-NC31Eをヤフオクで探します。
値段は新品でも2,000円程度です。送料込みでも半額程度でお得ですよね。
ただし、ノイズキャンセリング機能付ウォークマンの補修部品らしいので送付される物品は味気ないビニル袋です。また、ものによってはケーブル長が非常に長いものやフォーンプラグにウオークマン用のプラグカバーが付いているものも有りますのでよく写真を見て下さい。
ネットの噂によるとNC31の方がフラットな音質らしいです。ちなみにEMがつくと純正でマイク通話の機能が保障されてますが、NC31Eでも普通に使えたことを報告します。

2.ウォークマンアプリ以外でノイズキャンセリング機能を試す

フォーンジャックに差しこめばヘッドセットを認識しノイズキャンセリング機能が現在有効かどうかが通知に表示されます。その通知の右側にある「NC」意匠をクリックすると機能の有効・無効をトグル切替えできます。
ちなみにノイズキャンセリング機能をONの状態のままフォーンプラグの引き抜きを行うとかなり盛大にイヤホンからブッというノイズが鳴ります。これが嫌なら引き抜き前にOFFにして下さい(正直ごくまれに同じノイズが音楽視聴時にこのノイズが鳴るのを何とかして欲しいです)。
ノイズキャンセリング機能が有効化すると、イヤホンユニットの側面についたマイクから外部の騒音を拾い、イヤホンからこの音声の逆位相の音を元の楽曲にプラスした音声を流すという仕掛けです(ソフトウェアエミュレーションでも動きそうですが、バッテリ消費はデカそうですね。Z3のノイズキャンセル機能はハードウェアで実現しているようでバッテリ消費は比較的少ないという自己評価です。)
ちなみにWalkman(あ、今はミュージックか)アプリで鳴らしたほうがこのイヤホンはいい音しますが、機能上他のアプリを使いたいと思うことがあると思います(たとえばPowerampではギャップレス再生や、アルバム再生終了時に自動的に次のアルバムを再生可能)。Powerampの場合、従来有効化していたDVCとイコライザを無効化したほうが正直音質は良いです(Xperia側のシステムでの音質調節に任せる)。

3.シリコンゴムのイヤーピースが変形している場合

輸送中の梱包の影響のせいか、片側のマウスピースが変形していました。使い続けていると形は直るのでしょうがちょっと耳との間で隙間があるらしく、遮音性が悪い。
という訳で、ちょっと考えてみました。
このイヤーピース、純正でハイブリッドタイプがSONYから販売されています。要はイヤーピースの内側に発泡スポンジが入っており、これによってさらに遮音性を高めてます。またもう一つの仕組みとして発泡スポンジの強度でシリコンゴムのイヤーピースの形状を保っているのではないかと。
実はこのヘッドセット購入前にゼンハイザーのCX175を使っていたのですが、コンプライのイヤーピースに差し込む際にイヤホンユニット内部の配線をが切ってしまったらしく、使わなくなったイヤーピースがあったことを思い出しました。
そのままだとちょっと長いので半分に切ったら丁度良いサイズになったので、これをイヤーピースの内側に仕込んだらシリコンゴムの外装の変形は抑えられかなりいい感じになりました。
さらにコンプライは長年の使用により(体の脂で)劣化するのですが、シリコンゴムの外装で保護されるから長持ちするのではと期待しています。
あ、コンプライを切る場合は中心軸の塩ビ管を抜いてから完全に潰して下さい。うまく塩ビ管を抜けないなら先に半分に切ってから抜くとよいでしょう。その際切り口が汚ければ再度切り直せばいいだけです。
あと、発泡ウレタンの耳栓をコンプライ代わりに使うワザもあるようなので、同じ方法で真ん中の遮音層を作ることも可能だとおもいます(この時耳栓の中心軸をポンチで穴開け必要です)。

2015年6月14日日曜日

Lollipop Z対応のXZDualRecoveryが発表されました

C6603 Lollipop向けのfixが入ったXZDualRecovery来ました(最新版は2.8.18)。

結局root取得済み端末でのインストールが失敗する理由はlollipop以降のカーネルではSELinuxを無効化する必要があったのですが、以前のバージョンではそのためのカーネルモジュール(byeselinux.ko)がうまく動作しなかったためのようですね。

しかし残念ながら、Lollipop KernelでRecoveryから/systemが書き込み権限付きでのmount不可能なことに気づきました(TWRP・touch phizともに)。
でも何故かZIPインストール時のみは/systemへのパッケージインストールが可能なので、Xposedなどはインストール可能なのですが...
ちょっと動作的ににはまだまだ問題ありですなぁ。
XDAではその辺りの話題も出ていて確認中のため、対策はなされると思いますが、もう少しかかりますね(rootなんか使わないけどlollipopに移行したい、取り急ぎ不具合があってもprerootedZIPでroot化済みでLollipopで使用したいなら前回の方法でOKです)。

とりあえずkitkatからLollipopに移行する際はWipe Data(自分の場合はC6603 Kitkatの10.5.A.0.230にダウングレードしてそこでroot取得際にはWipe Dataしないとブートループ)が必要でした。アプリはhellium辺りでバックアップを取って一回真っ新にするつもりで使うのもよろしいではないのでしょうか?

6/30時点で判明したことを追記します。
TWRPの場合「Mount」の最下層に表示される「Only mount system read-only」にチェックを入れて 「System」にもチェックを入れると、とりあえず「読込のみ」の状態で/systemをマウント出来、この状態ならZIPインストール時に/systemへの書込が可能になる可能性が高くなります。

2015年6月7日日曜日

国内キャリアが出さないなら海外版にしてしまえ(SO-02EからC6603へ)

大口顧客だからどうにもならなかったのかもしれないが、先日発表になった「Xperia Z3+」の件はちょっと腹立ちますよね。
国内版に「Z4」という名前を付けたのはどう考えても国内キャリアのせい(自分たちの販売タイミングでタマが欲しいから)。ああいうネーミングのせいでソニーモバイルが迷走しているって悲しい記事を書かれる始末だし。

今年になってSo-netでMVNO向けのJ1(中身はA2と同じ)を出したけど、昨年の時点でフラッグシップでSIMフリー機(もちろんブートローダアンロックOK)で販売を始めていたら、たとえMVNO契約がセットだとしても乗り換えていたと思う(そういう需要はタイミング次第ではかなりあると思って欲しい、ソニーモバイルさん)。

というわけで、腹立ちついでに今回はdocomoの勝手な事情(2年前の端末だから機種変更させたいというのと、国内版専用ビルドにかかる費用を出したくない)でLollipopにアップデートしないSO-02Eに海外版のROMを焼いてしまうことにしました。

6月6日付の結論を書きますが、XZDualRecoveryをインストールした状態ではLollipopは動作しません(これはXZのバージョンが上がればなんとかなるかもしれませんが、事実です)。root維持が必要ならもう少し待つ必要はあります(下記の通りとりあえず海外版に以降だけ済ませ、まずはKitkatで使い続けるという手もあります)。
次の記事でも書きましたが、XZDualRecoveryの2.8.16以降ではLollipopのXperia Zでちゃんとブートしました。これでroot化状態でも使用できます。どうせSO-02Eはブートローダーのアンロックは出来ないので、root取得くらいで使い続けてもいいのかなと思います。

1.海外版ROMを使用する際の特徴

海外版ROMに書き換えする場合は以下の長所・短所があります。自分の使い方をよく考えて下さい。

 長所:

   ①ソニーモバイルのサポートするAndroid OSを使い続けることができる
    自分はその昔arcでもdocomoにv2.3で見捨てられた経験がありますが、
    最終的にはgoroさんが移植したv4.0.4を常用していました
    (最終的にはCM11ベースのROMを入れてみたが、さすがにメモリ不足とSDカード周りでちょっと常用はきついというイメージでした)。
    国内キャリアが見捨てた端末では将来セキュリティホールが見つかってもほぼ対応はしてくれませんが、
    海外版ならばソニーモバイルがサポートする限りは最新パッチは当てられます。
    特にLollipop以降ではブラウザが使用するWebkitが外部モジュール化されてGooglePlay経由でアップデートされ続けるので、Kitkat止まりよりははるかに良いと思います(docomoさんにはこの点もよく反省して頂きたい)。
   ②キャリアの不要なプリインアプリがない状態で使用できる
    最近の機種はいらないアプリを無効化出来ますが、必要なアプリを購入後に希望に応じてインストールするのが本来の姿だと思います(プリインアプリまでは動作の保証をするという建前でしょうけど、出来の悪いアプリ始めから入れておいて調子が悪いというのはバカみたいです)。
    キャリアサービスのインストーラだけにして、必要なアプリは個人的に選択とかマジでどうですか?
    海外版の場合も仕向地によりプリインアプリは入っていますが、docomoのアプリのようにシステムの深部に入り込むものはありません。
   ③国内版でキャリアに無効化された機能が復活する
    有名どころではスタミナモードですよね。Zには結局降ってこなかった(怒。

 短所:

   ①当然自己責任(どこからもサポートは受けられない)
    ま、2年前の機種だし、保証は切れているので私的にはdocomoのサポートは全く要りません。ソニーモバイルのサポートも不要です。
    ちなみに、万が一Flash作業に失敗した場合は本当に文鎮化します。
    良くてもブートループです(端末がFlashmodeに入ることが出来れば、かなりの確率で復活できますが)。
   ②国内キャリア専用機能は使えなくなる
    ワンセグ・Felicaは海外版ROMでは当然使えません(NFCは使える可能性大)
   ③国内キャリア提供アプリは使えなくなる
    詳細は調べていませんが、専用メールアプリなどは使えなくなる可能性は高いです。
    Googleアカウントをお持ちなら、Gmailのアカウントも持っていると思いますので、この際にメアドは変更しておくことを勧めます。
   ③電波法違反の可能性がある
    端末の掴む電波の情報はBasebandとTAというところに記載されており、海外版の場合は仕向地の都合で国内キャリア版と対応バンドが異なります。
    仮に国内版のBasebandを残して動作可能にしても、その状態での技適(総務省でその端末の不要電波放出を一定基準以内と検査してある)認証が取られていないため、電波法違反になる可能性があります。

2.海外版に端末を変更するために必要なもの

 Flashtool(これを書いている時点で最新版は2015-05-30付の0.9.18.6です)
 いつもなら「お使いのOSに合わせてお好きなモノをダウンロードすること」と言いたいですが、現時点ではFlashtoolにXperifirm(Xperia用のファームウェア要素をダウンロードするアプリ)が統合されたWindows版をおすすめします。
 次期版はLinux・Mac版ともにXperiFirmが統合されるとか書いていますが、気長に待ちますか。

3.事前準備

 Flashtoolをインストールしておきます。
 端末内部のアプリはHeliumなどを用いて全てバックアップしてください(Flash後は工場出荷状態で使う人以外)。
 バックアップ後は端末の電源断にしてしばしお休みです。

4.変更処理

 (1)Flashtoolを起動

   お使いのPCにより32bit版と64bit版がありますが、その辺りはPCの環境に合わせてください。起動直後は下の画面ですが、その後上の画面になります。

 (2)XperiFirmを起動

   ツールアイコンの一番右XFと書いてある場所をクリックします。XperiFirmが起動します。

 (3)ダウンロード希望機種の選択


   XperiFirmが起動しますので、Xperia Zを選択します。
   海外版はC6602/L36h・C6603・C6616の3つがありますが、とりあえずC6603が正解です。クリックすると仕向地の一覧がずらっと表示されます。

 (4)仕向地の選択

 仕向地一覧から良さそうな仕向地を見つけます。正直どこでもいいのですが(仕向地とそのキャリアによりプリインアプリが入っている場合もあるが、国内版のような極悪アプリは見たことがないのでFlash後の不要なアプリのアンインストールは比較的容易でした)、LatestReleaseが確実に最新であることを確認してください。
 ちなみにCheckAllを押すと仕向地一覧の全キャリアに対してLatestReleaseを検索して調べます。Lollipop化する際は10.6.A.0.454以降がそれに当たります(未だにバージョンが古い仕向地もあるので間違わないこと)。

 (5)ファームウェアのダウンロード

 希望の仕向地(画面例ではCustomized UK)をクリックすると、右端に現在ダウンロード可能なバージョンが表示されますので、ダウンロードしたいバージョンをクリックするとこのダイアログが表示されます。

 このダイアログでDownloadをクリックすると自動的にネットから当該仕向地の当該バージョンがダウンロードされます。

 (6)FTFファイル生成処理

  ダウンロード終了後XperiFirmを終了するとFlashtool内部で自動的にダウンロードしたFTFファイルの元からFTFファイルを生成します。生成されたFTFファイルはFlashtoolのファームウェア保存フォルダに書き込みされます。

 (7)FTFファイルの書き込みその1

  Flashtoolのツールアイコン一番左の雷マークをクリックしてください。

  Bootmode Chooserは「Flashmode」にします。

 (8)FTFファイルの書き込みその2


  Firmware Selectorで希望のファームウェアを選択します。
  Wipe:Cacheは有効にしてください。Dataを有効にした場合、当然ながらユーザアプリは消えてしまいますので、現状のアプリをそのまま使い続ける場合はチェックを外してください
  Exclude:KERNELとSYSTEM以外はチェックを付けてください(Exclude = 除外)。特に国内版の対応周波数をそのまま海外版で使用予定なら、BASEBANDとTAには必ずチェックを付けてください。
  Reset:特に指定不要です。

 (9)FTFファイルの書き込みその3


  もう一度設定を確認したら、Flashを押します。まずはFlash用の準備中途表示されますが、その後端末をFashモードでPCに接続するメッセージが表示されます。Zの場合は電源断の状態から下ボリウムキーを押しながらPCとUSB接続するだけでFlashモードとなります。
その後、エラーが表示されないことを確認しながら少々待ちます。
最後にFinishedと表示されれば一応の書き込み成功です。

 (10)起動して動作を確認する

  さて、PCからUSB接続を切断し、電源ボタンを押してみてください。
  初期動作時はブートアニメーションが若干長めに表示されるため心臓に悪いですが、成功したらスタートアップ(工場出荷時)の画面が表示されます。
  Xperiaの場合は仕向地が欧州などでも日本語も予めインストールされているので安心して使用できます(なんとPOBoxも入っている)。

 (11)携帯電話としてのモバイルネットワークの確認

  電話アプリで*#*#4636#*#*を入力してテスト中アプリを起動し、携帯電話情報を表示します。
右上のメニューボタンをクリックし無線バンド選択で「JapanBand」があれば特にイジる必要はありません。
  また、電話アプリで*#*#7378423*#*#を入力してServiceアプリを起動し、Service InfoConfigurationWorking Band/sを確認してみましょう。
  UMTS_BC19とLTE_BC19,LTE_BC21(UMTSは3gの、LTEはそのまま)があれば元のBasebandがそのまま残っている可能性は高いでしょう。
  ここで言うBC19はdocomoのプラスエリアです。建物内部など地味に効いてますので、有効状態であることを勧めます。

 (12)root取得済みではどうしたらいい?

  10.5.A.0.230まで一度ダウングレードし、その状態でroot権限を取得する必要があります。その後はXZDualRecoveryをインストールし、最新版のfmtから作成したPrerootedのZIPイメージを焼いて下さい。
  上記の通りXZDualRecoveryを使用する場合は現状Android 5.0.2はブートループ状態になってしまうので、当面はKitkatで我慢して使い続ける必要があります(修正されるのを待ちましょう)。

 (13)やっぱり元に戻したい

  FlashtoolのXperiFirmを起動し、SO-02EのFTFを取得、これをFlashしてください。

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関連の記述を統一する必要があります。

2015年3月29日日曜日

Xperiaで機種変更の際のデータ・アプリの移行を行う

現状Androidが唯一iPhoneに最も劣っていると言わざるを得ない部分、それはデータの一元性ではないかと思います。
iPhoneの場合、よくも悪くもiTunesに全てのデータが一元管理されているため、これを使えば機種変更時も自動的に復元可能なようですね(使ったことが無いため詳細は不明です)。
Androidの場合、実は今回で移行2回目ですがちゃんとした方法がよく分かっていなかったので、自分なりにこれで復元できたというやり方を記載します。
今回はroot不要のパターンで記載します。

1.カメラ映像・音楽データなどを移行する

Sonyが提供するXperia Transferが使用できます。基本的にはこちらに記載の通りでOKですが、一応補足しておきます。
  • 移行元のスマホにGooglePlayでこのアプリをインストールし、抽出作業までを事前に行っておきます。
  • 移行元スマホでの抽出作業が終了したら、PCにインストール済みの「PC Companion」でXperia Transferを起動します。起動方法はPC Companionを起動した状態で移行先のXperiaを接続すると自動的に「Xperia Transfer」が表示されます。
  • 起動後、移行元のスマホの情報と移行したいデータの種別を聞かれるので、ダイアログに答えて移行元スマホを接続します。
  • 移行元スマホからデータを自動的に吸い込みが完了したら、スマホを交換するようメッセージが表示されますので、移行先のXperiaを差します。
  • エラーがでなかったらこれで移行が完了していると思います。
この方法でちょっとだけうーんと思うところとしては移行元のスマホにSDカードが刺されている場合は、その内部のデータも親切に移行はしてくれるのですが、自分のように大量に音楽データを入れている場合は移行先のXperiaにSDカードの挿入がない場合は容量が足りないとメッセージが出ました。
 この場合は音楽データのみ移行しなければいいんですが、ちょっとだけメンドクセって思いますよね。

2.アプリを移行する

アプリを移行する場合、root不要ならばheliumが便利だと思います。
 ただし、heliumはXperiaのようにPTPが標準でOFFにされているスマホの場合正常に接続されない場合があります。この際はPCにAndroidSDKをインストールしておき、スマホをadb shellで事前に接続しておけば回避できます(これはheliumの仕組みとして裏でadb  backup を使用しているため)。
  • 移行元の端末でheliumを立ち上げ、バックアップを行います。root取得済みの端末はPCとの接続は不要ですが、未取得端末はPCにheliumアプリのインストールが必要になります。私はChromeアプリが便利なのではないかと思います。
  • バックアップの際、「アプリデータのみ(最少のバックアップ)」に付いているチェックボックスを外すことをお勧めします。何故かと言うと、このオプションを有効化するとお分かりの通りアプリデータしかバックアップされません。今回はアプリごとの移行がしたいのだからチェックボックスは無効が正解です。
  • 出来れば全部のアプリをバックアップしたほうがいいでしょう。ただし、ユーザアプリでも移行後の端末で重複するものがありますので、そういうものはリストアの際にチェックボックスを外しましょう。
  • 選択後、バックアップボタンを押すとバックアップ先を選択できます。通常は内部フラッシュにバックアップし、バックアップ完了後にFileCommanderなどでSDカードに複写するといいでしょう(フラッシュ内部のcarbonディレクトリごと複写します)。
  • SDカードを新しい端末に付替し、新しい端末にheliumをインストール後にこれを起動します。
  • helium起動後、リストアを選択してリストアしたいアプリを選択します。SDカードのcarbonフォルダを消さない限り未リストアアプリをあとで復元することは可能なので、慎重に復元しましょう(新しい端末に同じアプリがあった場合不具合が出る可能性があるため)。
正直、ホームでフォルダを作成している場合、サードパーテイのホームアプリの方が復元できますよね。ここだけがXperiaホームを使用した場合の不満です。
**画像は後で貼ります。

2015年2月15日日曜日

自撮り棒からフォーンプラグのリモコン制御を調べてみる

 私の住んでいる北海道の地方都市には近年アジアからの観光客が多数来訪しています。特に南方の香港と台湾の方々は冬期になるとよく見かけます。
 そんな彼らは最近自撮り棒を持参していることがよくあります。要は黒板を示すときの延長可能なスティックの先端にスマホを取付可能な構造なのですが、Xperiaの場合は棒の手元のシャッターボタンが動作しないという話があるのでちょっと調べてみました。

1.自撮り棒(有線版)のシャッター制御

フォーンプラグ(イヤホンプラグ)にジャックを差し込んで有線制御するタイプの自撮り棒でXperiaでの動作不能の原因はカメラアプリが標準ではボリウム調整ボタンでズームアップ・ダウンに設定されているためです。
 これはカメラアプリの「音声キー設定」で「シャッター」に設定変更すれば動作します。ま、ズームアップはスワイプで制御しましょう。

2.フォーンプラグでのリモコン制御方法

4極フォーンプラグでマイクが付属されており、さらに3〜4個のボタンが付いているものがあります。最近の4極プラグはCTIAという規格(以前自分が使用していたXperia arcはOMTPという別規格だった)なのは知っていたのですが、このボタンがどのような回路で制御されているかちょっと調べたので記録に残します。
 Androidの場合はWired audio headset specificationで記載のとおりでした。要は再生ボタンはマイクとGNDをそのままショート、240Ωの抵抗値の場合はボリウム+、470Ωの抵抗値の場合はボリウム-制御になるということですね(おまけになりますがボイスコマンド制御は135Ω抵抗値とも書いてます)。

3.自撮り棒用撮影ボタンの作成・入手

 買ったほうが安いと思いますが、もし自分で作るならボタン押し下げでボリウム+と同じ抵抗値になる様に作れば良いと思います。自作するなら、リモコン制御用の中継線を作ると思いますが、どっかに売ってないかなぁってamazon辺り見ていたら有りますね。ただし音が悪くなるとかの書込を見る限りではあまりメリット無いかなぁ。

4.おまけ 4極プラグでの制御について
 2項でも記載しましたが、最近4極プラグに3ボタンのイヤホンが発売されています。店頭での視聴時にボタンアサインが正常に動かない事例があったので、これについておまけを記載したいと思います。
 上記の Wired audio headset specification で記載の内容を参考に治具を作成してみましたが、GNDはそのまま接続しさらにMicも1kΩ以上の抵抗で常時接続状態にしておかないとフォーンプラグは正常に動作しません。
 Micに対して並列の抵抗+スイッチが押された際にMic端子への合成抵抗が上記0・135・240・470(±1%)Ωの際にそれぞれのコマンドを認識するということのようです。今回視聴したイヤホン(ゼンハイザーのMomentum In-Earでした)では真ん中のボタン(Play/Pause/Hook?)がVol-Upとして認識されており、抵抗値があるのかもしれません。

2015年2月3日火曜日

MVNOでドコモから逃げる算段をする(GPS篇)

10年以上ドコモを使ってきたけど、スマートフォンからは迷走が続いてるような気がする。
それ以前は護送船団方式を取らないと自分たちの実現したいサービスを均一に保てないのは当然だったと思うけど、今のスマートフォン戦略は色んな意味で私の望む方向性とは違う。

  • 昔のメーカ製PCじゃないんだからプリインアプリをてんこ盛りにしないで欲しい(しかもバッテリドレインやメモリ大量消費・バグ満載のオマケ付き)。
    特にドコモ専用のホームアプリは不要だと思う。
  • キャリア販売店の保障は要らない。端末メーカからのハードウェア保障は欲しい。
    自分のように端末を弄りたい人間にとってはドコモの端末保障は不要。
    (わかってやっているのだから逃げ道まで塞がないで欲しい)
  • インフラ整備は確かに投資が厳しいのは非常によく分かるのだが、今の料金体系は正直高過ぎと感じる。
    家族3人分で新しいカケホーダイ+パケットシェアパックの見積もりを取ったが、現状より月9千円高くなった(そのうち2台分はパケットを使用していない契約からシェアパックに切替なので高くなるのはわかるとしても)。
というわけで、今まではお世話になったり我慢して使ってきたけど、MVNOという便利な仕組みが出来てキャリアの縛りは不要になってきたので、現状使用しているSO-02Eをそのまま移行する場合はどのようなデメリットが出るかをざっと考えてみた。
あ、あえて言うけど他のキャリア2社との契約はありえない。ドコモと同じく端末の縛りがあるのが一番の理由だけどそれ以外も以下の通り。
  • KDDI:CDMA-Oneの頃の交換網接続にかかる時間が遅過ぎのイメージがあったり、結局万年2位の染み付いたようなプロモのやり方(様子見後追いで同様のサービスを派手に盛り上げようとする態度)が嫌い
  • ソフトバンク:商売は上手だと思うけど、企業倫理的に気に食わない。ゴリ押しと必要性で900MHz帯域を整備出来たのはいいけど、その皺寄せを保守受託先や施工会社に押し付けたのは知ってるぞ。
それにドコモのスマホなのでMVNOで他社キャリアへ乗り換えても電波的にメリットはないから、自ずとドコモ系のMVNOとなる。という訳で以下でMVNO化してサービスが低下しそうな項目を挙げてみた。
  • 電子メール:キャリア独自のものは使えない。もともとそんなに使っていなかったので問題なし。
  • ネットワーク速度:現状はXiのパケホーダイダブルのため、普段はモバイルネットワーク常時無効であった。MVNO化してパケットが使えるのならば通信速度が落ちてもサービスは向上したので問題なし。
  • Felica:ひとつの問題点。ドコモのサービスに直結しているものはどうしようもないだろう(iDとかは使ってないので問題なし)。
    Suicaとかはドコモのサーバとは関係なく独立しているようなので動くようだ。
    正直交通系のうち、使いそうなのは航空会社のモノだけだし、普段は使わないので実害はなさそうだ。
  • GPS:今回の最大の問題点。とは言っても全く使えなくなるわけではない。ColdStartの時に非常に現在値表示までに時間を要するだけ。
という訳で今回はMVNOで問題となっているGPSの件、どうやったら解決できるか考察してみた。

1)問題となるGPSの接続について

 GPSを使用する場合、衛星からすぐに情報自体は受信しているのですが、それが位置情報となるには手順を踏む必要があるようです。
 初期化状態で受信する際はColdStartと言われる手順で衛星の位置情報を収集する必要があります。
 一度位置情報を確立したあとでは、WarmStartHotStartという手順で再測位を高速化可能なのですが、要はColdStart時に出来るだけ測位を早くする仕組みが(A-GPS)現在のスマホは内蔵されています。方法は以下の2種類あるようです。
  • SUPL 通信キャリアが提供するSUPLサーバより補正情報を受信する
  • GPSチップ独自規格 SUPLを使用出来ない環境でも同様のサービスを提供する
 ただし、ドコモのスマホ内部設定ではSUPLにドコモのサーバを指定しその接続にはSPモード(ドコモ内部の通信網)を使用するため、MVNOに移行した端末(普段モバイルネットワークを無効にした端末も)はColdStart時の接続確立に非常に時間がかかります。
 ちなみにSO-02EにはGPSチップ独自規格としてQualcommのgpsOneXTRAが使用できるようですが、これもGPSチップドライバのハードコードで機能自体を無効化されているようです。
 ちなみにMVNOによるGPSの動作に関する詳細はこちらを読むと非常にわかりやすい。MVNOの代表格とも言えるIIJの方が検証した内容なので非常によくまとまっているし、信頼度は高いです。

という訳で以下の通り修正が必要なようです。

2)アプリで何とかする方法

先に紹介したIIJの資料によるとGPS Status and Toolbox を使用すると、直接GPSデバイスドライバへAPIを叩いてA-GPSデータを取得するようです(多分この場合はSO-02Eの場合はgpsOneXTRAのサーバへ問い合わせするのでは?)。
 たしかにこの方法ならインターネット接続さえされていればA-GPS情報を取得可能でしょうし、測位終了後別なアプリを開けばスムーズに使えると思います。
 実際このアプリは常用させて頂いております。現在補足中の衛星を全部表示してくれるため非常に見やすいし、自分の場合はモバイルネットワークを常時切りのためSUPLは取得出来なかったので...。

3)gps.confの書換とルート証明書のインストール

 /system/etc/gps.conf がGPSの設定ファイルです。現状のドコモのスマホの場合は大概以下のとおり記載されているので、これを書換えます(要はSUPLはGoogleのサーバを使用し、gpsOneXTRAの設定を有効化、NTPサーバを日本に変更する)。
変更前(対象箇所のみ抜粋)
SUPL_HOST=dcm-supl.com
SUPL_PORT=7275
SUPL_VER=0x20000

#XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
#XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
#XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin

NTP_SERVER=time.gpsonextra.net
変更後
SUPL_HOST=supl.google.com
SUPL_PORT=7276
SUPL_SECURE_PORT=7278
SUPL_NO_SECURE_PORT=3425
SUPL_TLS_CERT=/etc/SuplRootCert

AGPS=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin

NTP_SERVER=ntp.nict.jp
NTP_SERVER=jp.pool.ntp.org
NTP_SERVER=0.jp.pool.ntp.org
NTP_SERVER=1.jp.pool.ntp.org
NTP_SERVER=2.jp.pool.ntp.org
NTP_SERVER=3.jp.pool.ntp.org
次に以下のサイトを参考にHTTPSでSUPLを接続する際のSSLルート証明書SuplRootCertを作成します。これは自分のPCの内部でコマンドを実行し、作成します。
wget https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem
openssl x509 -inform PEM -in GeoTrust_Global_CA.pem -outform DER -out SuplRootCert
作成・修正したgps.confとSuplRootCertは実機の/system/etcに複写します。念のため、元のgps.confのバックアップは保存して下さい。

4)ドコモ版ではないGPSドライバをインストール

海外版のC6603のftfファイルをダウンロード後、system.sinを抜き出してその中から/system/lib/hw/gps.default.soを取り出します(ここで前日に書いたftfファイルへのアクセス方法が必要になる)。
 あとは自分の端末の/system/lib/hw/gps.default.soと抽出したものを取り替える。


Linux Mintでftfファイルの中身を見る方法(出来るだけシェルは使用しない)

変態と言われるかもしれないが、自分のメイン環境はLinux Mintです。
PC CompanionのようにどうしてもWindowsでなければ動かない環境時は常にこちらがメインになっております。
という訳で今回、ftfからファイルを取り出す方法をLinux Mintで出来るだけシェルを使わずに行ってみました。


1)ftfファイルから希望のsinファイルの抽出


 アーカイブマネージャを起動し、ftfファイルを読み込みます(ftfファイルの実体はzipファイルです)。
 希望のsinファイルを選択し、「展開」ボタンを押し保存します。

アーカイブマネージャによるftfファイルの展開


2)sinファイルからext4ファイルを抽出


 flashtoolを起動し、「Tools->Sin Editor」でSin Editorのダイアログを表示させます。
 ダイアログの"..."で操作対象のsinファイルを指定し、"Extract data"を押してしばし待つとext4を拡張子にしたext4形式のイメージファイルが生成されます。
flashtoolの初画面
Sin Editorのダイアログ




3)ext4イメージファイルをマウント


 Linux Mint(Ubuntu Linux)の場合、"gnome-disk-image-mounter"というものがインストールされています。これだけは標準ではシェルスクリプトでコマンドを入れないとでませんが、起動後にイメージファイルを選択するとCinammonのウィンドウ左側に指定したイメージがマウントされているのがわかるかと思います。

 なお、"/usr/share/applications/gnome-disk-image-mounter.desktop" ファイルを編集し、"NoDisplay=true"をコメントアウトすると、Cinammonのメインメニュー最上部にあるテキストボックスに"disk"と入力するとディスクイメージマウンターが表示されます。

2015年1月31日土曜日

(Xperia)ブートループ化した際の復活の呪文

 散々カーネルモジュールとかいじっているのに、実はinit.dが正常に動いていませんでした(原因はGoogle PlayでダウンロードしたBusyboxがrun-parts実行中にセグメンテーションフォルトで停止していた)。
 原因が判明したのはいいんですが、その際にどこかのファイルを壊したのか再起動後にSONYのロゴ表示を繰り返す...
 という訳で備忘録を兼ねて、ブートループになった際の復活方法について記載します。

1.PC Companionをインストールする

以前は端末のアップデートのみ可能なUpdateServiceというアプリが提供されていましたが、投稿時はPC Companionがその役割(というか、その中のSupport Zone)を行います。
PC Companionはそれ以外にもそれなりに使えるアプリが詰まっていますので予めPCに入れておくことをお薦めします。

2.SupportZoneを起動する

PC Companionを起動し、ダイアログの一番左にあるSupport Zoneのボタンを押して起動します。この時点でSupport ZoneをPC内部にインストールしていない場合は自動的にインストール後に起動します。
ここから先は具体的に記載しようと思いましたが、こちらのガイドがわかりやすいのでソフトウェアアップデートに失敗した場合はどうすれば良いでしょうか?をそのまま載せちゃいます。
【5】のラジオボタンはまずは「現在の携帯電話/タブレットのソフトウェアを再インストールする」を使ってみましょう。これで修復出来ない場合は諦めて「現在の携帯電話/タブレットのソフトウェアを修復する」を試してみればよいでしょう。

後程、flashtoolでルート取り直しを行った際に思い出したのですが、SupportZoneで行っているこの修復方法って、flashtoolでの端末flashと全く同じですね。慣れればflashtoolの方が便利かもしれないですね。

あともう一つSupport Zoneを入れておくと便利なこと、自分のPCの中でflashtool向けのftfファイルを生成できます。世の中便利なものでftfファイルをインターネットダウンロード出来るサイトはありますが、アップデート公開直後にまだftfファイルが公開されていない場合は自分で作る必要があります。この時にftfファイルを作るための素がSupport Zoneのフォルダにキャッシュのように残っています。

つか、今回はrootとっている人なら誰でもわかるような知識だけど、Sony mobileやキャリアに迷惑かけないために是非知っておくべき知識でした。

2015年1月25日日曜日

smartassH3をいじってみる

AndroPlusの作者がXperia Z2・Z3むけにカーネルを作成しています。
GitHubを使用しているため、ソースコードを拝見することが出来、色々と比較してみました。

  1. AnDyXX氏が作成したsmartassH3のソースコード(今回こちらをいじっている)は、C3C0が作成したZTE skateのsmartassH3のオリジナルソースコードとほぼ変わらなかった。
  2. 次に、2chのGXスレッドで154氏が書いたソースコード(smartassV2)にはboostの設定が追加されており、システムからboost_pulseを受信するとCPU周波数を上昇させる挙動がなんとなく見えました。また、workqueueの割り当てがalloc_workqueue()に変更されていましたのでこれをマージした。
  3. AndroPlusカーネルではcpufreq_governor_smartass_h3にて全てのCPUコアに対して設定を行っているようなのでここをマージした。
  4. idle_notifier_register・idle_notifier_unregisterの記述は、AnDyXX氏のソースコードではあった(ストックカーネルのinteractiveにはある)のでそれはそのまま残した。

なお、Tunable parametersを以下の通り変更しました。原文のコメントと共に自分なりの翻訳も付けてみた(間違っているかもしれないのはご了承下さい)。

/*
* The "ideal" frequency to use when awake. The governor will ramp up faster
* towards the ideal frequency and slower after it has passed it. Similarly,
* lowering the frequency towards the ideal frequency is faster than below it.
*
* 個人的な翻訳(以下、他のパラメータも記載)
* スリープ解除時に利用する「理想的な」周波数設定。CPUガバナは理想的な周波数へ
* 素早く上昇し、それを超えた場合(オーバーシュート時)はゆっくり下降させる。
* 同様に理想的な周波数まで下げる際はそれを超えた場合より素早く下降させる。
*/
#define DEFAULT_AWAKE_IDEAL_FREQ (702*1000)
AnDyXXのソースコードの値は378000、Xperia Zは最大周波数1.5GHzのため、この半分で周波数テーブルと同じ値にした

/*
* The "ideal" frequency to use when suspended.
* When set to 0, the governor will not track the suspended state (meaning
* that practically when sleep_ideal_freq==0 the awake_ideal_freq is used
* also when suspended).
*
* サスペンド時に使用する「理想的な」周波数
* 0にセットした際、CPUガバナはサスペンド状態を監視しない(実際には
* sleep_ideal_freq==0 の際はサスペンド時にもawake_ideal_freqを使用すると
* いう意味である)。
*/
#define DEFAULT_SLEEP_IDEAL_FREQ (384*1000)
AnDyXXのソースコードの値は378000、サスペンド時は周波数テーブルの最低周波数384000とした

/*
* Freqeuncy delta when ramping up above the ideal freqeuncy.
* Zero disables and causes to always jump straight to max frequency.
* When below the ideal freqeuncy we always ramp up to the ideal freq.
*
* 理想周波数まで上昇させる際の周波数変動値
* 0の場合は一気に最高周波数まで上昇させる。
* 理想周波数より低い場合、理想周波数まで上昇させる。
*/
#define DEFAULT_RAMP_UP_STEP (216*1000)
AnDyXX氏のソースコードでは80000、この値はC3C0氏のコードでは最大周波数/10位(ZTE steakの最大周波数は800MHz)のため、当初は(108*1000)にしてみた。しかしこの値では384Mhz〜486MHz間をうろうろし、周波数が上がらない(ようだった)ので2倍に変更(AndroPlusカーネルの作者様に質問し教えていただいた)。
/*
* Freqeuncy delta when ramping down below the ideal freqeuncy.
* Zero disables and will calculate ramp down according to load heuristic.
* When above the ideal freqeuncy we always ramp down to the ideal freq.
*
* 理想周波数まで下降させる際の周波数変動値
* 0の場合はCPU負荷状態を確認し一気に所要周波数を下降させる。
* 理想周波数より高い場合、理想周波数まで下降させる。
*/
#define DEFAULT_RAMP_DOWN_STEP (216*1000)
DEFAULT_RAMP_UP_STEPと同様。

/*
* CPU freq will be increased if measured load > max_cpu_load;
*
* CPU負荷がmax_cpu_loadを越えた際、CPU周波数を上昇させる。
*/
#define DEFAULT_MAX_CPU_LOAD 85
参照したソースコードでは変更した形跡はないためそのまま

/*
* CPU freq will be decreased if measured load < min_cpu_load;
*
* CPU負荷がmin_cpu_loadを下回った際、CPU周波数を下降させる。
*/
#define DEFAULT_MIN_CPU_LOAD 70
参照したソースコードでは変更した形跡はないためそのまま

/*
* The minimum amount of time to spend at a frequency before we can ramp up.
* Notice we ignore this when we are below the ideal frequency.
*
* CPU周波数を上昇させるまでに必要な最少経過時間
* 理想周波数より低い場合はこの値は無視する。
*/
#define DEFAULT_UP_RATE_US 48000
参照したソースコードでは変更した形跡はないためそのまま

/*
* The minimum amount of time to spend at a frequency before we can ramp down.
* Notice we ignore this when we are above the ideal frequency.
*
* CPU周波数を下降させるまでに必要な最少経過時間
* 理想周波数を超えている場合はこの値は無視する。
*/
#define DEFAULT_DOWN_RATE_US 49000
参照したソースコードでは変更した形跡はないためそのまま

/*
* The frequency to set when waking up from sleep.
* When sleep_ideal_freq=0 this will have no effect.
*
* スリープ解除時に設定される周波数
* sleep_ideal_freqを0に設定した際、この値は無視される。
*/
#define DEFAULT_SLEEP_WAKEUP_FREQ 99999999
参照したソースコードでは変更した形跡はないためそのまま

/*
* Sampling rate, I highly recommend to leave it at 2。
*
* サンプリングレート、2のままにしておくことを強く推奨する。
*/
#define DEFAULT_SAMPLE_RATE_JIFFIES 2
参照したソースコードでは変更した形跡はないためそのまま
最終的には、もう少しはチューニングしてみようかと思います。

2015年1月18日日曜日

電波時計をローカルで同期させる(Android端末利用)

 最近置き時計・目覚し時計はそれなりの価格のものにも電波時計の機能を持つものが増えてます。
 私の家にも電波時計対応の置き時計は4個ほど有りますが、自宅が鉄骨鉄筋コンクリート造のため福島県の電波でも部屋の奥には届かないようです(北海道在住のため遠いというのもあるのですが)。
 電波時計用の標準電波(JJY信号と言います)を再送信する機械は販売されていますが、業務用・民生用ともに高価なため今回はAndroid端末で動作するアプリをご紹介します。
 なお、このアプリを使用した場合JJY信号を勝手に送信するため、自宅内だと問題にはなりませんが、強力なアンテナで送信した場合は電波法違反になるおそれがあります。

 ちなみにGoogle Playで"JJY"のキーワードで検索されるアプリは私の環境ではちゃんと動作しませんでした。おそらくAndroid SDKでのタイマーの使用方法が変わったためそれが影響したものだと思われます。


1.JJY信号を自宅で送信するには

本当ならば40ないし60kHzの信号をビーコンのように送信するものです。
スマホのフォーンプラグからは通常は24kHz以上の音声信号は送信できませんが、これを13.333kHzの信号を3次高調波にして39.999kHzで送信するようです。
技術的に詳細を知りたい場合はこちらを参照下さい(PCでJJY信号をサウンドカードから送信する話と、JJY信号用のアンテナ作成の話が記載されています)。

2.Android端末でJJY信号を送信するアプリ

こちらをお勧めします。
このアプリを起動し、画面右下の「同期」ボタンで事前に端末の時刻をNTPプロトコルで同期してから(NTPプロトコルを使用するため、当然ネットへの接続が必須)、画面中央の「同期開始」ボタンを押すと、端末からJJY信号の音声が出力されます。
ちなみに3Gで通常の待受状態だと、基地局との間で時刻同期されているようでNTPでの同期は不要となります。
端末のそばに電波時計を起きしばし待つと、時刻が同期されます(電波時計は手動同期ボタンを押してお待ちください)。

3.音声出力アプリ向けのJJY信号用アンテナについて

一番手ごろなのはコンポのチューナにセットされているループ型のAMアンテナを流用する方法です。
AMアンテナのチューナ接続部(多分銅線2本)に3.5mmのフォーンプラグを付けるだけです。

2015年1月17日土曜日

ソフトキーのあるAndroid 端末でナビバーを隠す(Kitkatまで動作確認)

ナビバー(ソフトキー)有

GoogleのNexusがそういう実装のため、現在発売されている大概のAndroid端末はナビーがソフトキー(画面でメニューバーの「戻る」・「ホーム」・「メニュー」アイコンが描画されている)になっています。
ソフトキーでもハードキーでも全然構わないのですが、ソフトキーが常時表示されると画面が少し狭くなってて少し損していると感じるのは私だけではないと思います。 そこで、今回はいろいろな形でソフトキーを隠す方法を記載します。

1.root化不要(動作するかは環境次第?)

GMD Full Screen Immersive Mode」が使用できます。残念ながら、動作しないとの報告もあるようですが、root取らずに隠すことが出来るなら使ってみる価値はあるかと思います。
このアプリは後述の「GMD Auto Hide Soft Keys」と同じく、通常はナビバーを隠し、画面最下部をクリックもしくはスワイプでナビバーを復旧させます(ナビバーを表示可能な最下部部分は通常赤色の線が表示される)。
また、Known issues(既知の問題)ではナビバーを隠している際にはキーボードが動作しないとあります。

2.root化が必要(以前使用していました)

GMD Auto Hide Soft Keys ★ root」が動作するかもしれません。
私はJerryBeans(V4.2)までは常用していました。
Kitkatではなぜか電話アプリで通話ボタンが隠れてしまうバグがあり使用をやめています(電話できないのではスマートフォンではないでしょう)。

3.root化が必要(タブレットでは便利)

以前使用していた中華タブレットで「full screen」を使用していました。
これの良い所は、画面の左下と右下角にうっすらと「戻る」と「ホーム」のアイコンが常時表示されており、ここをクリックすると操作可能になります。
また、「戻る」と「ホーム」ボタンは長押しで別な機能を追加可能です(たとえば右下角を長押しするとパイチャートを表示して拡張メニューを開くなど)。
唯一の問題点はメニューバーが隠れた際にキーボードを表示するとキーボードのボタンとfull screenのボタンが重なることでしょうか。

4.常にナビバーなんか要らない(別な方法で何とかする。当然root必須)

この方法は「Gravity Box」と「LMT Launcher」を併用する方法です。
私の購入した中華タブレットではGravity Boxが動作しなかったので、これが動作する端末以外では動作しませんが、この方法だと完全にナビバーが不要になります。
ナビバー(ソフトキー)なし
上記の1〜3はGoogle Playからダウンロードすれば誰でもお試し出来るかと思いますので、以下では4の方法について説明します。
1)LMT Launcherをダウンロード
 先のリンクからダウンロードし、使える状態にします。
 ナビバーを隠す場合は標準の「Pie」のみでも可能ですが、私の場合は「ISAS」も有効にしたいため、「Define feature set」を「Gestures, ISAS and Pie」にしています。
 ちなみに「ISAS」は画面の最下部に不可視のナビバーがあるように指の画面最下部から上へのスワイプで動作させる方法です。

2)LMT Launcherの設定(ISAS)
 「Set input device」を指定します。メニューの中に自分の端末名があるか探してください。ちなみにXperia Zの場合は 1.で正常動作します。
 「MIN BOUNDING BOX SIZE」に「1」を指定します。
 「ACTIVATION AREA THICKNESS」を指定します。デフォルトでは60pxですが、それより大きく・小さくしたい場合は指定数値をここに入れます。

3)ISASの動作確認
 各設定を指定して「LMT Launcher」を動かした状態で画面の最下部中央からタッチスクリーンをスワイプしてみてください。ホームに移動したらISASは正常に動作してます。
 また、画面の左端からスワイプしたらPieメニューが表示されたらこちらも動作の確認完了です。

4)Xposed Frameworkのダウンロード
 Gravity Boxを動作させるにはXposed Frameworkが必要です。XposedはAndroid本体の各ファイルを変更せずに必要な機能をアプリとしてプラグイン化することが可能なものです(ただし、競合する機能を重複させた場合は動作がおかしくなる可能性あり)。
 Xposed FrameworkはこちらからXposed Installerをダウンしてインストールして下さい。
 インストール後にXposed Installerを開き、「フレームワーク」から「インストール/更新」をクリックしてフレームワークをインストールします。インストール後は再起動が必要です。

5)Gravity Boxをインストール
 再起動後Xposed Installerを開き、「ダウンロード」から「Gravity Box」を検索します。検索方法は虫めがねのアイコンをクリックして「Gravity」と入れるだけです。
 Gravity Boxには[KK]と[JB]があるはずですので、お使いのバージョンに合わせてダウンロードしてください。
 ダウンロード後は「モジュール」からインストールした「Gravity Box」のチェックボックスをチェック済みにします。

6)Gravity Boxの設定
 「ナビバー設定」で「有効/無効の切替」をONにし、「ナビバーの有効化」をチェック、「ナビバーの高さ」を0%にします。この状態にしないとXperia Zでは通話アプリで通話用のボタンが消えてしまいました。
設定後は再起動します。

7)ナビバー消去の確認
 ナビバーが完全に消え、LMT launcherのPieとISASが正常に動作することを確認します。

Xposed Installerは他にも便利なアプリがいろいろあります。現状Lollipopには対応しておりませんが、Kitkat以前をお使いならば是非インストールしても損は無いでしょう。

あと、Android純正ブラウザで全画面を有効にした場合、ブラウザのパイチャートとLMTのそれが重なってしまいます。その場合はLMT側で設定を変更してみてください。

2015年1月15日木曜日

AndroidのV4.4(KitKat)でSELinuxをPermissiveモードに変更する。

自分が使っている限りではあまり影響に気づいていませんでしたが、KitKatではSELinuxに正式に対応(それまではインストールされていましたが、Permissiveモードで動作)したためメーカがビルドする際に作成したSELinuxのルールによりアクセス制限が掛けられる(Enforcingという)ようです。
これに気づいたきっかけとしては、先日書いたColorflyのタブレットでのroot権限でのフラッシュメモリアクセス制限の理由を調べていたためです。

SELinuxの詳細はまだ掴みきれていませんが、これを以前のバージョンのようにPermissive(ルールファイルは読込し解析を行うが、違反を発見した場合はログ出力のみでアクセス制限はしない)モードで動作させるために一番手っ取り早い方法としてはSELinux Mode Changerを紹介します。

このアプリ、当然ながらroot権限でなければ動作しません。

インストール後にアプリを起動すると、画面中央に「Enforcing」と「Permissive」の2つのボタンがあり、どちらかがグレーアウトされているかと思います(グレーアウトしている方が現在適用されているルール)。
グレーアウトしていない、操作可能なボタンを押すだけで切り替え可能です。
これだけで本当に切り替え可能かどうか、確認するためにadb shellにて端末に潜り、/system/bin/getenforce  を実行して戻り値を確認したところ、Permissiveに変更した状態では確かに「Permissive」と表示されています。

なお、このアプリは端末再起動時に自動的に起動し、端末の設定を変更するようです。

Enforcingでメーカが出荷した端末に対し、勝手にPermissiveにしてセキュリティ対策を弱める行為はくれぐれも自己責任でお願いします(ただし、Enforcingの場合はかなり端末のリソースを消費するらしいので、Permissiveにしたほうが電池持ちなどが良くなる可能性はある)。

2015年1月12日月曜日

Android 4.4(Kitkat)でのフラッシュメモリ読込・書込権限について(調査中)

先日Colorfly e708 3G Proという中華タブレットを購入しました。
中華タブレットは以前に購入したPIPO S1という機種を使用しておりましたが(一応今でも所有はしているが)、Google Playでアプリのアップデートをするだけで処理が固まる現象に悩まされていました(購入直後は画面描画がフリーズして暴走する現象に悩まされた)。

ま、本題に戻してこのタブレットの問題(本題)に入ります。
中華タブレットは内蔵フラッシュが8GBくらいあるうち、本体メモリ(/data)が1GB程度しか確保されていないものが多く、常用するためには本体メモリを増やす(今時2GBは必要でしょう)かLink2SDを使用してSDカードの第2パテーションを/dataの増量に使う必要があります。

しかしながらこのタブレット、rootの場合は内部・外部SDへの読込権限がない。というか、正確には当該ディレクトリへのアクセスは可能なのだが内部・外部SDのファイルが全くない表示になってしまう。

具体的にはadb shellで接続した場合の各ディレクトリのユーザ・グループ・パーミッションは以下の通り。


  • adb shell接続時(ユーザID2000)の各ディレクトリ情報とアクセス

shell@E708 3G Pro:/ $ ls -l /mnt
drwxr-xr-x root system 2015-01-12 20:57 asec
dr-xr-xr-x root root 2012-03-12 16:30 cd-rom
drwx------ media_rw media_rw 2015-01-12 20:57 media_rw
drwxr-xr-x root system 2015-01-12 20:57 obb
lrwxrwxrwx root root 2015-01-12 20:57 sdcard > /storage/sdcard0
lrwxrwxrwx root root 2015-01-12 20:57 sdcard2 > /storage/sdcard1
drwx------ root root 2015-01-12 20:57 secure
※ここでsdcardは内部フラッシュ、sdcard2は外部SDカードを示す。

1|shell@E708 3G Pro:/ $ ls -l /storage
drwxrwx--x root sdcard_r 1970-01-01 09:00 sdcard0
drwxrwx--x root sdcard_r 1970-01-01 09:00 sdcard1
drwx------ root root 2015-01-12 20:57 usbotg

cd /mnt/sdcard 後にlsでファイル閲覧は可能
cd /mnt/sdcard2 後にlsでファイル閲覧は可能

  • suでrootになったあとの各ディレクトリ情報とアクセス

root@E708 3G Pro:/mnt # ls -l
drwxr-xr-x root system 2015-01-12 20:57 asec
dr-xr-xr-x root root 2012-03-12 16:30 cd-rom
drwx------ media_rw media_rw 2015-01-12 20:57 media_rw
drwxr-xr-x root system 2015-01-12 20:57 obb
lrwxrwxrwx root root 2015-01-12 20:57 sdcard > /storage/sdcard0
lrwxrwxrwx root root 2015-01-12 20:57 sdcard2 > /storage/sdcard1
drwx------ root root 2015-01-12 20:57 secure

root@E708 3G Pro:/mnt # ls -l
drwx------ root root 2015-01-12 20:57 sdcard0
drwx------ root root 2015-01-12 20:57 sdcard1
drwx------ root root 2015-01-12 20:57 usbotg

cd /mnt/sdcard 後にlsでファイル閲覧不可
cd /mnt/sdcard2 後にlsでファイル閲覧不可

rootexplorerでアクセスした場合、/mnt/sdcardや/mnt/sdcard2に直接アクセスした場合はOKなのですが、一旦root権限を取ったあとでは上記のディレクトリを開いてもファイル閲覧できなくなります。

ごらんの通り、一般ユーザの場合は内・外部SDカードはsdcard_rというグループですが、rootの場合はrootのグループに変更されています。

Kitkatでは一般ユーザではSDカードに書込する権限がないという問題に関して、AndroPlusのこちらの通り/system/etc/permissions/platform.xmlWRITE_EXTERNAL_STORAGE<group gid="media_rw" />を追加する方法を見習って<group gid="root" />を追加してみましたがそれでもダメなようです。

あと中華タブレットはストックカーネルではバッテリ消費のチューニングが足りないようですが、SONY Mobileのようにカーネルソースコードを公開してくれないので、手を入れるのはかなり困難っぽいですね。

タイヤの真実について(その2)

1年ぶりにタイヤの真実について書き続けていきます。
インチアップしてもタイヤと地面の接地面積はあまり変わらない


「インチアップする場合、必ず幅広タイヤ使うってことは接地面積が増えるだろ」って思いますよね。
でも、インチアップで偏平率が上昇した際に、タイヤ幅を太くすると同時にリング剛性(タイヤの輪の部分=進行方向の強度)が上がりたわみにくくなるので「地面と接する長さが短くなる」のはご存知ですか?
逆に偏平率が低いタイヤはリング剛性が低いため、結果としてはそれだけ「たわみ量が増えて地面と接する長さが長く」なります。
箇条書きにしてみましょう。

  • 偏平率が低いタイヤ
    タイヤ幅=細い  接地長=長い
  • 偏平率が高いタイヤ
    タイヤ幅=太い  接地長=短い
接地面積は幅×長さですから「インチアップで接地面積があまり変わらない」結果になることがわかるかと思います。

それでは何故、「インチアップするとタイヤのグリップ力が向上し、乗り心地が悪くなる」のか?
次回はもっと突っ込んだ話を書きます。

BLUL不可能なAndroid端末でモジュールを作成する方法(Xperia Z  SO-02E編)

 さて、備忘録を兼ねて記録を残していきます。
 日本国内のスマホは現在販売されているものはBLUL(ブートローダの解錠)が出来ないため、端末の自由な改造が出来ません。
 私はパズドラ他スマホではゲームはほとんどしないため、そんな不自由な状態ではつかいたくないので、自分の知識を付ける目的でroot取得後にCPUガバナを移植してみることにしました。

 え、ストックのガバナが性能と省電力のバランスが最高ではないのかって?そうかもしれないけど、もしかしたらそうではないかもしれない。やってみて損はないでしょ?
 また、自分はXperiaユーザのためSONY mobile製品の話しか記載しておりませんが、他社でも同じ方法で作成することが出来るかと思います。

1)前提条件

  • 端末の管理者権限(root)取得
    大前提。root取得した時点で、故障時にドコモショップほか通信キャリアのショップへの持ち込みはしないと心に誓うこと。
  • 動作環境
    コンパイルのためのtoolchainはLinux環境でしか検証しておりません
    もしかしたらWindows・MACで動作するかもしれませんが、どちらも環境は作っていなのでわかりません。
  • android SDKをインストールしadbが動作することを事前に確認すること。
    また、"adb shell"にて端末のLinuxのシェルが普通に使えること。
  • ストックカーネルのビルド方法を理解する
    SONY mobile の Developper Worldの以下のリンクを事前に読み、ストックカーネルを自分の母艦(PC)上で作成する仕組みについてざっと理解すること。
    how-to-build-and-flash-a-linux-kernel

2)カーネルソースコードのダウンロード

SONY mobile の Developper Worldから自分の端末で使用するカーネルソースをダウンロードする。
http://developer.sonymobile.com/downloads/opensource/
 ここにあなたの端末の新しいOSイメージが出た際にOpen source archiveが公開されるのでそれをダウンロード。
 ちなみにこのドキュメントを最初に書いた時点(2015年1月)ではXperia Z(SO-02E)向けの最新ビルドは10.5.1.B.0.68(2014年11月27日に公開)。
 ダウンロードしたソースコードを自分のPC上で解凍する。ちなみにkernelフォルダ内部だけで良い。

3)クロスコンパイラのダウンロード

先に記載したリンクにあるGoogleのAndroid SDKに添付のクロスコンパイラ(toolchain)をダウンロードし、PATHを通しておく。
 このコンパイラでカーネル・モジュールをmakeする際には必ず「ARCH=arm CROSS_COMPLE=$CROSS_COMPILE」と指定する形になる。
 環境変数$CROSS_COMPILEは先にダウンロードしたtoolchainのうち、bin/arm-eabi-を指定する。この値はMakefileに記述するか、.bashrcに記述しておけば良い。もちろん環境変数を使いたくない場合はフルパスで指定すればよい。

4)ストックカーネルのビルド

私がストックカーネル向け追加モジュールをビルドした際、一番スムーズに動作したのは追加モジュールのソースコードをストックカーネルのソースコードとは別のディレクトリに配置し、make時にストックカーネルのソースディレクトリを指定する方法でした(やり方は後述)。
 という訳で、予めストックカーネルを以下の方法でビルドします。
 a)EXTRAVERSIONの一致
  adb shellで端末のシェルを動作させ、uname -rコマンドでストックカーネルのバージョン表示をします。
  また、/system/lib/modulesにある何らかのモジュールに対してmodinfo ****.ko(****にはその場所にあるモジュールを指定。どれでもいいです、例えばlcd.ko)してvermagicの記載文字列を確認してください。
  vermagicの例 
vermagic:       3.4.0-gdfbed73 SMP preempt mod_unload modversions ARMv7
次にストックカーネルのルートディレクトリにあるMakefileの先頭にEXTRAVERSIONと記載があり空欄ですがそこにunameやlsmodの記載を合わせてください。
  例えば上のvermagicの場合は「EXTRAVERSION = -gdfbed73」と指定します

 b)Configの生成
  以下のコマンドでSO-02E向けのコンフィグを複写します。
make ARCH=arm CROSS_COMPILE=$CROSS_COMPILE fusion3_yuga_dcm_defconfig
(この時、「ARCH=arm CROSS_COMPILE=$CROSS_COMPILE」とありますが、要らない可能性が高い。)
  ここでは、「arch/arm/configs/」にある「fusion3_yuga_dcm_defconfig」をストックカーネルの.configに複写しています。
  先に紹介したSONY mobileの「how-to-build-and-flash-a-linux-kernel」ではXperia Z向けに別なコンフィグ名が指定されていましたが、SO-02Eの場合は一連の開発ボードのコードネーム=fusion3、Xperia Zの開発コードネーム=yuga、ドコモ=dcmのためこれで間違いありません。

  次にvermagicを合わせるため、先のコマンドで作成された.configファイルをエディタで開きます。CONFIG_LOCALVERSIONを探し、先に調べた"-gdfbed73"と入力して下さい。
  もしこの方法が気に入らない場合は、.configファイルの CONFIG_LOCALVERSIONは空欄にし、MakefileEXTRAVERSIONを編集して下さい。
  カスタムカーネルを作成する場合はこのあとで「make menuconfig」を実行し、カーネルの設定を色々変更しますが、ストックカーネル向けのモジュールを作成する場合は元のコンフィグを変更する必要はありません。逆に指定するとModule.symversが変更されて動作しない可能性があります(これがストックカーネルに追加モジュールを統合してメイクしない理由)。

 c)カーネルイメージ作成のための事前準備
  以下のコマンドでカーネルイメージ作成のための事前準備をします(もしかしたら不要かも)。
make ARCH=arm CROSS_COMPILE=$CROSS_COMPILE prepare
make ARCH=arm CROSS_COMPILE=$CROSS_COMPILE scripts/mod/

 d)ストックカーネルのビルド
  以下のコマンドでストックカーネルをビルドすると、Module.symversが作成され、外部モジュールのコンパイルが正常に動作します。
make -j8 ARCH=arm CROSS_COMPILE=$CROSS_COMPILE
要は一回カーネルをビルドし、内部モジュールのsymbol番号を確定させる処理です。
  なお、makeで指定している以下のオプションはこのような意味です。
  • -j
       同時にコンパイル出来るスレッド数
  • ARCH=
      コンパイルする際のCPUアーキテクチャー(armを指定)
  • CROSS_COMPILE=
      makeに教えるクロスコンパイラのパス(先にダウンロードしたクロスコンパイラの配置場所を環境変数で指定すれば良い)

5)ストックカーネル向けのモジュールのダウンロード

Xperia Z向けのCPUガバナのソースコードとして、以下の場所よりダウンロードしました。
  ①【ROM焼き】docomo Xperia GX/SX SO-04D/05D root1 で154氏が作成したモジュールのソースコード
http://www.mediafire.com/download/ob4clfek421bdw6/T.TX.V.4.3_kernel_modules.zip
(次項で記載のsymbol番号の件はこれで理解出来ました。感謝)
また、intellidemandやsmartassH3など最新版は以下の場所よりダウンロードしました。
  ②AnDyXXが作成したXperia Z向けのcpuガバナのソースコード
  https://github.com/AnDyXX/Xperia-devices
(ただしコチラはsymbol番号の件によりそのままではビルドできないものがある。)

6)モジュールのビルド

a)mediafireのソースコードのMakefileを加工
  自分向けの環境と違うので直してしまいましょう。
  外部のモジュールのソースコードをビルドする際、ストックカーネルでカーネルイメージを生成する際にmakeで指定したコマンドに以下のものを追加する必要があります。
  • -C
       ストックカーネルのソースディレクトリを指定
  • SUBDIRS=
      「今回ビルドするモジュールのディレクトリ」を指定
SUBDIRSを指定した場合はその後ろにmodulesを付けること。
  modulesを付けたくない場合はM=「今回ビルドするモジュールのディレクトリ」とする。
  まとめると以下の通り(/home/hogehoge配下のkernelにストックカーネルのソースコードを配置し、moduleに今回ビルド用のソースを配置した場合。)。
  make ARCH=arm CROSS_COMPILE=$CROSS_COMPILE -C /home/hogehoge/kernel SUBDIRS=/home/hogehoge/module modules
もしくは
  make ARCH=arm CROSS_COMPILE=$CROSS_COMPILE -C /home/hogehoge/kernel M=/home/hogehoge/module
これだけでmakeコマンド一発でモジュールのビルドは終了する。
  なお、自分の欲しいモジュールだけ指定する場合はMakefileの記載をobj += *****.oに直して複数行に分けてしまおう。
  (作成不要なモジュールの行頭に#を付けてコメント化することで生成しなくても済むため。)
 b)GitHubのソースコード修正
  GitHubでダウンロードしたソースコードはsymbol番号(要はストックカーネルのシステムコールのアドレス番地)が参照できずに警告出力される。
  この状態ではkoファイル(カーネルモジュール)が生成されるが、端末に複写してもモジュールを追加することはできない。
  そこでmediafireのソースコードにあるsymsearch.cの仕組みを利用してストックカーネルからsymbol番号を生成出来るようにする。
  • まずは一度ビルドし、phase2のWarningを出力させる。この時表示されるメッセージは以下のような感じ
    WARNING: "cpufreq_notify_utilization" [xperiaz_smartassH3.ko] undefined!
    これは"cpufreq_notify_utilization"のsymbol番号がわからないという意味。
  • 先のmediafireのソースコードではsymsearch.koを利用することでストックカーネル内部からsymbol番号を導出していたので、以下の通り処理させる。
    Warningが表示されたソースコードの先頭部分に以下のような記述を追加する
    SYMSEARCH_DECLARE_FUNCTION_STATIC(void, cpufreq_notify_utilization_s, struct cpufreq_policy *, unsigned int);
    これは、void cpufreq_notify_utilization_s(struct cpufreq_policy *, unsigned int)という関数を定義したという意味。
    先にUndefinedだった関数(この場合はcpufreq_notify_utilization)をストックカーネルのinclude/linuxからgrepで探し、当該ヘッダファイルからその関数定義を探して上記のようにマクロで記載する。
  • 次に当該ガバナの初期化処理(大概はソースファイルの最後の方にある)に以下の記述を追加
    SYMSEARCH_BIND_FUNCTION_TO(smartassH3, cpufreq_notify_utilization, cpufreq_notify_utilization_s);
    これは内部関数のcpufreq_notify_utilizationとcpufreq_notify_utilization_sを関連付けさせるという意味。
最終的にはmediafireのソースコードと双方睨めっこしてよく確認しながら行うこと。
  修正後、makeで正常にモジュールが作成されてエラーが表示されなければ終了。

7)端末へのモジュール複写と試運転

 adb push で端末にモジュールを複写する。その後、insmod でモジュールを読込させ、正常に動作することを確認する。
 当然ながらsymsearchを利用した場合は当該モジュールの読込前にsymsearch.koを読込させなければなりません。
 この時dmesgに"no symbol version for module_layout"などが表示されないか確認すること。
 追加したCPUガバナをアプリで変更(Faux Clock他)し、動作を確認してみる。
 insmodで作ったモジュールを追加した状態だけだと仮におかしくなったとしても暴走し再起動するだけなので、比較的安心してもよい。ただしIOスケジューラの場合は再起動によりSDカードの破損のおそれがあるため要注意のこと。
 正常に動作することを確認できたら、init.dにスクリプトを記載して端末のリブート時にinsmodされるようにする。
 init.dスクリプトの作成が面倒な場合やroot化したがinit.dに対応しない端末では、端末の起動後にModule Loaderアプリで自分で指定して希望のモジュールを読込するのもお勧めです。

8)移植したCPUガバナの感想

androplusの作者もお話している通り、SmartassH3が出来が良い感想を持っています。使用率の割に電池の持ちがよい感触。ただし、CPUガバナを変更可能なアプリで各コアの周波数を見ている限りでは1コア動作時は上限貼り付き(1.5GHz)にもみえるため、さらに省電力なガバナがあるかもしれません。

9)モジュールのソース・バイナリ提供

ソースコードはGitHubに置いておきました。こちら
作成したモジュールはTunableの設定が落ち着いたらアップしたいと思います。もちろん、動作保証は致しませんので。