4

最近、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 です。貼り付けたスニペットに問題がないと思われる場合は、他のスニペットを貼り付けるように言ってください。どうもありがとう!

4

1 に答える 1

7

例外はそれをすべて言います:

Android フレームワーク パッケージで、@InjectView アノテーションが付けられたクラスが正しくありません。(android.rocky.butterknife_test.MyActivity)

クラスは Android フレームワーク パッケージandroid.*. アプリケーションは、コードにandroid.*またはパッケージを使用しないでください。java.*ButterKnife はこれらのパッケージを積極的に拒否します。

于 2014-08-06T05:41:37.227 に答える