200

I'm currently working on a project in which I have to use purely native ndk. It worked when I try running an helloworld example from Irrlicht engine source. Then I try using it in my project following the same format of that example. But I got:

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]]

while running my project.

Here is my main.cpp file:

#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)

And I have given Activity name in 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" />                     

What is the mistake I am doing here? I'll post full code if necassary.

6
  • 1
    Are you using any external jar files? Commented Mar 14, 2014 at 8:29
  • @SiddharthVyas No , I'm not using external jar files in this. Commented Mar 14, 2014 at 9:11
  • 1
    Is your application multi-dexed? If so, then that explains the problem. Commented Aug 9, 2016 at 16:25
  • when i did a signed apk this error did not happen. just debug Commented Jul 5, 2017 at 8:52
  • Did you find a working solution ? Commented Oct 6, 2017 at 15:48

47 Answers 47

95

I tried all possible options but result is zero. Finally i found correct solution which is helpful for me. Just go to disable Instant Run Go to File -> Settings -> Build,Execution, Deployment -> Instant Run -> Uncheck the checkbox for instant run. Run your app once and this apk file work properly..

Sign up to request clarification or add additional context in comments.

12 Comments

This is the correct answer for Android Studio. I can't believe that Instant Run is still so buggy to the extend that you have to turn it off in order to avoid nasty surprises...
I have been looking for this answer for days, even weeks! Although not critical, this issue has been on the back of my mind, not giving me peace. Never thought instant run was the one triggering this. My app worked fine when launched via adb, but always crashed with ClassNotFound runtime expection when manually installing it via apk.
That's not the solution to me. I had disabled the instant run
After disabled the options. Please restart your android studio
can't find instant run in modern android studio :(
|
79

This seems to be problem in your case. The relative path of your activity in manifest is not correct:

<activity android:name="android.app.POMActivity"

replace this with :

<activity android:name=".POMActivity"

or

<activity android:name="com.irrlicht.example1.POMActivity"

2 Comments

This was the solution for me after refactoring MainActivity into a different package
for me, I change the package name on MainActivity.kt file on this "android/app/src/main/kotlin/net/appdevs/OLD_PACKAGE_NAME"to the new package name.
62

I had a similar problem, here's my solution:

  1. Right click on your project and select Properties.
  2. Select Java Build Path from the menu on the left.
  3. Select the Order and Export tab.
  4. From the list make sure the libraries or external jars you added to your project are checked.
  5. Finally, clean your project & run.

You may also check this answer.

6 Comments

I cannot find Properties from right click of project. May be I am stupid. :(
I can't find properties either, anybody figure out how to navigate to the listed page
This is a solution for the Eclipse IDE. There is no default 'project.properties' file in Android Studio. It can be created though.
The provided solution is only applicable for Eclipse IDE.
@Zin Min, you're not stupid, telling someone to 'right click on a project' is just terrible advice. Right click where? In your file manager? Do we need to close the project in Android Studio if it's already open?
|
42

The deletion of app on device and cleaning of project works for me

2 Comments

This worked for me too with react native. I opened the android folder with Android Studio and then build -> clean project. Rebuilt it with react-native run-android
Did the same as comment above and it worked ! Thanks !
34

Just try Clean Project & Rebuild Project.

2 Comments

Under "Build" menu. Select Build -> Clean Project and then Build -> Rebuild Project
This would imply that the app only crashes locally, bu the crash also occurs in a release version, so this isn't really a solution.
29

I should understand the problem by just seeing

dex errors

But it took a half day to fix the issue. I fixed it by following the instructions on the Android Developers page: https://developer.android.com/studio/build/multidex.html

First, add this to build.gradle file:

defaultConfig {
    ...
    minSdkVersion 15 
    targetSdkVersion 33
    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'

 }

Then extend the Application class with the MultiDexApplication class as instructed on the above link (or declare the application class in AndroidManifest.xml or override attachBaseContext() function if it is not possible to extend the application class).

That's all, and it solved the problem.

7 Comments

Adding multi-dex is useful only when you pass the reference count limit (56k), and it is very unstable and very unreliable prior to Lollipop. This should be used to fix problems as a last resort.
Ok thanks for the info , Please update here if you found a good solution , it would be a great help.
Adding the line in dependencies above did it for me.
After doing that, I needed to clean and rebuild the project.
But according the official doc, we don't need to add multidexEnable when our app' targetSDKVersion >= 21. Additional, multiDexEnable can only solve NoClassDefFoundError, ClassNotFoundException can't be resolved
|
25

This exception can also occur when you have a custom view in your layout like this:

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

and you change the view's package name from "com.example" to something different, but you forget to change it in the layout as well.

1 Comment

This was helpful for a different reason. Check your spelling. I had a misspelled class name causing the original issue.
19

If the project was compiling just before, you can try to clear the cache using :

./gradlew clean

or

./gradlew cleanBuildCache

or for windows

gradlew cleanBuildCache

https://developer.android.com/studio/build/build-cache.html

1 Comment

Sometimes you'll need to go further and do a: File -> Invalidate Caches & Restart....
15

for anyone who comes across this problem now, with android studio 4.0+ you just have to enable java 8 as mentioned here

android {
    defaultConfig {
            ...
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

2 Comments

This took forever for me to find. Thank you very much!
This is fixed my issue
14

the solution for me was : performing ./gradlew --stop command in android studio terminal. After that just clean and rebuild the project.

Comments

11
  1. delete the bin folder
  2. change the order of librarys
  3. clean and rebuild

worked for me.

Comments

10

For any one who is having multidex enable write this

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'
}

write a class EnableMultiDex like below

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();

    }
}

