Obecnie pracuję nad projektem, w którym muszę używać czysto natywnego ndk. Zadziałało, gdy próbuję uruchomić przykład helloworld ze źródła silnika Irrlicht. Następnie próbuję użyć go w moim projekcie, postępując zgodnie z formatem z tego przykładu. Ale dostałem:
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]]
podczas prowadzenia mojego projektu.
Oto mój plik 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");
}
#endif
w 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)
I podałem nazwę działania w 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" />
Jaki błąd tutaj robię? W razie potrzeby prześlę pełny kod.
java
android
c++
android-ndk
Karthik Sivam
źródło
źródło
Odpowiedzi:
Wypróbowałem wszystkie możliwe opcje, ale wynik jest zerowy. W końcu znalazłem poprawne rozwiązanie, które jest dla mnie pomocne. Po prostu przejdź, aby wyłączyć Natychmiastowe uruchamianie Idź do Plik -> Ustawienia -> Kompilacja, Wykonanie, Wdrożenie -> Natychmiastowe uruchamianie -> Odznacz pole wyboru dla natychmiastowego uruchamiania . Uruchom aplikację raz, a ten plik APK będzie działał poprawnie.
źródło
Miałem podobny problem, oto moje rozwiązanie:
Możesz również sprawdzić tę odpowiedź.
źródło
Wydaje się, że w twoim przypadku jest to problem. Względna ścieżka twojej aktywności w manifestacji jest nieprawidłowa:
zamień to na:
lub
źródło
Usunięcie aplikacji na urządzeniu i czyszczenie projektu działa dla mnie
źródło
react-native run-android
Powinienem zrozumieć problem, po prostu widząc
Ale rozwiązanie problemu zajęło pół dnia.
Naprawiam to, postępując zgodnie z instrukcją na stronie dla programistów Androida: https://developer.android.com/studio/build/multidex.html
Najpierw dodaj to do pliku gradle.build:
Następnie rozszerz klasę Application o
MultiDexApplication
klasę zgodnie z instrukcją w powyższym linku (lub zadeklaruj klasę aplikacji w funkcjiAndroidManifest.xml
lub przesłoń,attachBaseContext()
jeśli nie jest możliwe rozszerzenie klasy aplikacji).To wszystko i rozwiązało problem.
źródło
Po prostu wypróbuj Clean Project & Rebuild Project .
źródło
Ten wyjątek może również wystąpić, gdy masz w układzie widok niestandardowy, taki jak ten:
i zmieniasz nazwę pakietu widoku z „com.example” na inną, ale zapominasz o zmianie również w układzie.
źródło
Jeśli projekt był kompilowany tuż wcześniej, możesz spróbować wyczyścić pamięć podręczną za pomocą:
./gradlew clean
lub
./gradlew cleanBuildCache
lub do okien
gradlew cleanBuildCache
https://developer.android.com/studio/build/build-cache.html
źródło
rozwiązałem to za pomocą
./gradlew --stop
polecenia : w terminalu Android Studio. Po wykonaniu tego polecenia wyczyść i przebuduj projekt.źródło
pracował dla mnie.
źródło
Napisz to dla każdego, kto ma włączoną funkcję multidex
wewnątrz build.gradle
napisz zajęcia
EnableMultiDex
jak poniżeji
AndroidManifest.xml
napisz tę nazwę klasy wewnątrz tagu aplikacjiźródło
enableMultiDex
wpływa? W moim przypadkujavaMaxHeapSize "4g"
nie pomogło.MultiDexApplication
. Jest to konieczne, jeśli chcesz korzystać z multidexMultiDexApplication
lubattachBaseContext
(patrz developer.android.com/studio/build/multidex ).Wielokrotnie miałem do czynienia z tym problemem i wszystkie zostały rozwiązane przez wyłączenie funkcji Instant Run .
źródło
Nie musimy mieć dostosowanej klasy Application, która rozszerza MultiDexApplication . Zamiast tego możemy mieć taki plik na AndroidManifest.xml
Wraz z tym na build.gradle (moduł: aplikacja),
Dzięki.
źródło
Jeśli używasz multidex, spróbuj rozszerzyć klasę aplikacji za pomocą MultiDexAppication zamiast Application i zastąp poniższą metodę, która jest wymagana dla Androida poniżej 5.0 (ponieważ 5.0 i nowsze obsługują multidex)
iw zależnościach dodaj to
źródło
Application
. Dlaczego powinniśmy nadpisywać w przypadkuMultiDexAppication
?Po prostu zmień nazwę folderu z
lib
nalibs
,Następnie zobaczysz kilka znaków błędów w swoim projekcie, aby rozwiązać ten problem, kliknij projekt>
Properties > Java Build Path > libraries
:Usuń całą bibliotekę z czerwonymi oznaczeniami na niej, a następnie
apply > ok >
po tym czystym projektu . TADA zobacz magię :)źródło
W moim przypadku ten problem powstał z powodu Kotlina. W moim istniejącym kodzie była klasa, która została napisana Kotlin. Zbudowałem aplikację, zainstalowałem ją i zaraz po uruchomieniu pierwszej aktywności aplikacja uległa awarii. w logcat ten błąd był pokazywany. Następnie zaktualizowałem moją wersję Kotlin z witryny Kotlin w pliku gradle aplikacji. Zbuduj aplikację ponownie i wtedy działała dobrze.
źródło
Jedną z możliwych przyczyn może być nieprawidłowa ścieżka działania w pliku aplikacji AndroidManifest.xml. Zarejestruj aktywność w swoim AndroidManifest.xml z pełną ścieżką względną, jak poniżej.
źródło
po wypróbowaniu udzielonych odpowiedzi odkryłem inny powód tego samego wyjątku, że musiałem ręcznie dodać bibliotekę, której używam do mojej głównej biblioteki za pośrednictwem
przed tym rozwiązaniem użyłem "Fix Project setup" z pliku .java w eclipse, ale to nie zadziałało, więc musiałem dodać to ręcznie tutaj i zadziałało
źródło
Dostawałem tę awarię tylko na urządzeniach Samsung Lollipop i to rozwiązanie działało u mnie.
Publikuję tę odpowiedź tutaj, ponieważ to pytanie jest obecnie najwyżej ocenianym wynikiem wyszukiwania w Google dla tej awarii i żadna z powyższych odpowiedzi nie zadziałała.
źródło
Poniższe rozwiązanie zadziałało dla mnie ...
Wypróbowałem wszystko wymienione powyżej, ale nadal nie uruchomiłem mojej aplikacji. Mam aplikację React-Native działającą na najnowszej wersji Gradle 4+ i Android Studio.
Miałem problem polegający na tym, że jeśli uruchomiłem react-native run-android, zawodził problem z informacją, że nie jest w stanie znaleźć klasy MainApplication ... tj. ClassNotFoundException
Udało mi się rozwiązać ten problem, gdy zaktualizowałem plik gradle.properties tak, aby korzystał z kompilatora D8.
Dodałem:
android.enableD8 = true
do mojego gradle.properties
Szczegóły dokumentu tutaj: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
źródło
Odpowiedź Ashik abbas (wyłącz Instant Run ) działa dla mnie, ale potrzebuję Instant Run , w końcu znalazłem rozwiązanie, które jest dla mnie pomocne. po prostu wyłącz minifyEnabled . przejdź do build.gradle (Module: app) w bloku debugowania i wyłącz minifyEnabled :
źródło
Zgodnie z moim rozumieniem pojawia się problem po aktualizacji Android Studio 2.1 do 2.3 z powodu funkcji natychmiastowej, moja aplikacja nie będzie działać po skopiowaniu apk z wyjścia i umieszczeniu na karcie SD. W przypadku tego problemu buduję apk z opcji kompilacji, aby zbudować apk w Android Studio.
źródło
Jeśli jesteś włączony
minifyEnabled
i masz wartośćshrinkResources
true w pliku ocen aplikacji. Musisz dodać następujący wiersz wproguard-rules.pro
plikuponieważ minifikacja została usunięta z naszego pliku APK.
źródło
Miałem ten problem wcześniej, a komentarze tutaj pomogły w przeszłości, ale tym razem nie. sprawdziłem konfigurację proguard i usunąłem następujące wiersze, a następnie zadziałało, więc program proguard może mieć coś wspólnego z tym błędem:
źródło
W moim przypadku użyłem starej biblioteki przestrzeni nazw, podczas gdy mój projekt był skonfigurowany przy użyciu androidx one.
Rozwiązaniem było zastąpić
android.support.design.widget.BottomNavigationView
składnik z prawej jednym uciec z biblioteki wsparcia:com.google.android.material.bottomnavigation.BottomNavigationView
.źródło
w moim przypadku definiuję działanie w programie
Manifest.xml
i zapomniałem go utworzyćactivity
. Utworzyłem więc działanie i zdefiniowałem je w programiemanifest
i rozwiązałem mój błąd!źródło
Jeśli pojawi się ten błąd po usunięciu pewnej zależności gradle, sprawdź swój manifest i upewnij się, że zostały usunięte wszystkie wpisy odpowiadające tej zależności.
źródło
U mnie problem pojawił się po utworzeniu podpisanego pliku APK. Aby to naprawić, wygenerowałem nowy, debugujący apk za pomocą Run / Build APK. Następnie Run (cmd + r) działa ponownie bez tego błędu.
źródło
Miałem ten sam problem. Przez jeden dzień próbowałem wszystkiego, ale nic nie działało. Zależność, która powodowała problem, polegała na używaniu niższego zestawu sdk kompilacji, zestawu docelowego sdk i min sdk. Stworzyłem moduł biblioteki do projektu, skopiowałem wszystkie źródła i dopasowałem wersje sdk do wersji sdk aplikacji. I w końcu zadziałało jak urok.
źródło
Miałem ten sam błąd i niektóre odpowiedzi wprowadzają mnie w błąd w kwestii początkującego. Miałem niewłaściwy pakiet w moim niestandardowym deskryptorze widoku, jak poniżej. Mam nadzieję, że to komuś pomoże.
źródło