Я понимаю, что Butterknife связывает представления, такие как TextViews- @BindView(R.id.test_status) EditText txtStatus;
. Кроме того, он привязывается к событию щелчка - @OnClick(R.id.login_task)
-. Я даже понимаю, что в настоящее время Butterknife можно использовать для привязки взглядов и т. Д. в библиотеке с надлежащими зависимостями, объявленными в файле build.Gradle. Благодаря исследованиям я знаю, что представления в библиотеке должны быть окончательными или постоянными внутри библиотеки, чтобы правильно работать с ножом. Каждый из этих сценариев у меня работает в этом приложении. Я даже понимаю, что, поскольку я нахожусь в библиотеке, использование R2.java в отличие от R.java при связывании представлений -
@BindView(R2.id.test_status)
EditText txtStatus;
Я не понимаю, почему нож с ножом не распознает представления вкласс тестирования библиотеки?
Package name
com.test-lib.sso(androidTest)
build.gradle file
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'maven-publish'
apply plugin: 'com.jakewharton.butterknife'
ext {
MAVEN_URL = System.getenv('MAVEN_URL') ?: System.getProperty("MAVEN_URL")
MAVEN_USERID = System.getenv('MAVEN_USERID') ?: System.getProperty("MAVEN_USERID")
MAVEN_PASSWD = System.getenv('MAVEN_PASSWD') ?: System.getProperty("MAVEN_PASSWD")
}
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
mavenCentral()
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
}
}
dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'com.jakewharton:butterknife:10.1.0'
api 'androidx.biometric:biometric:1.0.0-beta02'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-web:3.2.0'
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.4.1'
androidTestImplementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
api 'com.jakewharton:butterknife:10.1.0'
}
В моем классе тестирования.
import com.lib.sso.test.R;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_main_activity);
ButterKnife.bind(this);
}
@BindView(R.id.test_status) EditText txtStatus;
@BindView(R.id.env_spinner) AppCompatSpinner spinner;
@OnClick(R2.id.test_login)
public void startNewActivity(View v){
startActivityForResult(NewActivity.getLoginIntent(activity), REQUEST_CODE_LOGIN);
}
XML в макете
<Button
android:id="@+id/test_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:text="Sign In"/>
В @BindView
Android Studio требуетсяR.id.test_login
чтобы быть константой, что я мог бы сделать, объявив @BindView(R2.id.test_login)
за исключением того, что постоянная переменная не генерируется в R2.java.
Когда я переносу вызовы butterknife в R2, переменная становится красной и не распознается,Когда я выполняю поиск в R2.java, я вообще не найду эту переменную, в основном потому, что она не была сгенерирована.
Итак, как мне заставить нож с ножом распознавать R2 в тестовом классе библиотеки?