Ich arbeite gerade an einem Projekt, in dem ich ausschließlich native ndk verwenden muss. Es hat funktioniert, als ich versuche, ein Beispiel für ein Beispiel aus der Irrlicht-Engine-Quelle auszuführen. Dann versuche ich es in meinem Projekt zu verwenden, indem ich dasselbe Format wie in diesem Beispiel verwende. Aber ich bekam:
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 mein Projekt läuft.
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 in AndroidManifest.xml den Aktivitätsnamen 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, falls nötig.
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. Deaktivieren Sie Instant Run. Gehen Sie zu Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Instant Run -> Deaktivieren Sie das Kontrollkästchen für Instant Run . Führen Sie Ihre App einmal aus und diese APK-Datei funktioniert einwandfrei.
Ich hatte ein ähnliches Problem, hier ist meine Lösung:
Sie können auch this answer überprüfen.
Dies scheint in Ihrem Fall ein Problem zu sein. Der relative Pfad Ihrer Aktivität im Manifest ist nicht korrekt:
<activity Android:name="Android.app.POMActivity"
ersetze dies durch:
<activity Android:name=".POMActivity"
oder
<activity Android:name="com.irrlicht.example1.POMActivity"
Das Löschen der App auf dem Gerät und die Reinigung des Projekts funktioniert für mich
Ich sollte das Problem verstehen, indem ich nur sehe
dex-Fehler
Aber es dauerte einen halben Tag, um das Problem zu beheben.
Ich behebe das, indem ich die Anweisungen der Android-Entwicklerseite befolge: https://developer.Android.com/studio/build/multidex.html
Fügen Sie zuerst die Datei gradle.build hinzu:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
Erweitern Sie dann die Anwendungsklasse (oder deklarieren Sie die Anwendungsklasse in AndroidManifest.xml
oder überschreiben Sie die Funktion attachBaseContext()
mit der MultiDexApplication
-Klasse, wie auf dem obigen Link beschrieben.
Das ist alles und es hat das Problem gelöst.
Diese Ausnahme kann auch auftreten, wenn Sie in Ihrem Layout eine benutzerdefinierte Ansicht haben:
<com.example.MyView
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
und Sie ändern den Paketnamen der Ansicht von "com.example" in etwas anderes, aber Sie vergessen, sie auch im Layout zu ändern.
ich löste es mithilfe von: ./gradlew --stop
Befehl in Android Studio Terminal. Nachdem Sie diesen Befehl ausgeführt haben, bereinigen Sie das Projekt und erstellen Sie es neu.
worked for me.
Für alle, die Multidex haben, aktivieren Sie dies
inside build.gradle
apply plugin: 'com.Android.application'
Android {
defaultConfig {
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
}
dependencies {
compile 'com.Android.support:appcompat-v7:+'
compile 'com.google.Android.gms:play-services:+'
compile 'com.Android.support:multidex:1.0.1'
}
schreibe eine Klasse EnableMultiDex
wie unten
import Android.content.Context;
import Android.support.multidex.MultiDexApplication;
public class EnableMultiDex extends MultiDexApplication {
private static EnableMultiDex enableMultiDex;
public static Context context;
public EnableMultiDex(){
enableMultiDex=this;
}
public static EnableMultiDex getEnableMultiDexApp() {
return enableMultiDex;
}
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
und in AndroidManifest.xml
schreibe dieses className in Application Tag
<application
Android:name="YourPakageName.EnableMultiDex"
Android:hardwareAccelerated="true"
Android:icon="@drawable/wowio_launch_logo"
Android:label="@string/app_name"
Android:largeHeap="true"
tools:node="replace">
Probieren Sie einfach Projekt reinigen & Projekt neu erstellen .
Ich habe dieses Problem mehrmals erlebt und sie werden alle durch Deaktivieren von Instant Run gelöst.
Wenn das Projekt zuvor kompiliert wurde, löschen Sie einfach den Cache mithilfe der folgenden Anweisungen:
./gradlew clean
oder
./gradlew cleanBuildCache
oder für Fenster
gradlew cleanBuildCache
Wir brauchen keine angepasste Application class, die MultiDexApplication erweitert. Stattdessen können wir dies auf AndroidManifest.xml haben.
<application
Android:name="Android.support.multidex.MultiDexApplication"
Android:hardwareAccelerated="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
Und zusammen mit diesem auf build.gradle (Modul: app),
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
...
compile 'com.Android.support:multidex:1.0.2'
}
Vielen Dank.
Reinigen Sie einfach Ihr Projekt. Für mich geht das.
Wenn Sie multidex verwenden, versuchen Sie, Ihre Anwendungsklasse mit MultiDexAppication anstelle von Application zu erweitern, und überschreiben Sie die für Android erforderliche Methode.
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(BaseApplication.this);
}
und in Abhängigkeiten hinzufügen
compile 'com.Android.support:multidex:1.0.1'
Ich bekam diesen Absturz nur auf Samsung Lollipop-Geräten und diese Lösung hat für mich funktioniert.
dexOptions {
preDexLibraries false
}
Ich poste diese Antwort hier, da diese Frage derzeit das am höchsten bewertete Suchergebnis bei Google für diesen Absturz ist und keine der obigen Antworten für mich funktioniert hat.
In meinem Fall entstand dieses Problem wegen Kotlin. In meinem vorhandenen Code gab es eine Klasse, die Kotlin geschrieben wurde. Ich baute die App, installierte sie und sobald die erste Aktivität geöffnet war, stürzte die App ab. Im Logcat wurde dieser Fehler angezeigt. Ich habe dann meine Kotlin-Version von der Kotlin-Website in einer App-Gradl-Datei aktualisiert. Baue die App erneut und es hat gut funktioniert.
nachdem ich die angegebenen Antworten ausprobiert hatte, fand ich einen weiteren Grund für die gleiche Ausnahme. Ich musste die Bibliothek, die ich manuell verwende, zu meiner Hauptbibliothek hinzufügen
Right click on my main library >
Properties >
Android >
Go to the very bottom of the screen and click (Add) >
Select my other library that caused the crash >
Apply
vor dieser Lösung habe ich das "Fix-Projekt-Setup" aus der .Java-Datei in Eclipse verwendet. Dies funktionierte jedoch nicht. Daher musste ich es hier manuell hinzufügen und es funktionierte
Ändern Sie einfach Ihren Ordnernamen von lib
in libs
.
Dann sehen Sie einige Fehler in Ihrem Projekt, um dieses Problem zu beheben. Klicken Sie auf Projekt>
Properties > Java Build Path > libraries
:
Entfernen Sie die gesamte Bibliothek mit den roten Markierungen und apply > ok >
danach bereinigen Sie Ihr Projekt . TADA sehen die Magie :)
Die folgende Lösung hat für mich funktioniert ...
Ich habe alles oben genannte probiert, aber meine App noch nicht zum Laufen gebracht ... Ich habe auf der neuesten Version von Gradle 4+ und Android Studio eine reagierende App ausgeführt.
Ich hatte das Problem, dass, wenn ich reaktives Lauf-Android laufen lasse, es mit dem Problem fehlschlug, dass es nicht in der Lage ist, die MainApplication-Klasse zu finden ... d. H. ClassNotFoundException
Ich konnte das Problem beheben, als ich meine gradle.properties auf den Compiler D8 aktualisiert habe.
Ich fügte hinzu:
Android.enableD8 = true
zu meinen gradle.properties
Dokumentdetails hier: https://Android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
Ich bekomme das Problem nach dem Update von Android Studio 2.1 auf 2.3. Aufgrund der sofortigen Funktion wird meine Anwendung nicht ausgeführt, wenn ich die apk von der Ausgabe kopiere und in die sdcard lege .. Für dieses Problem baue ich die apk von build Option apk bauen in Android Studio.
Ashik abbas answer (deaktiviere Instant Run) arbeite für mich, aber ich brauche Instant Run, endlich habe ich eine Lösung gefunden, die für mich hilfreich ist .. Einfach minifyEnabled deaktivieren Gehen Sie zu build.gradle (Module: app) im Block debug und deaktivieren Sie minifyEnabled:
debug {
minifyEnabled false
}
Ich hatte den gleichen Fehler und einige Antworten ließen mich bei einer Neueinsteigerfrage in die Irre führen. Ich hatte das falsche Paket in meiner benutzerdefinierten Ansichtsbeschreibung wie unten. Ich hoffe es hilft jemandem.
<com.my.app.wrong.package.MyActivity
Android:id="@+id/myActivity"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp"
Android:paddingTop="16dp"
Android:paddingBottom="8dp"
Android:gravity="left" />
Wenn Sie minifyEnabled
und shrinkResources
in Ihrer App-Gradlendatei auf true gesetzt haben. Sie müssen die folgende Zeile in der proguard-rules.pro
-Datei hinzufügen
-Steep-Klasse com.Ihr Paketname. ** {*; }
weil minification einige wichtige klassen in unserer apk-datei entfernt hat.
Wenn Sie diese Fehlermeldung erhalten, nachdem Sie einige Abstufungsabhängigkeiten entfernt haben, überprüfen Sie Ihr Manifest und stellen Sie sicher, dass Sie alle Einträge entfernt haben, die dieser Abhängigkeit entsprechen.
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
.
Ein möglicher Grund wäre der falsche Pfad der Aktivität in der Datei Apps AndroidManifest.xml. Registrieren Sie die Aktivität in Ihrer AndroidManifest.xml mit dem vollständigen relativen Pfad wie unten.
<activity Android:name="<full_path>.ActivityName" />
Ich war mit demselben Problem konfrontiert. Ich habe alles versucht, was für einen Tag möglich ist, aber es hat nichts funktioniert. Die Abhängigkeit, die Probleme verursachte, war die Verwendung von Sdk, Sdk und Sdk. Ich habe ein Bibliotheksmodul für das Projekt erstellt, alle Quellen kopiert und die Sdk-Versionen mit den Anwendungs-Sdk-Versionen abgeglichen. Und zum Schluss funktionierte es wie ein Zauber.
ich hatte dieses Problem schon einmal und die Kommentare hier haben in der Vergangenheit geholfen, diesmal jedoch nicht. Ich überprüfte meine Proguard-Konfiguration und ich entfernte die folgenden Zeilen und dann hat es funktioniert, damit Proguard etwas mit diesem Fehler zu tun haben kann:
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
Sie können auch Klasse wird nicht gefunden, wenn Android das Ziel "Unmarshalling" hat oder Android E/Paket ﹕ Klasse wird nicht gefunden, wenn "Unmarshalling" (nur unter Samsung Tab3) } angezeigt wird, jedoch haben mir keine Ratschläge aus diesen Themen geholfen . Ich habe sogar eine Parcelable-Klasse neu geschrieben.
Für mich erschien das Problem, nachdem ich eine signierte APK erstellt hatte. Um das Problem zu beheben, habe ich eine neue, debug-apk mit Run/Build APK erstellt. Danach funktioniert Run (cmd + r) wieder ohne diesen Fehler.