我目前正在开展一个项目,我必须使用纯粹的原生ndk。当我尝试从Irrlicht引擎源运行helloworld示例时,它工作正常。然后我尝试在我的项目中使用它,遵循该示例的相同格式。但我得到了:
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中给出了Activity名称:
<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" />
我在这里做的错误是什么?如果需要,我会发布完整的代码。
答案 0 :(得分:74)
我尝试了所有可能的选项,但结果为零。最后我找到了对我有帮助的正确解决方案。只需停用即时停止转到文件 - &gt;设置 - &gt;构建,执行,部署 - &gt;即时运行 - &gt;取消选中即时运行的复选框。运行你的应用程序一次,这个apk文件正常工作..
答案 1 :(得分:64)
我有类似的问题,这是我的解决方案:
您还可以查看this回答。
答案 2 :(得分:36)
这似乎是你的问题。清单中活动的相对路径不正确:
<activity android:name="android.app.POMActivity"
将其替换为:
<activity android:name=".POMActivity"
或
<activity android:name="com.irrlicht.example1.POMActivity"
答案 3 :(得分:21)
删除设备上的应用程序和清理项目工作
答案 4 :(得分:20)
我应该只看到
来理解这个问题dex错误
但是花了半天时间才解决这个问题 我通过遵循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'
}
然后按照上述链接的指示,使用AndroidManifest.xml
类扩展Application类(或在attachBaseContext()
中声明应用程序类或覆盖MultiDexApplication
函数。
这就是全部,它解决了这个问题。
答案 5 :(得分:19)
如果布局中包含自定义视图,也会发生此异常,如下所示:
<com.example.MyView
android:layout_width="match_parent"
android:layout_height="match_parent" />
并且您将视图的包名称从“com.example”更改为其他内容,但您也忘记在布局中更改它。
答案 6 :(得分:11)
为我工作。
答案 7 :(得分:11)
我在android studio终端中使用:./gradlew --stop
命令解决了这个问题。执行此命令后,清理并重建项目。
答案 8 :(得分:11)
试试清洁项目&amp; 重建项目。
答案 9 :(得分:10)
对于任何拥有multidex enable的人来说,写这个
在 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">
答案 10 :(得分:8)
我多次遇到此问题,并且通过停用即时运行来解决所有问题。
答案 11 :(得分:7)
只需清洁您的项目即可。它对我有用。
答案 12 :(得分:7)
如果项目刚刚编译,您可以尝试使用以下命令清除缓存:
./gradlew clean
或
./gradlew cleanBuildCache
或用于Windows
gradlew cleanBuildCache
答案 13 :(得分:6)
对于现在遇到此问题的任何人,使用android studio 4.0及更高版本,您只需启用here中提到的Java 8
android {
defaultConfig {
...
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
答案 14 :(得分:6)
我们不需要具有扩展 MultiDexApplication 的自定义应用程序类。相反,我们可以在 AndroidManifest.xml
上使用此功能#project_tasks/edit.html.erb
<h1>Editing Project</h1>
<%= render 'form', project: @project %>
<div id='project_task_listing'></div>
<%= link_to 'Show', @project %> |
<%= link_to 'Back', projects_path %>
<script>
$(function(){
$.ajax({
//make ajax request to action: 'index', controller: 'ProjectTasks' and in response update div with id 'project_task_listing'
});
});
<script>
以及 build.gradle (模块:应用),
<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">
感谢。
答案 15 :(得分:5)
当您使用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'
答案 16 :(得分:3)
在我尝试了给定的答案之后,我发现了同样异常的另一个原因,我必须通过手动将库添加到我的主库中
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
在此解决方案之前,我使用了&#34;修复项目设置&#34;来自eclipse中的.java文件,但这不起作用,所以我不得不在这里手动添加它并且它起作用
答案 17 :(得分:3)
我只是在三星Lollipop设备上发生了这次崩溃,这个solution对我有用。
dexOptions {
preDexLibraries false
}
我在这里发布这个答案是因为这个问题目前是谷歌此次崩溃中排名最高的搜索结果,上述答案都不适合我。
答案 18 :(得分:3)
就我而言,这个问题是因为Kotlin而产生的。在我现有的代码中,有一个写Kotlin的类。我构建了应用程序,它已经安装,并且一旦第一个活动打开应用程序就崩溃了。在logcat中显示此错误。然后我在app gradle文件中从Kotlin网站更新了我的Kotlin版本。再次构建应用程序然后它运行良好。
答案 19 :(得分:3)
只需将您的文件夹名称从lib
更改为libs
,
然后,您将在项目中看到一些错误标记,以解决此问题,点击项目&gt;
Properties > Java Build Path > libraries
:
删除所有带有红色标记的库,然后在清理项目后删除apply > ok >
。 TADA看到了魔力:)
答案 20 :(得分:2)
以下解决方案对我有用......
我尝试了上面提到的所有内容,但仍未启动我的应用。 我有最新版本的gradle 4+和android studio运行的react-native app。
我遇到的问题是,如果我运行react-native run-android,那么问题就是失败了,说它无法找到MainApplication类......即ClassNotFoundException
当我更新gradle.properties以使用编译器D8时,我能够解决这个问题。
我补充说:
android.enableD8 =真
到我的gradle.properties
Doc详细信息: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
答案 21 :(得分:1)
如果在应用gradle文件中将minifyEnabled
和shrinkResources
设置为true。您需要在proguard-rules.pro
文件中添加以下行
-保留类com.yourpackage_name。** {*; }
因为最小化已删除了我们apk文件中的一些重要类。
答案 22 :(得分:1)
我遇到了同样的错误,并且在新手问题上一些答案误导了我。我的自定义视图描述符中的程序包错误,如下所示。希望对您有所帮助。
<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" />
答案 23 :(得分:1)
Ashik abbas answer(禁用即时运行)对我有用,但是我需要即时运行,最后我找到了对我有用的解决方案。 只需禁用 minifyEnabled 。 转到 debug 块中的 build.gradle(模块:应用),并禁用 minifyEnabled :
debug {
minifyEnabled false
}
答案 24 :(得分:1)
根据我的说法,我在更新android studio 2.1到2.3后得到问题由于即时功能,当我从输出复制apk并放入sdcard时,我的应用程序将无法运行。 对于这个问题,我在android studio中构建apk构建apk。
答案 25 :(得分:1)
如果在删除某些gradle依赖项后收到此错误,请检查清单并确保删除了与该依赖项相对应的所有条目。
答案 26 :(得分:1)
在我的案例中,我在Manifest.xml
中定义了活动,却忘记创建任何activity
。
所以我创建了Activity并在manifest
中定义了它,我的错误就解决了!
答案 27 :(得分:0)
对我来说,我最终要做的是禁用minifyEnabled false
和shrinkResources false
答案 28 :(得分:0)
对我来说,问题出现在我创建签名APK之后。为了解决这个问题,我使用Run / Build APK生成了一个新的调试apk。之后,Run(cmd + r)再次运行,没有此错误。
答案 29 :(得分:0)
Flipper不适用于0.61.x
,因此在initializeFlipper(this)
中注释/删除MainApplication.java
应该可以解决问题。
冷丸。
答案 30 :(得分:0)
我要使用@hofs,但要显示应将minifyEnabled放在哪里。
在Module Gradle中,在 Debug 块中添加 minifyEnabled false 对我有用。
android {
compileSdkVersion 28
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.korechi.roamioapp"
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
}
}
}
答案 31 :(得分:0)
这类似于我的问题-将Kotlin文件添加到全Java应用程序后,当我访问使用Kotlin文件的视图时,我的应用程序一直崩溃。我关闭了Android Studio并重新启动它,它提示我“未配置Kotlin,您要配置吗?”,这提示了我。
这最终是在我的项目classpath
文件中添加以下build.gradle
行:
buildscript {
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
...
}
...
}
答案 32 :(得分:0)
这解决了我的情况:
就我而言,我在下面遇到了异常(请注意,我的应用程序类在引起异常,而不是我的活动):
ClassNotFoundException: Didn't find class "com.example.MyApplication" on path: DexPathList
我仅在等于或低于API 19的设备上遇到此异常,原因是我正在扩展MultiDexApplication()
类并同时覆盖attachBaseContext
!当我移除attachBaseContext
后,一切都步入正轨。
class MyApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
// ...
}
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
MultiDex.install(this)
}
因此,如果您碰巧遇到我这样的情况(不太可能),则无需同时扩展MultiDexApplication()
和覆盖attachBaseContext
,就可以执行以下操作之一足够。
答案 33 :(得分:0)
一个可能的原因是Apps AndroidManifest.xml文件中的活动路径不正确。 使用如下所示的完整相对路径在AndroidManifest.xml中注册活动。
<activity android:name="<full_path>.ActivityName" />
答案 34 :(得分:0)
就我而言,我在使用androidx one设置项目时使用了旧的名称空间库。
解决方案是将android.support.design.widget.BottomNavigationView
组件替换为从支持库com.google.android.material.bottomnavigation.BottomNavigationView
中逃脱的正确组件。
答案 35 :(得分:0)
您还可以看到Class not found when Unmarshalling Android Intent Parcelable或Android E/Parcel﹕ Class not found when unmarshalling (only on Samsung Tab3),但是这些主题都没有帮助我。我什至重写了一个可包裹的课程。
答案 36 :(得分:0)
我面临着同样的问题。我尝试了一天的一切,但没有任何效果。 导致问题的依赖项是使用较低的编译sdk,目标sdk和最小sdk。我为该项目创建了库模块,复制了所有源,并将sdk版本与应用程序sdk版本进行了匹配。最后,它像魅力一样起作用。
答案 37 :(得分:0)
我以前有这个问题,过去的评论过去很有帮助,但是这次没有。我检查了我的proguard配置,并删除了以下几行,然后它起作用了,因此proguard可以处理此错误:
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
答案 38 :(得分:-1)
删除“ android / app / .settings”文件夹
或
删除“ android / .settings”文件夹
或
删除“ android / .build”文件夹
或
删除“ android / .idea”文件夹
和
yarn react-native运行android