В настоящее время я работаю над проектом, в котором мне нужно использовать исключительно собственный ndk. Это сработало, когда я попытался запустить пример helloworld из исходников движка Irrlicht. Затем я пытаюсь использовать его в своем проекте, следуя тому же формату, что и в этом примере. Но я получил:
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]]
при запуске моего проекта.
Вот мой файл 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
в 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)
И я дал имя действия в 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" />
Какую ошибку я здесь делаю? При необходимости выложу полный код.
java
android
c++
android-ndk
Картик Сивам
источник
источник
Ответы:
Перепробовал все возможные варианты, но результат нулевой. Наконец я нашел правильное решение, которое мне помогло. Просто зайдите, чтобы отключить Instant Run. Перейдите в File -> Settings -> Build, Execution, Deployment -> Instant Run -> Снимите флажок для мгновенного запуска . Запустите приложение один раз, и этот apk-файл заработает правильно.
источник
У меня была аналогичная проблема, вот мое решение:
Вы также можете проверить этот ответ.
источник
Кажется, это проблема в вашем случае. Относительный путь вашей активности в манифесте неверен:
<activity android:name="android.app.POMActivity"
замените это на:
<activity android:name=".POMActivity"
или
<activity android:name="com.irrlicht.example1.POMActivity"
источник
У меня работает удаление приложения на устройстве и очистка проекта
источник
react-native run-android
Просто попробуйте Clean Project & Rebuild Project .
источник
Я должен понять проблему, просто увидев
Но на устранение проблемы ушло полдня.
Я исправляю это, следуя инструкциям на странице разработчиков Android: https://developer.android.com/studio/build/multidex.html
Сначала добавьте это в файл gradle.build:
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.0' }
Затем расширите класс приложения классом,
MultiDexApplication
как указано в приведенной выше ссылке (или объявите класс приложенияAndroidManifest.xml
или переопределитеattachBaseContext()
функцию, если невозможно расширить класс приложения).Вот и все, и проблема решена.
источник
Это исключение также может возникнуть, если у вас есть настраиваемый вид в макете, например:
<com.example.MyView android:layout_width="match_parent" android:layout_height="match_parent" />
и вы меняете имя пакета представления с "com.example" на другое, но вы также забываете изменить его в макете.
источник
Если проект компилировался непосредственно перед этим, вы можете попробовать очистить кеш, используя:
./gradlew clean
или
./gradlew cleanBuildCache
или для окон
gradlew cleanBuildCache
https://developer.android.com/studio/build/build-cache.html
источник
Я решил это, используя
./gradlew --stop
команду : в терминале студии Android. После выполнения этой команды очистите и перестройте проект.источник
работал у меня.
источник
Для всех, у кого есть поддержка multidex, напишите это
внутри 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' }
напишите класс,
EnableMultiDex
как показано ниже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(); } }
и
AndroidManifest.xml
напишите это className внутри тега 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">
источник
enableMultiDex
влияет? В моем случаеjavaMaxHeapSize "4g"
не помогло.MultiDexApplication
. Это необходимо, если вы хотите использовать мультидексMultiDexApplication
илиattachBaseContext
(см. Developer.android.com/studio/build/multidex ).Я сталкивался с этой проблемой несколько раз, и все они решаются отключением Instant Run .
источник
Нам не нужно настраивать класс Application, расширяющий MultiDexApplication . Вместо этого мы можем сделать это в 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">
И вместе с этим в build.gradle (Module: app),
defaultConfig { ... // Enabling multidex support. multiDexEnabled true } dependencies { ... compile 'com.android.support:multidex:1.0.2' }
Спасибо.
источник
Когда вы используете multidex, попробуйте расширить класс вашего приложения с помощью MultiDexAppication вместо Application и переопределите метод ниже, который требуется для Android ниже 5.0 (поскольку 5.0 и выше поддерживает multidex)
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(BaseApplication.this); }
и в зависимостях добавьте это
compile 'com.android.support:multidex:1.0.1'
источник
Application
. Почему мы должны переопределить в случаеMultiDexAppication
?Просто измените имя папки с
lib
наlibs
,Затем вы увидите несколько отметок об ошибках в своем проекте, чтобы исправить это, щелкните правой кнопкой мыши по проекту>
Properties > Java Build Path > libraries
:Удалите все библиотеки с красными метками на ней, то
apply > ok >
после этого чистого вашего проекта . ТАДА увидеть волшебство :)источник
В моем случае эта проблема возникла из-за Kotlin. В моем существующем коде был класс, написанный на Kotlin. Я создал приложение, оно установилось, и как только первое действие открылось, приложение вылетело. в logcat отображалась эта ошибка. Затем я обновил свою версию Kotlin с веб-сайта Kotlin в файле приложения gradle. Снова соберите приложение, и тогда оно сработало нормально.
источник
Одной из возможных причин может быть неправильный путь действия в файле Apps AndroidManifest.xml. Зарегистрируйте действие в вашем AndroidManifest.xml с полным относительным путем, как показано ниже.
<activity android:name="<full_path>.ActivityName" />
источник
для всех, кто сталкивается с этой проблемой сейчас, с Android Studio 4.0+ вам просто нужно включить java 8, как упоминалось здесь
android { defaultConfig { ... } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
источник
после того, как я попробовал данные ответы, я обнаружил еще одну причину того же исключения, что мне пришлось добавить библиотеку, которую я использую вручную, в свою основную библиотеку через
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
до этого решения я использовал «Исправить настройку проекта» из файла .java в eclipse, но это не сработало, поэтому мне пришлось добавить его вручную, и это сработало
источник
Я получал этот сбой только на устройствах Samsung Lollipop, и это решение сработало для меня.
dexOptions { preDexLibraries false }
Я публикую этот ответ здесь, потому что этот вопрос в настоящее время является самым высоким результатом поиска в Google для этого сбоя, и ни один из приведенных выше ответов не помог мне.
источник
Следующее решение сработало для меня ...
Я пробовал все, что упоминалось выше, но мое приложение все еще не запускалось. У меня есть приложение для реагирования, работающее в последней версии Gradle 4+ и студии Android.
У меня была проблема, когда, если я запускал run-android с реакцией, он не мог сказать, что он не может найти класс MainApplication ... т.е. ClassNotFoundException
Мне удалось решить проблему, когда я обновил свой gradle.properties, чтобы использовать компилятор D8.
Я добавил:
android.enableD8 = правда
в мой gradle.properties
Подробная информация о документе: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
источник
Ответ Ашика Аббаса (отключить Instant Run ) работает для меня, но мне нужен Instant Run , наконец, я нашел решение, которое полезно для меня. просто отключите minifyEnabled . перейдите в build.gradle (Module: app) в блоке отладки и отключите minifyEnabled :
debug { minifyEnabled false }
источник
В соответствии с моим пониманием, я получаю проблему после обновления Android Studio 2.1 до 2.3 из-за мгновенной функции, которую мое приложение не запускает, когда я копирую apk из вывода и помещаю в SD-карту. Для этой проблемы я создаю apk из опции сборки, создаю apk в студии Android.
источник
Если у вас включено
minifyEnabled
иshrinkResources
значение true в вашем файле приложения gradle. Вам нужно добавить следующую строку вproguard-rules.pro
файлпотому что минификация удаляет некоторые важные классы в нашем файле apk.
источник
У меня была эта проблема раньше, и комментарии здесь помогали в прошлом, но на этот раз этого не произошло. Я проверил свою конфигурацию proguard и удалил следующие строки, после чего все заработало, поэтому proguard может иметь какое-то отношение к этой ошибке:
-optimizationpasses 5 -overloadaggressively -repackageclasses '' -allowaccessmodification -dontskipnonpubliclibraryclassmembers
источник
В моем случае я использовал старую библиотеку пространств имен, пока мой проект был настроен с использованием androidx one.
Решение было заменить
android.support.design.widget.BottomNavigationView
компонент с правым бежать из библиотеки поддержки:com.google.android.material.bottomnavigation.BottomNavigationView
.источник
в моем случае я определяю Activity в
Manifest.xml
и забыл создатьactivity
. Итак, я создал Activity и определил его,manifest
и моя ошибка решена!источник
Если вы получаете эту ошибку после удаления некоторой зависимости Gradle, проверьте свой манифест и убедитесь, что вы удалили все записи, соответствующие этой зависимости.
источник
Для меня проблема появилась после того, как я создал подписанный APK. Чтобы исправить это, я создал новый отладочный apk с помощью Run / Build APK. После этого Run (cmd + r) снова работает без этой ошибки.
источник
Я столкнулся с той же проблемой. За день перепробовал все, но ничего не вышло. Зависимость, которая вызывала проблему, заключалась в использовании SDK более низкой компиляции, целевого SDK и минимального SDK. Я создал библиотечный модуль для проекта, скопировал все исходники и сопоставил версии sdk с версиями приложений sdk. И, наконец, это сработало как шарм.
источник