Ich arbeite derzeit an einem Projekt, in dem ich rein natives ndk verwenden muss. Es hat funktioniert, wenn ich versuche, ein Beispiel aus der Irrlicht-Engine-Quelle auszuführen. Dann versuche ich, es in meinem Projekt nach dem gleichen Format wie in diesem Beispiel zu verwenden. Aber ich habe:
03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]
während ich mein Projekt ausführe.
Hier ist meine main.cpp-Datei:
#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}
#endif
in Android.mk:
LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json
LOCAL_SRC_FILES := android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
Und ich habe den Aktivitätsnamen in AndroidManifest.xml angegeben:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.irrlicht.example1"
android:versionCode="1"
android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
<activity android:name="android.app.POMActivity"
android:label="HelloWorldMobile1"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:clearTaskOnLaunch="true">
<meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />
Was ist der Fehler, den ich hier mache? Ich werde den vollständigen Code posten, wenn dies erforderlich ist.
java
android
c++
android-ndk
Karthik Sivam
quelle
quelle
Antworten:
Ich habe alle möglichen Optionen ausprobiert, aber das Ergebnis ist Null. Endlich habe ich die richtige Lösung gefunden, die für mich hilfreich ist. Gehen Sie einfach zum Deaktivieren des Sofortlaufs. Gehen Sie zu Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Sofortiger Lauf -> Deaktivieren Sie das Kontrollkästchen für den Sofortlauf . Führen Sie Ihre App einmal aus und diese APK-Datei funktioniert ordnungsgemäß.
quelle
Ich hatte ein ähnliches Problem, hier ist meine Lösung:
Sie können diese Antwort auch überprüfen .
quelle
Dies scheint in Ihrem Fall ein Problem zu sein. Der relative Pfad Ihrer Aktivität im Manifest ist nicht korrekt:
Ersetzen Sie dies durch:
oder
quelle
Das Löschen der App auf dem Gerät und das Reinigen des Projekts funktioniert für mich
quelle
react-native run-android
Ich sollte das Problem verstehen, indem ich nur sehe
Es dauerte jedoch einen halben Tag, um das Problem zu beheben.
Ich behebe dies, indem ich den Anweisungen der Android-Entwicklerseite folge: https://developer.android.com/studio/build/multidex.html
Fügen Sie dies zuerst der Datei gradle.build hinzu:
Erweitern Sie dann die Anwendungsklasse mit der
MultiDexApplication
Klasse, wie unter dem obigen Link angegeben (oder deklarieren Sie die Anwendungsklasse in der FunktionAndroidManifest.xml
oder überschreiben Sie dieattachBaseContext()
Funktion, wenn dies nicht möglich ist, um die Anwendungsklasse zu erweitern).Das ist alles und es hat das Problem gelöst.
quelle
Versuchen Sie einfach Clean Project & Rebuild Project .
quelle
Diese Ausnahme kann auch auftreten, wenn Sie eine benutzerdefinierte Ansicht in Ihrem Layout wie folgt haben:
und Sie ändern den Paketnamen der Ansicht von "com.example" in einen anderen, vergessen jedoch, ihn auch im Layout zu ändern.
quelle
Wenn das Projekt kurz zuvor kompiliert wurde, können Sie versuchen, den Cache zu löschen, indem Sie:
./gradlew clean
oder
./gradlew cleanBuildCache
oder für Windows
gradlew cleanBuildCache
https://developer.android.com/studio/build/build-cache.html
quelle
Ich löste es mit:
./gradlew --stop
Befehl im Android Studio Terminal. Nachdem Sie diesen Befehl ausgeführt haben, bereinigen Sie das Projekt und erstellen Sie es neu.quelle
arbeitete für mich.
quelle
Für jeden, der Multidex aktiviert hat, schreiben Sie dies
innerhalb von build.gradle
schreibe eine Klasse
EnableMultiDex
wie untenund
AndroidManifest.xml
schreiben Sie diesen Klassennamen in das Application-Tagquelle
enableMultiDex
das aus? In meinem FalljavaMaxHeapSize "4g"
hat nicht geholfen.MultiDexApplication
. Es ist notwendig, wenn Sie MultidexMultiDexApplication
oderattachBaseContext
(siehe developer.android.com/studio/build/multidex ).Ich habe dieses Problem mehrmals gesehen und sie wurden alle durch Deaktivieren von Instant Run behoben .
quelle
Wir benötigen keine angepasste Anwendungsklasse , die MultiDexApplication erweitert . Stattdessen können wir dies auf AndroidManifest.xml haben
Und dazu auf build.gradle (Modul: App),
Vielen Dank.
quelle
Wenn Sie Multidex verwenden, versuchen Sie, Ihre Anwendungsklasse mit MultiDexAppication anstelle von Application zu erweitern, und überschreiben Sie die für Android unter 5.0 erforderliche Methode (da 5.0 und höher Multidex unterstützt).
und in Abhängigkeiten fügen Sie dies hinzu
quelle
Application
. Warum sollten wir in einem Fall von überschreibenMultiDexAppication
?Ändern Sie einfach Ihren Ordnernamen von
lib
inlibs
,Dann sehen Sie einige Fehlermarkierungen in Ihrem Projekt, um dieses Problem zu beheben. Klicken Sie auf Projekt>
Properties > Java Build Path > libraries
::Entfernen Sie alle die Bibliothek mit roten Markierungen auf sie, dann
apply > ok >
nach diesem sauberen Projekt . TADA sehen die Magie :)quelle
In meinem Fall trat dieses Problem aufgrund von Kotlin auf. In meinem vorhandenen Code gab es eine Klasse, die Kotlin geschrieben wurde. Ich habe die App erstellt, sie installiert und sobald die erste Aktivität geöffnet wurde, stürzte die App ab. Im Logcat wurde dieser Fehler angezeigt. Ich habe dann meine Kotlin-Version von der Kotlin-Website in einer App-Gradle-Datei aktualisiert. Erstellen Sie die App erneut und es hat dann gut funktioniert.
quelle
Ein möglicher Grund wäre der falsche Pfad der Aktivität in der Datei Apps AndroidManifest.xml. Registrieren Sie die Aktivität mit in Ihrer AndroidManifest.xml mit dem vollständigen relativen Pfad wie unten.
quelle
Nachdem ich die gegebenen Antworten ausprobiert hatte, fand ich einen weiteren Grund für dieselbe Ausnahme heraus, dass ich die Bibliothek, die ich manuell verwende, zu meiner Hauptbibliothek hinzufügen musste
Vor dieser Lösung habe ich das "Fix Project Setup" aus der .java-Datei in Eclipse verwendet, aber das hat nicht funktioniert, also musste ich es hier manuell hinzufügen und es hat funktioniert
quelle
Ich habe diesen Absturz nur auf Samsung Lollipop-Geräten bekommen und diese Lösung hat bei mir funktioniert.
Ich poste diese Antwort hier, da diese Frage derzeit das bestplatzierte Suchergebnis bei Google für diesen Absturz ist und keine der oben genannten Antworten für mich funktioniert hat.
quelle
Die folgende Lösung hat bei mir funktioniert ...
Ich habe alles oben Genannte ausprobiert, aber meine App immer noch nicht zum Laufen gebracht. Ich habe eine reaktionsnative App, die auf der neuesten Version von Gradle 4+ und Android Studio ausgeführt wird.
Ich hatte das Problem, dass, wenn ich reag-native run-android ausführen, es mit dem Problem fehlschlug, dass es nicht in der Lage ist, die MainApplication-Klasse zu finden ... dh ClassNotFoundException
Ich konnte das Problem beheben, als ich meine gradle.properties für die Verwendung des Compilers D8 aktualisierte.
Ich fügte hinzu:
android.enableD8 = true
zu meinen gradle.properties
Doc Details hier: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
quelle
Ashik abbas Antwort ( Instant Run deaktivieren ) funktioniert für mich, aber ich brauche Instant Run , schließlich habe ich eine Lösung gefunden, die für mich hilfreich ist. Deaktivieren Sie einfach minifyEnabled . Gehen Sie im Debug- Block zu build.gradle (Modul: App) und deaktivieren Sie minifyEnabled :
quelle
Nach meinem Verständnis bekomme ich das Problem nach dem Update von Android Studio 2.1 auf 2.3 aufgrund der Sofortfunktion, die meine Anwendung nicht ausführen wird, wenn ich die apk von der Ausgabe kopiere und auf die SD-Karte lege. Für dieses Problem baue ich die apk aus Build-Option, baue apk in Android Studio.
quelle
Wenn Sie in Ihrer App-Gradle-Datei aktiviert
minifyEnabled
undshrinkResources
wahr sind. Sie müssen die folgende Zeile in dieproguard-rules.pro
Datei einfügenweil die Minimierung entfernt wurde, sind einige wichtige Klassen in unserer APK-Datei enthalten.
quelle
Ich hatte dieses Problem schon einmal und die Kommentare hier haben in der Vergangenheit geholfen, aber diesmal nicht. Ich überprüfte meine proguard Konfiguration und i entfernt die folgenden Zeilen und dann funktionierte es so proguard etwas haben kann , mit diesem Fehler zu tun:
quelle
In meinem Fall habe ich die alte Namespace-Bibliothek verwendet, während mein Projekt unter Verwendung von AndroidX One eingerichtet wurde.
Die Lösung bestand darin, die
android.support.design.widget.BottomNavigationView
Komponente durch die richtige zu ersetzen , um aus der Support-Bibliothek zu entkommen :com.google.android.material.bottomnavigation.BottomNavigationView
.quelle
In meinem Fall definiere ich die Aktivität in
Manifest.xml
und habe vergessen, eine zu erstellenactivity
. Also habe ich Activity erstellt und definiertmanifest
und mein Fehler behoben!quelle
Wenn Sie diesen Fehler nach dem Entfernen einer Gradle-Abhängigkeit erhalten, überprüfen Sie Ihr Manifest und stellen Sie sicher, dass Sie alle Einträge entfernt haben, die dieser Abhängigkeit entsprechen.
quelle
Für mich trat das Problem auf, nachdem ich eine signierte APK erstellt hatte. Um das Problem zu beheben, habe ich mit Run / Build APK eine neue Debug-Apk generiert. Danach funktioniert Run (cmd + r) wieder ohne diesen Fehler.
quelle
Ich stand vor dem gleichen Problem. Ich habe einen Tag lang alles Mögliche versucht, aber nichts hat funktioniert. Die Abhängigkeit, die das Problem verursachte, war die Verwendung von Lower Compile SDK, Target SDK und Min SDK. Ich habe ein Bibliotheksmodul für das Projekt erstellt, alle Quellen kopiert und die SDK-Versionen mit den Anwendungs-SDK-Versionen abgeglichen. Und schließlich funktionierte es wie ein Zauber.
quelle
Ich hatte den gleichen Fehler und einige Antworten führen mich zu einem Neulingsproblem in die Irre. Ich hatte das falsche Paket in meinem benutzerdefinierten Ansichtsdeskriptor wie unten. Ich hoffe es hilft jemandem.
quelle