Je travaille actuellement sur un projet dans lequel je dois utiliser ndk purement natif. Cela a fonctionné lorsque j'ai essayé d'exécuter un exemple helloworld à partir d'un moteur Irrlicht. Ensuite, j'essaie de l'utiliser dans mon projet en suivant le même format que cet exemple. Mais j'ai eu:
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]]
lors de l'exécution de mon projet.
Voici mon fichier main.cpp:
#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");
}
#fin si
dans 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)
Et j'ai donné le nom de l'activité dans AndroidManifest.xml:
<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" />
Quelle est l'erreur que je fais ici? Je posterai le code complet si nécessaire.
J'ai essayé toutes les options possibles mais le résultat est zéro. Enfin, j'ai trouvé la solution correcte, ce qui est utile pour moi. Il suffit d'aller sur Désactiver l'exécution instantanée. Allez dans Fichier -> Paramètres -> Construire, Exécution, Déploiement -> Exécution instantanée -> Décochez la case pour l'exécution instantanée . Exécutez votre application une fois et ce fichier apk fonctionne correctement.
J'ai eu un problème similaire, voici ma solution:
Vous pouvez également vérifier ceci répondre.
Cela semble être un problème dans votre cas. Le chemin relatif de votre activité dans manifest n'est pas correct:
<activity Android:name="Android.app.POMActivity"
remplacez ceci par:
<activity Android:name=".POMActivity"
ou
<activity Android:name="com.irrlicht.example1.POMActivity"
La suppression de l'application sur l'appareil et le nettoyage du projet fonctionnent pour moi
Je devrais comprendre le problème simplement en voyant
erreurs de dex
Mais il a fallu une demi-journée pour régler le problème.
Je résous ce problème en suivant les instructions de la page développeurs Android: https://developer.Android.com/studio/build/multidex.html
Ajoutez d'abord ceci au fichier gradle.build:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
Puis étendez la classe d’application (ou déclarez la classe d’application dans AndroidManifest.xml
ou remplacez la fonction attachBaseContext()
par la classe MultiDexApplication
comme indiqué sur le lien ci-dessus.
C'est tout et ça a résolu le problème.
Cette exception peut également se produire lorsque vous avez une vue personnalisée dans votre mise en page comme ceci:
<com.example.MyView
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
et vous modifiez le nom package de la vue de "com.example" en un nom différent, mais vous oubliez de le modifier également dans la présentation.
je l'ai résolu en utilisant: ./gradlew --stop
commande dans Android studio terminal. Après avoir exécuté cette commande, nettoyez et reconstruisez le projet.
worked for me.
Pour ceux qui ont multidex permettre, écrivez ceci
à l'intérieur 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'
}
écrire une classe EnableMultiDex
comme ci-dessous
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();
}
}
et dans AndroidManifest.xml
écrivez ceci className inside tag Application
<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">
Il suffit d’essayer Clean Project & Rebuild Project .
J'ai fait face à ce problème plusieurs fois et ils ont tous été résolus en désactivant Instant Run .
Si le projet compilait avant, effacez simplement le cache en utilisant:
./gradlew clean
ou
./gradlew cleanBuildCache
ou pour les fenêtres
gradlew cleanBuildCache
Nous n'avons pas besoin d'avoir personnalisé Application classe qui s'étend/ MultiDexApplication . Au lieu de cela, nous pouvons avoir comme ceci sur AndroidManifest.xml
<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">
Et avec cela sur build.gradle (Module: app),
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
...
compile 'com.Android.support:multidex:1.0.2'
}
Merci.
Il suffit de nettoyer votre projet. Ça marche pour moi.
Lorsque vous utilisez multidex, essayez d’étendre votre classe d’applications avec MultiDexAppication au lieu d’Application et remplacez la méthode ci-dessous par cette méthode requise pour Android sous la version 5.0 (car la version 5.0 et les versions ultérieures prennent en charge multidex)
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(BaseApplication.this);
}
et dans les dépendances ajouter ceci
compile 'com.Android.support:multidex:1.0.1'
Ce crash ne concernait que les appareils Samsung Lollipop et cette solution fonctionnait pour moi.
dexOptions {
preDexLibraries false
}
Je poste cette réponse ici car cette question est actuellement le résultat de recherche le mieux classé sur Google pour cet incident et aucune des réponses ci-dessus ne fonctionne pour moi.
Dans mon cas, ce problème est dû à Kotlin. Dans mon code existant, il y avait une classe qui était écrite en Kotlin. J'ai construit l'application, elle l'a installée et dès la première activité de l'application ouverte s'est écrasée. dans le logcat cette erreur était affichée. J'ai ensuite mis à jour ma version Kotlin du site Web de Kotlin dans un fichier de description d'application. Reconstruisez l'application à nouveau et cela a bien fonctionné à ce moment-là.
après avoir essayé les réponses données, j'ai découvert une autre raison de la même exception, à savoir que je devais ajouter la bibliothèque que j'utilise manuellement dans ma bibliothèque principale par le biais de
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
avant cette solution, j’utilisais le "Fix Project Setup" depuis le fichier .Java dans Eclipse, mais cela ne fonctionnait pas, je devais donc l’ajouter manuellement ici et cela fonctionnait
Il suffit de changer le nom de votre dossier de lib
à libs
,
Ensuite, vous verrez quelques marques d'erreur dans votre projet, pour résoudre ce droitCliquez sur le projet>
Properties > Java Build Path > libraries
:
Supprimez toute la bibliothèque avec des marques rouges, puis apply > ok >
après que nettoyez votre projet . TADA voir la magie :)
La solution suivante a fonctionné pour moi ...
J'ai essayé tout ce qui est mentionné ci-dessus, mais mon application ne fonctionnait toujours pas . J'ai une application native qui s'exécute sur la dernière version de Gradle 4+ et du studio Android.
J'ai eu le problème où si je lance réact-native run-Android il échouait avec le problème en disant qu'il n'est pas capable de trouver la classe MainApplication ... i.e ClassNotFoundException
J'ai pu résoudre le problème lorsque j'ai mis à jour mon fichier gradle.properties afin qu'il utilise le compilateur D8.
J'ai ajouté:
Android.enableD8 = true
à mon gradle.properties
Détails de la documentation ici: https://Android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
Selon mon entendement, je reçois le problème après la mise à jour de Android studio 2.1 à 2.3 en raison de la fonctionnalité instantanée, mon application ne fonctionnera pas si je copie l’apk de la sortie et que je le mets dans la sdcard . option ne construire apk dans le studio Android.
Ashik abbas answer (disable Instant Run) fonctionne pour moi, mais j’ai besoin de Instant Run, enfin j’ai trouvé la solution qui m’est utile . Il suffit de désactiver minifyEnabled . allez dans build.gradle (Module: app) dans debug pour bloquer et désactiver minifyEnabled:
debug {
minifyEnabled false
}
J'ai eu la même erreur et certaines réponses me induisent en erreur sur un problème de débutant. J'ai eu le mauvais paquet dans mon descripteur de vue personnalisé comme ci-dessous. J'espère que ça aide quelqu'un.
<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" />
Si vous avez activé minifyEnabled
et shrinkResources
sur true dans votre fichier de dégradé d'application. Vous devez ajouter la ligne suivante dans le fichier proguard-rules.pro
-keep class com.votre nom_package. ** {*; }
parce que la minification est supprimée de certaines classes importantes de notre fichier apk.
Si vous recevez cette erreur après avoir supprimé une dépendance de niveau, vérifiez votre manifeste et assurez-vous d'avoir supprimé toutes les entrées correspondant à cette dépendance.
Dans mon cas, j’ai utilisé l’ancienne bibliothèque d’espaces de noms lors de la mise en place de mon projet sous Android.
La solution consistait à remplacer le composant Android.support.design.widget.BottomNavigationView
par le composant approprié pour sortir de la bibliothèque de support: com.google.Android.material.bottomnavigation.BottomNavigationView
.
Une des raisons possibles serait le chemin d'accès incorrect de l'activité dans le fichier Apps AndroidManifest.xml. Enregistrez l'activité dans votre fichier AndroidManifest.xml avec le chemin relatif complet, comme ci-dessous.
<activity Android:name="<full_path>.ActivityName" />
Je faisais face au même problème. J'ai essayé tout ce que je pouvais faire pendant une journée, mais rien ne fonctionnait .. La dépendance à l'origine du problème utilisait une compilation inférieure de sdk, cible sdk et min sdk. J'ai créé un module de bibliothèque pour le projet, copié toutes les sources et mis en correspondance les versions de SDK avec les versions d'application SDK. Et finalement cela a fonctionné comme un charme.
j'avais ce problème auparavant et les commentaires ici ont aidé dans le passé, mais cette fois ce n'est pas le cas. J'ai vérifié ma configuration de proguard et je ai supprimé les lignes suivantes, puis cela a fonctionné afin que proguard puisse avoir quelque chose à voir avec cette erreur:
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
Vous pouvez également voir Classe non trouvée lors de la suppression des intentions Android sur Parcelable ou Android E/Colis Classe non trouvée lors de la suppression des appels (uniquement sur Samsung Tab3) , mais aucun avis de ces sujets ne m'a aidé. J'ai même réécrit une classe parcellaire.
Pour moi, le problème est apparu après avoir créé un fichier APK signé. Pour y remédier, j'ai généré un nouvel apk de débogage à l'aide de Run/Build APK. Après cela, Run (cmd + r) fonctionne à nouveau sans cette erreur.