and in AndroidManifest.xml write this className inside 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">

3 Comments

How does enableMultiDex affect? In my case javaMaxHeapSize "4g" didn't help.
@CoolMind Its just an application class which extends MultiDexApplication . It is necessary if you want to use multidex
Agree. I use either MultiDexApplication or attachBaseContext (see developer.android.com/studio/build/multidex).
8

In my case this issue arose because of Kotlin. In my existing code there was a class that was written Kotlin. I built the app, it installed and as soon as first activity opened app crashed. in the logcat this error was being shown. I then updated my Kotlin version from Kotlin website in app gradle file. Build the app again and it worked fine then.

5 Comments

Wow, I have a 99%-Kotlin project What to do? :)
Can you please check, with Kotlin version is compatible with your underlying Android Studio. Its just a guess. take a look
I have AS 3.3.1 and Kotlin 1.3.21. They are latest stable. Sorry, I suppose, all solutions described above and below are not suitable to my situation.
yep, Thanks for reminding me, it indeed is the "kapt" annotation processor and kotlin plugin that needed to be added to my build.gradle coz, I did a 100% conversion from java to Kotlin but forgot that the compiler needs to be Kotlin compiler to generate the classes. Tricky to remember but effective constraint to watchout when dealing with kotlin environment.
WORKED FOR ME - This was because of the Kotlin configuration. If you convert the Java class in Kotlin and Kotlin is not configured you may face this issue. To resolve this issue, add this line in gradle plugins (project Level) id 'org.jetbrains.kotlin.android' version '1.8.0' apply false This line in gradle plugins (app level) id 'org.jetbrains.kotlin.android'
8

Open "AndroidManifest" file and check for errors
or
check whether you have declared that activity name (which we forget when we copy+paste class of activity).

in my case i had replaced all occurrences "com" with "ctrl"+"shift"+"R" command, which also changed the names of activities (which started with com) in manifest.

Comments

7

We don't need to have customized Application class which extends MultiDexApplication. Instead, we can have like this on 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">

