最近、Android Studio でButter Knifeを使用しようとしていますが、いくつかの奇妙な問題で失敗します。私は日食でバターナイフを試していましたが、うまくいきました。Android Studio で何か間違った設定をしたかどうかはわかりません。
Jake Wharton のWeb サイトの指示に従いましたが、まだ機能していません。最初はコンパイルしてインストールできましたが、その後Butterknife.inject(this)
、ビューはまだ null のままで、null ポインター エラーがスローされました。次に、Android Studio でバターナイフを構成する方法をググって、 stackoverflow でこの問題を追跡したところ、コンパイルに合格できませんでした。
その後、最初のバージョンの構成に戻しましたが、コンパイルも失敗し始めました。メッセージは次のとおりです。
Error:(14, 12): @InjectView-annotated class incorrectly in Android framework package. (android.rocky.butterknife_test.MyActivity)
と
Error:Execution failed for task ':app:compileDebugJava'.
Compilation failed; see the compiler error output for details.
これは私の構成ですapp/build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "android.rocky.butterknife_test"
minSdkVersion 19
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
runProguard false
}
}
lintOptions {
disable 'InvalidPackage'
}
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.jakewharton:butterknife:5.1.2'
}
これはbuild.gradle
ルートでの私の構成です:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
}
}
これは私のJavaコードです:
public class MyActivity extends Activity {
@InjectView(R.id.greeting)
TextView greetingTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ButterKnife.inject(this);
greetingTextView.setText("butter knife!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
ところで、私の Android スタジオのバージョンは 0.8.2 です。貼り付けたスニペットに問題がないと思われる場合は、他のスニペットを貼り付けるように言ってください。どうもありがとう!