r18でのLibrary Projectの挙動変化メモ的な話
のお話をみていて
これって Library Projectの仕組みを使っていたので
r18環境で久しぶりに試してみた。その時の挙動変化メモ(以前試したのはr16
ようは上のお話のブログで遣っていたことは
- コア側
- default.properties
android.library=true
- マスタ側
- default.properties
android.library.reference.1=../AndroidAppCore/
な話で、
- リソースはコア側に集約、
- AndroidManifest.xmlのパッケージ名で切替
な事なんですけど、
自分が以前確認していたときは)
- マスタ側の一部のライブラリをコア側として切り出し
- マスタ側に同じIDのリソースを持たせて、その場合はマスタ側の値が優先になるので、その値で上書き
- ただしAndroidManifest.xmlの設定記述は引き継げない
- jarはコア側のlibsの中を直接参照してね
な利用状況でした。
具体的には
コア・マスタ側それぞれ)
- AndroidManifest.xml
<meta-data android:value="@string/ADWHIRL_KEY" android:name="ADWHIRL_KEY"/>
で、キーとか指定している keys.xmlを両方に用意して、メイン側で上書きしていたイメージ
(定義していないのはコア側の値がそのまま使われていました)
- res/values/keys.xml
コア側)
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="ADWHIRL_KEY"></string> </resources>
マスタ側)
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="ADWHIRL_KEY">XXXX</string> </resources>
で
r18では)
一応これ自体は動くんだけど、
コア側に変更したときに、コア側=>マスタ側と順に手順ふんでクリーンしないと駄目な感じに
(r16の時は赤バッテンとか付かなかった。..)
1. android.libraryの設定をコメントにする=>コア側がクリーン・リビルドできるようになる
コア側)
-
- default.properties
#android.library=true
2.コメントを元に戻す=>マスタ側が正常にクリーン・ビルドできるようになる
一応
な設定を使って build.xml経由で入れる場合は問題無いんですが
変更モジュールとして単に入れたいだけの場合は、面倒になった><
clean => release => after-copy =>aftert-copy-install
これは以前からあったかもしれないけど)
- AndroidManifest.xml に
<application android:icon="@drawable/icon" android:label="@string/app_name" android:enabled="true">
な記述がある場合、マスタ側にも同名リソース,IDがないと怒られるorz
この場合は
あとは
コア側)
<activity android:name=".hogehoge" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|fontScale|uiMode" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
マスタ側)
- 同じ記述ならOK
- 違う記述ならエラーになる(ClassNotFoundException)
<activity android:name=".hogehoge2" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|fontScale|uiMode" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
ココが変更できると extends拡張した側で、@overideで動きが違う処理が
快適に書けるのにな。..とか思っていたりしています*3
追記)
android:configChanges => onNewIntent を上書き というお話がありますが
Android2系だとresizeが発行されてしまうケースが有るようなので
な対応は別途必要かも