現在時刻 - 2017年11月22日(水) 02:26


[考察]Android 4.4(KitKat)へのワンセグ移植

カーネルやカスタムROMに関する話題・質問はこちらへ

モデレータ: HTCモデレータ

  • 作成者
  • メッセージ

173210

  • 記事: 45
  • 登録日時: 2013年5月27日(月) 19:19
  • お住まい: 茨城

[考察]Android 4.4(KitKat)へのワンセグ移植

投稿記事2014年2月27日(木) 07:43

Android 4.4(KitKat)へのワンセグ移植が私によって進められています。
このトピックはAndroid 4.4(KitKatにワンセグを移植するという目標を達成するために実際に試した作業記録や、「これをやったらワンセグ動いた」「あれをやれば動くんじゃないか」など意見・情報交換の場とさせていただきます。
だから誰かやろうよ…

[参考記事]
ワンセグを移植する上で参考になる記事
http://gadget.takoweb.com/htcj-sense41-1seg/

[その他]
このスレは[考察]CyanogenModへのFeliCa移植のパクリです。ええ。

173210

  • 記事: 45
  • 登録日時: 2013年5月27日(月) 19:19
  • お住まい: 茨城

Re: [考察]Android 4.4(KitKat)へのワンセグ移植

投稿記事2014年2月27日(木) 08:00

まずはSense系ROMへの移植を前提とします。
[ワンセグ移植のために必要な作業]
ワンセグ移植に必要な作業は大きく分けて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を追加することを忘れずに。
最後に編集したユーザー 173210 [ 2014年3月04日(火) 15:14 ], 累計 1 回

173210

  • 記事: 45
  • 登録日時: 2013年5月27日(月) 19:19
  • お住まい: 茨城

Re: [考察]Android 4.4(KitKat)へのワンセグ移植

投稿記事2014年2月27日(木) 19:25

・調べたこと
CPRMのエラーが出るが、これは視聴するには問題ないらしい。

Return to 開発全般