Ошибка реагирования на камеру при компиляции Android - не удается найти класс символов NonNull - PullRequest
2 голосов
/ 23 июня 2019

package.js

...
"react": "16.8.3",
"react-native": "0.59.5",
"react-native-camera": "git+https://git@github.com/react-native-community/react-native-camera.git"
...

settings.gradle

include ':app'

include ':react-native-camera'
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')

settings.gradle

...
android {
    compileSdkVersion rootProject.ext.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        applicationId "xxxxxx"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }
    ...
}

dependencies {
    implementation project(':react-native-camera')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.annotation:annotation:1.0.2'
    implementation "com.facebook.react:react-native:+"  // From node_modules
}
...

gradle.properdies

android.useAndroidX=true
android.enableJetifier=true

Error

.. / .. / .. / .. / .. / .. / .. / .. / node_modules / реагируют родной-камеры / Android / SRC / главная / Java / COM / Google / Android / cameraview /Camera2.java (3 ошибки)

ошибка: не удается найти класс символов NonNull ошибка: не удается найти класс символов NonNull ошибка: не удается найти класс символов NonNull

1 Ответ

0 голосов
/ 27 июня 2019

эта проблема вызвана переходом Google на androidx

Первым быстрым исправлением было бы удаление импорта / аннотации вручную в ваших / node-modules /

Вам необходимо:

  • сначала найдите файл Camera2.java (тот, который вызывает ошибку)
  • затем найдите строку import android.support.annotation.NonNull; и удалите ее
  • также удаляет каждую аннотацию @NonNull, используемую в файле

Майк Харди создал пакет, позволяющий вам делать это автоматически: https://github.com/mikehardy/jetifier#to-jetify--convert-node_modules-dependencies-to-androidx (он реагирует на нативный / дружественный npm)

Вам нужно будет сделать это для каждого пакета, если они используют эти аннотации.

Также имейте в виду, что некоторые пакеты могут использовать классы java, расположенные по адресу: android.support.v4 (например, ActivityCompat, NotificationCompat, ...), эти классы теперь расположены здесь androidx.core.app.* (androidx.core.app.ActivityCompat, ...) из-за миграции androidx

Некоторые ссылки:

Вот CSV-файл сопоставления классов между старым / новым импортом Android:

https://github.com/mikehardy/jetifier/blob/master/src/androidx-class-mapping.csv

...