Fehler: Paket com.android.annotations existiert nicht

79

Ich habe die folgende Klasse

import com.android.annotations.NonNullByDefault;

@NonNullByDefault
public final class Log {
    ...
}

und hier ist meine build.gradle-Datei (einige Teile weggelassen)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '24.0.1'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 2
        versionName "0.2"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

}

dependencies {    
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:support-annotations:25.0.0'
    compile 'com.android.support:design:25.0.0'
}

In Android Studio wird für meine Klasse keine Warnung ausgegeben

Geben Sie hier die Bildbeschreibung ein

Wenn ich jedoch versuche, meine App zu erstellen und auszuführen, wird dieser Fehler von gradle angezeigt

Information:Gradle tasks [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:assembleDebug]
Warning:[options] bootstrap class path not set in conjunction with -source 1.7
/home/puter/git-repos/TaskManager3/app/src/main/java/com/treemetrics/taskmanager3/util/Log.java
Error:(3, 31) error: package com.android.annotations does not exist
Error:(7, 2) error: cannot find symbol class NonNullByDefault
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Information:BUILD FAILED
Information:Total time: 21.021 secs
Information:3 errors
Information:1 warning
Information:See complete output in console
Moses
quelle
Ich bin nicht auf X migriert. Auch die RN-Version 9s 0.59.9. Vor dem gleichen Problem
22.

Antworten:

137

So beheben Sie automatisch alle Android-zu-Androidx-Probleme für React Native (Voraussetzung npx)

Fügen Sie die folgenden zwei Flags zu trueIhrer gradle.propertiesDatei unter hinzuProjectFolder/android/gradle.properties

android.useAndroidX=true
android.enableJetifier=true

Ausführen

npm install --save-dev jetifier
npx jetify
npx react-native run-android

Fügen Sie in Ihrer package.json den Skripten Folgendes hinzu

  "postinstall" : "npx jetify"

Weitere Informationen unter https://github.com/mikehardy/jetifier

Update: Dies ist jetzt in React-Native 0.60 integriert. Wenn Sie auf React-Native 0.60 migrieren, benötigen Sie diesen Schritt nicht. - https://facebook.github.io/react-native/blog/2019/07/03/version-60#androidx-support

Pavan Garre
quelle
1
Vielen Dank, dieses Tool hat mir sehr geholfen und meine Zeit gespart. Ich hoffe, ich kann Ihnen mehr als eine Stimme geben
Belal Mazlom
Installieren Sie zuerst npm, wenn Sie mit npx jetify starten. Hat funktioniert. Danke!
Ernestyno
1
Das ist großartig! Aus irgendeinem Grund verwendet das Projekt, an dem ich teilnehme, immer noch reaktionsnatives 0.59.0. Dies ist die Quelle meiner Frustration, wenn ich versuche, einen Teil des vorhandenen Codes aus Github zu kompilieren, und ist fehlgeschlagen. Während die Entscheidung zur Migration auf native 0.60.0 nicht in meiner Hand liegt, ist dieser "Ausführen" -Block hier der Live-Sparer!
Chen Li Yong
Lebensretter! Vielen Dank!
Threadpool
1
@PavanGarre Ich verstehe nicht, warum dies nicht als Antwort markiert ist. Es hat wie ein Zauber für mich funktioniert und ich muss sagen, nicht in einer Million Jahren hätte ich es erraten. Danke, Mann. Bin dankbar.
ChiragMS
32

Verwenden Sie die Implementierung androidx.appcompat:appcompat:1.0.2in Gradle und dann

ändern , import android.support.annotation.Nullable; um import androidx.annotation.NonNull;in den Klassen Importe

Sarthak Singhal
quelle
1
Ok, ich habe mehr als 100 Importe in verschiedenen Bibliotheksdateien. Was tun?
RajnishCoder
1
@ RajnishCoder verwenden Jetifier, der es für Sie erledigt.
BMX
Ist es notwendig, Nullable in NonNull zu ändern, oder ist es nur ein Tippfehler?
Raphael Pinel
17

Öffnen gradle.propertiesund verwenden Sie folgenden Code:

android.useAndroidX=false
android.enableJetifier=false

oder U kann auch diese Abhängigkeiten verwenden:

implementation 'androidx.appcompat:appcompat:1.0.2'
 implementation 'androidx.annotation:annotation:1.0.2'
Behrouz.M
quelle
Es wurde versucht, sie unter Abhängigkeiten hinzuzufügen, aber es wurde keine Methode compile () für Argumente [androidx.appcompat: appcompat: 1.0.2] für ein Objekt vom Typ org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler gefunden.
Omar S.
versuchte auch die Implementierung statt zu kompilieren, der gleiche Fehler
Omar S.
12

Ich hatte ähnliche Probleme bei der Migration auf AndroidX.

Wenn durch Hinzufügen der folgenden zwei Zeilen zu gradle.properties das Problem nicht gelöst wurde

android.useAndroidX=true
android.enableJetifier=true

Dann versuche es

  1. Mit Android Studio 3.2 und höher können Sie ein vorhandenes Projekt auf AndroidX migrieren, indem Sie in der Menüleiste ( developer.android.com ) Refactor> Auf AndroidX migrieren auswählen.

Wenn bei der Migration weiterhin Probleme auftreten, versuchen Sie manuell, die Bibliotheken zu ersetzen, die das Problem verursachen.

Zum Beispiel

Wenn Sie ein Problem mit der android.support.annotation.NonNullÄnderung haben, ändern Sie es androidx.annotation.NonNullwie in der folgenden Tabelle mit Klassenzuordnungen angegeben.

Klassenzuordnungen

Maven-Artefaktzuordnungen

