Android N Previewの登場とともに、Jackも登場したねー!JackとはJava Android Compiler Kitのことで、Javaのソースとかをdexにするまでのツールチェーンなんだ。詳しいことはここを読んでね!
Jackを使ってみるには、次の4つが必要!
- Android Studio 2.1 preview版を使っている
- gradle pluginは2.1.0-alpha3
- buildToolsVersionは"24.0.0 rc2"
- build.gradleに設定をいれる
build.gradleには、こんな風に「Jack使うよー」と、「Java 8を使うよー」と記述するよ。そう、Jackを有効にするとJava 8の構文とかが使えるようになるんだ。ラムダ式も使えるようになるので、コールバックの部分が多少読みやすくなるよね!
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "24.0.0 rc2"
defaultConfig {
applicationId "com.mokelab.demoapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
jackOptions {
enabled true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
いいことばかりのJackさんなんだけど、開発中なのか、困った動きをしてるんだ。。。
それが、今回のタイトルであるButterKnifeがうまく動かないという問題。ButterKnife.bind()を呼んでも実行時にちゃんとバインドされず、@OnClick()をつけたメソッドが呼ばれなかったりするんだ。実行時にようやくわかるのでタチが悪いよね!
何が起きてるかをちょっとだけ調べてみたよ。
- aptでViewBinderクラスは生成されてるみたい
- apkをばらして.classを確認すると、生成されたはずのViewBinderクラスはいない
もちろん、jackOptionsのenabledをfalseにするとapkにちゃんとクラスは含まれてて、思った通りの動きをするよ。
Jackの問題だと思うので、改善されるのを待つばかり。。。
0 件のコメント:
コメントを投稿