標準で最初から使えるようにして欲しい…
モジュール配下にlibs
ディレクトリを作る
Maven にないので、アノテーションの jar をlibs
ディレクトリに突っ込みます。
そのためのlibs
ディレクトリを作っておきましょう(最新の AndroidStudio なら新しいプロジェクト作ると勝手に作ってくれるはず)。
あわせて、Eclipse の時みたいにlibs
へいい感じにパスを通してくれないので、ビルドスクリプトを修正します(最新の AndroidStudio なら新しいプロジェクト作ると勝手に書いておいてくれるはず)。
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
libs
ディレクトリに、アノテーションを含むannotations.jar
を入れる
アノテーションが含まれている jar
は ProGuard のなかにおいてあります。
${ANDROID_SDK_ROOT}/tools/proguard/examples/annotations
libs
へコピペしてください。
もう一つ、jar
と一緒に annotations.pro
というファイルも有りますので、合わせて一緒に入れておきます。
proguard-rules.txt
を修正する
annotations.jar
を入れても、そのままではアノテーションもろとも ProGuard によって闇の彼方へ葬られてしまうので、ProGuard 関連のアノテーションが付いているものは適宜アノテーションに合わせたキープの仕方を宣言する必要があります。
そのあたりはすべて、annotations.pro
に記述されているので、proguard-rules.txt
には、そのannotation.pro
も読み込んでね、ということを伝えます。
-dontshrink
-include libs/annotations.pro
このあたりの話題は、こちらの記事と同様ですね。
アノテーションを付ける
アノテーションは以下のものが有ります
@Keep
@KeepApplication
@KeepClassMemberNames
@KeepClassMembers
@KeepGettersSetters
@KeepName
@KeepPublicClassMemberNames
@KeepPublicClassMembers
@KeepPublicGettersSetters
@KeepPublicImplementations
@KeepPublicProtectedClassMemberNames
@KeepPublicProtectedClassMembers
クラスの宣言か、あるいはメンバの宣言に付けて使います。
たとえば、Gson によってシリアライズやデシリアライズを行うクラスの場合、以下のようにします。
@KeepClassMembers
public class MyBean implements Parcelable {
// ...{snip}...
}