2017-11-03 1 views
0

Ich habe folgendes Problem, wenn ich die 'App' (Android Studio Emulator) laufen:Warum habe ich Probleme mit 'com.jakewharton: butterknife: 7.0.1' in Android Studio 3.0?

Error:Execution failed for task ':app:javaPreCompileDebug'. 
> Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration. 
    - butterknife-7.0.1.jar (com.jakewharton:butterknife:7.0.1) 
    Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future. 
    See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details. 

Meine Graddle-App Level:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion '26.0.2' 

    defaultConfig { 
     applicationId "com.hhhhh.android" 
     minSdkVersion 15 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 

    implementation 'com.google.firebase:firebase-database:11.0.4' 
    implementation 'com.google.firebase:firebase-auth:11.0.4' 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:25.2.0' 
    compile 'com.android.support:design:25.0.1' 
    compile 'com.jakewharton:butterknife:7.0.1' 

} 

apply plugin: 'com.google.gms.google-services' 

Der Fehler verschwindet, wenn ich wechseln die Version:

compile 'com.jakewharton:butterknife:8.7.0' 

Aber es erzeugt mehr Probleme in meiner LogginActivity:

package com.sourcey.materiallogindemo; 

import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

import android.content.Intent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import butterknife.ButterKnife; 
import butterknife.Bind; 

public class LoginActivity extends AppCompatActivity { 
    private static final String TAG = "LoginActivity"; 
    private static final int REQUEST_SIGNUP = 0; 

    @Bind(R.id.input_email) EditText _emailText; 
    @Bind(R.id.input_password) EditText _passwordText; 
    @Bind(R.id.btn_login) Button _loginButton; 
    @Bind(R.id.link_signup) TextView _signupLink; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     ButterKnife.bind(this); 

     _loginButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       login(); 
      } 
     }); 

     _signupLink.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // Start the Signup activity 
       Intent intent = new Intent(getApplicationContext(), SignupActivity.class); 
       startActivityForResult(intent, REQUEST_SIGNUP); 
       finish(); 
       overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); 
      } 
     }); 
    } 

    public void login() { 
     Log.d(TAG, "Login"); 

     if (!validate()) { 
      onLoginFailed(); 
      return; 
     } 

     _loginButton.setEnabled(false); 

     final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this, 
       R.style.AppTheme_Dark_Dialog); 
     progressDialog.setIndeterminate(true); 
     progressDialog.setMessage("Authenticating..."); 
     progressDialog.show(); 

     String email = _emailText.getText().toString(); 
     String password = _passwordText.getText().toString(); 

     // TODO: Implement your own authentication logic here. 

     new android.os.Handler().postDelayed(
       new Runnable() { 
        public void run() { 
         // On complete call either onLoginSuccess or onLoginFailed 
         onLoginSuccess(); 
         // onLoginFailed(); 
         progressDialog.dismiss(); 
        } 
       }, 3000); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_SIGNUP) { 
      if (resultCode == RESULT_OK) { 

       // TODO: Implement successful signup logic here 
       // By default we just finish the Activity and log them in automatically 
       this.finish(); 
      } 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     // Disable going back to the MainActivity 
     moveTaskToBack(true); 
    } 

    public void onLoginSuccess() { 
     _loginButton.setEnabled(true); 
     finish(); 
    } 

    public void onLoginFailed() { 
     Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); 

     _loginButton.setEnabled(true); 
    } 

    public boolean validate() { 
     boolean valid = true; 

     String email = _emailText.getText().toString(); 
     String password = _passwordText.getText().toString(); 

     if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { 
      _emailText.setError("enter a valid email address"); 
      valid = false; 
     } else { 
      _emailText.setError(null); 
     } 

     if (password.isEmpty() || password.length() < 4 || password.length() > 10) { 
      _passwordText.setError("between 4 and 10 alphanumeric characters"); 
      valid = false; 
     } else { 
      _passwordText.setError(null); 
     } 

     return valid; 
    } 
} 

Mit 8.7.0:

enter image description here

Antwort

3

Annotation-Prozessoren nun explizit deklariert werden müssen

Tun Sie, was es sagt

der zweiten Zeile hinzufügen

compile 'com.jakewharton:butterknife:8.7.0' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0' 

Mit 8.7.0 ...es erzeugt mehr Probleme in meinem LogginActivity:

Sie sind die falsche Klasse importieren ...

Beschriften Felder mit @BindView

That changed at Version 8.0

die Internetseite anzeigen für die Verwendung und die neueste Version. http://jakewharton.github.io/butterknife/

import butterknife.BindView; 

.. 

@BindView(R.id...) 
1

können Sie versuchen:

// butter knife 
compile 'com.jakewharton:butterknife:8.8.1' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 

Ansonsten können Sie

https://github.com/avast/android-butterknife-zelezny

versuchen 0

zu Auto-Gencode von Butterknife.

Ich hoffe, es kann Ihrem Problem helfen!

0

Fügen Sie einfach die folgende Zeile:

annotationProcessor 'com.jakewharton:butterknife-compiler:7.0.1' 

in Ihrer Abhängigkeiten wie:

dependencies { 
    //... 
    compile 'com.jakewharton:butterknife:7.0.1' 
    annotationProcessor 'com.jakewharton:butterknife-compiler:7.0.1' 
} 

prüfen this für mehr Details.

+0

'8.8.1' ist die neueste Version –

0

versuchen diese, müssen Sie die Anmerkung zusammen mit Buttermesser Bibliothek hinzuzufügen ..

butter Bibliothek

compile 'com.jakewharton:butterknife:8.8.1' 

Anmerkung für butter

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 
+0

Ja, 8.8 gearbeitet Hoffnung. 1 ist die neueste Version –

2

können Sie dieses Problem lösen, indem einfach diese Ebene zu Ihrer App gradle Datei

android{ 
.... 
    defaultConfig{ 
.... 
    javaCompileOptions { 
     annotationProcessorOptions { 
      includeCompileClasspath true 
     } 
    } 
} 

seine

Verwandte Themen