やりたいこと
- WebにおいてあるZipファイルをダウンロードする(この中にはアプリで使用する画像群やカラーの値が入っている)
- ダウンロードしてきたZipを展開する
- Fileで保存する
- 保存されたファイルから画像や値を引いて使用する
この順序を実装してく中で(4)のタイミングで「9-patchが効いてねえ。。」「え!てっきり拡張子で判断しているのかと。。」
という壁にぶつかって解消するまでの流れを記載して行きます。
9-patchってAndroidはどうやって認識してるんだ?
https://github.com/android/platform_frameworks_base/blob/master/graphics/java/android/graphics/drawable/Drawable.java
まず調べる必要があったのはこの部分。AOSPのDrawable.javaから該当部を見つけました。
Drawableを取得する際にはその画像の9patch情報(chunk)を見てNinePatchDrawableなのかBitmapDrawableなのかを返している。
その「chunk」が厄介で、結果を見ると一度コンパイラを通さないと生成されない。
さてどうしよう。。
「コンパイラを通さないと9-patchとして認識してくれない。。」
結論から言うと、一度コンパイルしてbinから取得してきた9patch画像をZipに入れることにしました。(運用としてちょっと面倒だけど。。)
これで正しく表示させることができました。
別案(未検証)
/frameworks/base/tools/aapt/Images.cpp
を持ってきて、
read_png→do_9patchてやれば、9patch化できるだろうけど、、
https://github.com/cozybit/aosp-frameworks-base/blob/master/tools/aapt/Images.cpp