And along with this on build.gradle(Module:app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

Thanks.

1 Comment

Changing the application name, worked for me when I was trying to run the app on android 4.3
7

I faced this Issue multiple times and they're all solved by disabling Instant Run.

2 Comments

Tried multiple solutions, this little thing solved the problem, unbelievable!
@FraK, the most rated solution contains this advice. Though I had already unchecked Instant Run (several years it has bringing many bugs).
6

When you are using multidex , then try to extend your application class with MultiDexAppication instead of Application and override below method this required for Android below 5.0 (because 5.0 and above support to the multidex)

@Override
protected void attachBaseContext(Context base)
{
    super.attachBaseContext(base);
    MultiDex.install(BaseApplication.this);
}

and in dependencies add this

compile 'com.android.support:multidex:1.0.1'

1 Comment

We should override this method if we extend from Application. Why should we override in a case of MultiDexAppication?
6

One possible reason would be the incorrect path of the activity in the Apps AndroidManifest.xml file. Register the activity with in your AndroidManifest.xml with full relative path like below.

<activity android:name="<full_path>.ActivityName" />

Comments

4

Just Change your folder name from lib to libs ,

Then you will see some error marks in your project, to resolve this rightClick on project >

Properties > Java Build Path > libraries :

Remove all the library with red marks on it, then apply > ok > after that clean your project . TADA see the magic :)

1 Comment

folder name is libs only
4

I was getting this crash only on Samsung Lollipop devices and this solution worked for me.

dexOptions {
     preDexLibraries false
}

I'm posting this answer here because this question is currently the highest ranked search result on Google for this crash and none of the above answers worked for me.

1 Comment

It didn't help me (Samsung Galaxy S4, Android 5.0.1).
4

This was similar to my problem--after adding a Kotlin file to an all Java app, my app kept crashing when I would access a view that used a Kotlin file. I shut down Android Studio and restarted it, and it prompted me with a message saying "Kotlin not configured, would you like to configure?", which then solved my problem.

What this ultimately did is add the following classpath line inside my project build.gradle file:

buildscript {
   ...
   dependencies {
      ...
      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
      ...
   }
   ...
}

Comments

3

after i tried the given answers, i found out another reason for the same Exception, that i had to add the library i'm using manually to my main library through

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

before this solution, i used the "Fix Project setup" from within the .java file in eclipse, but this did not work, so i had to add it manually here and it worked

Comments

3

I am going with @hofs but displaying where should put minifyEnabled.

In Module Gradle, Add minifyEnabled false in Debug block will work for me.

 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
        }
    }

}

1 Comment

I added minifyEnabled false for release build then it start working at my side also thanks @Arpit
2

As per my understading i get the issue after update android studio 2.1 to 2.3 due to the instant feature my application will not run when i copy the apk from output and put into the sdcard. For this problem i build the apk from build option do build apk in android studio.

Comments

2

The following solution worked for me...

I tried everything mentioned above but still didn't get my app running. I have react-native app running on latest version of gradle 4+ and android studio.

I had the issue where if i run react-native run-android it was failing with issue saying its not able to find MainApplication class...i.e ClassNotFoundException

I was able to resolve the issue when I updated my gradle.properties to use the compiler D8.

I added:

android.enableD8=true

to my gradle.properties

Doc Details here: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

1 Comment

The Android Studio 3.1+ uses this dex complier by default
2

If you are enabled minifyEnabled and shrinkResources to true in your app gradle file. You need to add the following line in proguard-rules.pro file

-keep class com.yourpackage_name.** { *; }

because minification is removed some important classes in our apk file.

1 Comment

This is not a good solution because it excludes all of your source files from resource shrinking. Only exclude only the files that are really necessary instead, otherwise you inflate your apk size.
2

i had this issue before and the comments here helped in the past but this time it did not. i checked my proguard configuration and i removed the following lines and then it worked so proguard can have something to do with this error:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

Comments

2

Ashik abbas answer (disable Instant Run) work for me, but i need Instant Run, finally i found solution which is helpful for me. just disable minifyEnabled. go to build.gradle(Module: app) in debug block and disable minifyEnabled:

debug {
            minifyEnabled false

        }

Comments

2

My issue was because of kapt.

I had a dependency on Hilt but the kapt method wasn't working, so I changed it to implementation just so it would compile.

The reason kapt was showing an error was because I was missing this plugin at the top of the file:

id("org.jetbrains.kotlin.android")

Comments

1

In my case, I used the old namespace library while my project was set up making use of androidx one.

The solution was to replace android.support.design.widget.BottomNavigationView component with the right one to escape from support library: com.google.android.material.bottomnavigation.BottomNavigationView.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.