user44776
quelle
Sowohl das Refactoring als auch der Wechsel von import android.support.annotation.NonNull;zu import androidx.annotation.NonNull;arbeiteten für mich.
Andriy Makukha
9

In meinem Fall musste ich verwenden

import androidx.annotation...

Anstatt von

import android.annotation...

Ich bin auf AndroidX migriert und habe vergessen, das zu ändern.

Ribbit
quelle
3

Ich hatte ähnliche Probleme bei der Migration auf AndroidX. Dieses Problem ist auf die Abhängigkeit der Old Butter Knife-Bibliothek zurückzuführen.

Wenn Sie ein Buttermesser verwenden, sollten Sie mindestens Buttermesser Version 9.0.0-SNAPSHOT oder höher verwenden.

implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT' annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'

Abhijeet Sharma
quelle
2

Anmerkungen stammen von support's librarydenen, die in verpackt sindandroid.support.annotation .

Als weitere Option können Sie eine @NonNullAnnotation verwenden, die angibt, dass ein Parameter-, Feld- oder Methodenrückgabewert niemals null sein darf.
Es wird aus importiertimport android.support.annotation.NonNull;

Sanjeet
quelle
Ich compile 'com.android.support:support-annotations:25.0.0'habe compile 'com.android.support:support-v4:25.0.0'in mein build.gradle geändert und der Import liest sich immer noch import com.android.annotations.NonNullByDefault;und der Fehler tritt immer noch auf. Ist es das, worüber du sprichst?
Moses
Dies sind übrigens automatische Importe, die von Android Studio aufgelöst werden.
Moses
Wenn die Importe korrekt aufgelöst wurden, sollte der Fehler nicht ausgelöst worden sein.
Sanjeet
Das ist mein Punkt, warum löst Android Studio den Import so auf und unterstreicht den Import nicht in Rot, aber gradle gibt einen Fehler aus?
Moses
2

Den offiziellen Javadoc der Bibliothek finden Sie hiersupport-annotations .

Fehler: (3, 31) Fehler: Paket com.android.annotations existiert nicht

Wie Sie sehen können, befinden sich alle Klassen im selben Paket android.support.annotationund nicht com.android.annotations.

Fehler: (7, 2) Fehler: Symbolklasse NonNullByDefault kann nicht gefunden werden

Auch die Klasse NonNullByDefault existiert in diesem Paket nicht.

Gabriele Mariotti
quelle
Android Studio löst den Import automatisch für mich auf, daher kommt er von irgendwoher, aber jetzt bin ich mir nicht sicher, wo. Es ist auch immer noch ein Rätsel, warum der Fehler ausgelöst wird.
Moses
Das funktioniert bei mir nicht. Ich ändere den Import und Android ersetzt ihn automatisch. Verursacht Probleme, weil es AndroidX sein muss, aber android.support Importe setzt.
Wesley Franks
2

Sie sollten keinen Code manuell bearbeiten. Jetify sollte diesen Job für Sie erledigen. Wenn Sie mit cli arbeiten / bauen react-native, müssen Sie nichts tun, aber wenn Sie Andriod Studio ausführen / bauen, müssen Sie jetify als Pre-Build ausführen , wie können Sie dies automatisieren:

1- Gehen Sie im obigen Menü zum Bearbeiten der Konfigurationen:

Geben Sie hier die Bildbeschreibung ein

2- Fügen Sie den unteren Bildschirmrand hinzu, den Sie vor dem Start finden. Klicken Sie auf das Pluszeichen und wählen Sie Externes Tool ausführen

Geben Sie hier die Bildbeschreibung ein

2- Geben Sie die folgenden Informationen ein und beachten Sie, dass das Arbeitsverzeichnis Ihr Projektstammverzeichnis ist (nicht das Android-Verzeichnis):

Geben Sie hier die Bildbeschreibung ein

3- Stellen Sie sicher, dass dies vor allem anderen ausgeführt wird. Am Ende sollte Ihre Konfiguration ungefähr so ​​aussehen: Geben Sie hier die Bildbeschreibung ein

Fareed Alnamrouti
quelle
Können Sie diesen Befehl über die Befehlszeile "npx jetify" im Stammverzeichnis des Android-Projekts
ausführen
Ja, das habe ich auf der Root-Ebene gemacht. Aus irgendeinem Grund musste ich npm jetify manuell ausführen, um die App ordnungsgemäß auszuführen. Für das gleiche Verzeichnis, das das Android Studio geworfen hat, kann npx jetify error nicht für das Verzeichnis ausgeführt werden. obwohl es das Projekt Root Repo war. Vielen Dank für Ihre Bedenken.
Sanjay Joshi
1

Wenn ein Fehler in der automatisch generierten Butterknife-Datei auftritt, aktualisieren Sie die Butterknife-Abhängigkeitsversion

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
Amar Singh
quelle
1

Alles, was Sie tun müssen, ist, 'import android.support.annotation.Nullable' in Klassenimporten durch 'import androidx.annotation.Nullable' zu ersetzen.

Dies ist eine gängige Praxis. Wenn Probleme beim Import auftreten, entfernen Sie diesen Import und drücken Sie einfach Alt + Eingabetaste für die zugehörige Klasse. Dadurch erhalten Sie die Option zum Importieren der Klasse. Hinweis Geben Sie die Eingabetaste ein, und die Probleme werden behoben. .

Rishijay Shrivastava
quelle
0

Für mich war es eine alte Version von npm .

Lauf npm install npm@latest -gund dannnpm install

Muzikant
quelle
0

Versuchen Sie für Ionic Folgendes:

ionic cordova plugin add cordova-plugin-androidx
ionic cordova plugin add cordova-plugin-androidx-adapter

Der Fehler tritt auf, weil diese App AndroidX nicht verwendet, diese Plugins jedoch Fehler beheben.

Nazim Ali
quelle