- 記事: 45
- 登録日時: 2013年5月27日(月) 19:19
- お住まい: 茨城
[ワンセグ移植のために必要な作業]
ワンセグ移植に必要な作業は大きく分けて3つ
1.カーネルに必要な設定(defconfig)
2.ramdisk内のinitへの追記
3.バイナリの改変
4.systemへの改変したバイナリ追加
※Sense 5.5では、これをやっただけでは動かないのが現状です。
1.カーネルに必要な設定(defconfig)
すでにあるStock ROMを参考にすればすぐに解ると思います。
2.ramdisk内のinitへの追記
initへワンセグに関する記述を追加する必要があります。
こちらを参考にして追加してください。
http://gadget.takoweb.com/htcj-sense41-1seg/
3.バイナリの改変
KitKatでは多くのDEPRECATEDな関数が削除されました。
そのせいでバイナリの改変が必要になりました。
・ライブラリの改変
ベースにするライブラリはlibsurfaceflinger_client.soとリンクする古いものを使います。
libsurfaceflinger_client.soとして実装されていない関数を補う自作ライブラリを読みこませるためです。
KitKatには次の関数が実装されていません。
- コード: 全て選択
_ZN7android10VectorImpl19reservedVectorImpl?Ev
この関数はなんの意味もなさないため、値を返すだけで何もしない次の関数にバイナリエディタで置き換えます。
- コード: 全て選択
_ZNK7android10VectorImpl8itemSizeEv
(NULL文字(0x00)を文字列の終端に挿入することを忘れずに)
他にも足りない関数がありますが、それらはしっかり機能を持っています。
そこでlibsurfaceflinger_client.soに偽装してそれらを補うライブラリを作成しました。使ってください。
Fake libsurfaceflinger_client for NMI MTV Libraries
https://github.com/173210/fake_libsurfaceflinger_client
また、KitKatではSurfaceクラスからmNativeSurfaceが削除されました。
そこで、それにJNIでアクセスしているlibMTVMFCls.soの文字列"mNativeSurface"を"mNativeObject"にバイナリエディタで置き換えます。
(NULL文(ry)
・APKの書き換え
なんかよくわからないけど弄らないと動かない部分があるので弄ります。
まずはapktool等ででコンパイルしてください。
そして次の部分を編集します。
com/android/mobiletv/app/controller/Controler.smali
.method public onRssiChanged(I)Vは色々とやばい関数です。
なのでこれを削除します。
当然これを呼び出してる部分や関連する変数mRssiValueはもはや不要なので削除します。
com/android/mobiletv/app/common/Config.smali
.method static constructor <clinit>()Vに次のような記述があります。
- コード: 全て選択
sget-short v0, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_DEVICE_flag:S
これはSense 5.5には存在しません。なので削除します。
実際フラグがどういう値になってるかわかりませんが、特別重要じゃなさそうなので、この値で分岐するか判断している部分は分岐しないように修正します。
あとsharedUserIdとかでエラーが出るかもしれないので、そこは臨機応変におねがいします。
4.systemへの改変したバイナリ追加
libsurfaceflinger_client.soを追加することを忘れずに。