Skip to content
This repository has been archived by the owner on Apr 25, 2024. It is now read-only.

Multidex problem: Didn't find class "neko.App" #143

Open
sakuraiyuta opened this issue Dec 1, 2015 · 3 comments
Open

Multidex problem: Didn't find class "neko.App" #143

sakuraiyuta opened this issue Dec 1, 2015 · 3 comments

Comments

@sakuraiyuta
Copy link

In my envoironment, created multidex apk can't execute because ClassLoader can't find neko.App class.

error log:

12-01 19:33:57.202: E/AndroidRuntime(1607): FATAL EXCEPTION: main
12-01 19:33:57.202: E/AndroidRuntime(1607): java.lang.RuntimeException: Unable to instantiate application neko.App: java.lang.ClassNotFoundException: Didn't find class "neko.App" on path: DexPathList[[zip file "/data/app/com.example.multidex_issue.debug-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.multidex_issue.debug-2, /system/lib]]
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.app.LoadedApk.makeApplication(LoadedApk.java:509)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.app.ActivityThread.access$1300(ActivityThread.java:141)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.os.Looper.loop(Looper.java:137)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at android.app.ActivityThread.main(ActivityThread.java:5103)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at java.lang.reflect.Method.invokeNative(Native Method)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at java.lang.reflect.Method.invoke(Method.java:525)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at dalvik.system.NativeStart.main(Native Method)
12-01 19:33:57.202: E/AndroidRuntime(1607): Caused by: java.lang.ClassNotFoundException: Didn't find class "neko.App" on path: DexPathList[[zip file "/data/app/com.example.multidex_issue.debug-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.multidex_issue.debug-2, /system/lib]]
12-01 19:33:57.202: E/AndroidRuntime(1607):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-01 19:33:57.202: E/AndroidRuntime(1607):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)

I checked generated dex files by using dex2jar, and found /neko/App.class in classes2.dex. I think it must be contained in classes.dex.
so I fixed proguard-multi-dex.cfg(added -keep public class neko.App) but it seems no effects.

sample code is here:
https://github.com/sakuraiyuta/example-multidex-issue

You can reproduce the problem. Checkout the code and execute commands as below:

$ ./generate-src.sh # <- It generates 3001 clj files in src/clojure/com/example/multidex_issue/
$ lein clean && lein droid doall
@sakuraiyuta
Copy link
Author

Note: You can check some fixes after lein new droid generated.
sakuraiyuta/example-multidex-issue@d856ea1

  • add :multidex value in project.clj
  • copy proguard-multi-dex.cfg from build/ dir to root dir

@alexander-yakushev
Copy link
Contributor

Since you have the config in build, it should be :multi-dex-proguard-conf-path "build/proguard-multi-dex.cfg", I think. Try to execute withDEBUG=1` and see which full file path is used exactly.

@sakuraiyuta
Copy link
Author

Thx for reply!

I fixed project.clj as below:
sakuraiyuta/example-multidex-issue@b3c9c71

then execute commands as below:

lein clean && DEBUG=1 lein droid doall | tee build.log

build.log:

Leiningen's classpath: /home/user/.lein/self-installs/leiningen-2.5.0-standalone.jar
Applying task droid to [doall]
Extracting AAR dependencies:  #{[com.android.support/multidex 1.0.0 :extension aar]}
Generating manifest...
Merging secondary manifests: (#<File /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/AndroidManifest.xml>)
Generating R.java files...
/opt/android-sdk/build-tools/21.1.1/aapt package -f -m -M /home/user/git/example-multidex-issue/target/debug/AndroidManifest.xml -S /home/user/git/example-multidex-issue/target/debug/res -S /home/user/git/example-multidex-issue/res -S /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/res -I /opt/android-sdk/platforms/android-15/android.jar -J /home/user/git/example-multidex-issue/target/debug/gen --output-text-symbols /home/user/git/example-multidex-issue/target/debug/gen --auto-add-overlay --generate-dependencies

Running javac with [-target 1.6 -source 1.6 -Xlint:-options @/tmp/.leiningen-cmdline947228325897226401.tmp]
Applying task javac to nil
Running javac with [-target 1.6 -source 1.6 -Xlint:-options @/tmp/.leiningen-cmdline301430601603197623.tmp]
Compiling Clojure files...
Project classpath: (/opt/android-sdk/tools/support/annotations.jar /opt/android-sdk/platforms/android-15/android.jar /home/user/git/example-multidex-issue/test /home/user/git/example-multidex-issue/src/clojure /home/user/git/example-multidex-issue/src /home/user/git/example-multidex-issue/resources /home/user/git/example-multidex-issue/target/debug/classes /home/user/.m2/repository/neko/neko/4.0.0-alpha5/neko-4.0.0-alpha5.jar /home/user/.m2/repository/org/clojure/tools.nrepl/0.2.10/tools.nrepl-0.2.10.jar /home/user/.m2/repository/org/clojure-android/clojure/1.7.0-r2/clojure-1.7.0-r2.jar /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/classes.jar)
Build type: debug, dynamic compilation: enabled, remote REPL: enabled.
Applying task javac to nil
Running javac with [-target 1.6 -source 1.6 -Xlint:-options @/tmp/.leiningen-cmdline4775556264652942805.tmp]
Compiling com.example.multidex-issue.func2639
...
(omit: so many clj file compilation)
...
Compiling com.example.multidex-issue.func1430
Compilation succeeded.
Creating multi DEX....
/opt/android-sdk/tools/proguard/bin/proguard.sh @/home/user/git/example-multidex-issue/build/proguard-multi-dex.cfg -injars /home/user/git/example-multidex-issue/target/debug/classes:/home/user/.m2/repository/neko/neko/4.0.0-alpha5/neko-4.0.0-alpha5.jar:/home/user/.m2/repository/org/clojure/tools.nrepl/0.2.10/tools.nrepl-0.2.10.jar:/home/user/.m2/repository/org/clojure-android/clojure/1.7.0-r2/clojure-1.7.0-r2.jar:/home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/classes.jar -libraryjars /opt/android-sdk/build-tools/21.1.1/lib/shrinkedAndroid.jar -outjars /home/user/git/example-multidex-issue/target/debug/root-classes.jar
ProGuard, version 4.7
Reading program directory [/home/user/git/example-multidex-issue/target/debug/classes]
Reading program jar [/home/user/.m2/repository/neko/neko/4.0.0-alpha5/neko-4.0.0-alpha5.jar]
Reading program jar [/home/user/.m2/repository/org/clojure/tools.nrepl/0.2.10/tools.nrepl-0.2.10.jar]
Reading program jar [/home/user/.m2/repository/org/clojure-android/clojure/1.7.0-r2/clojure-1.7.0-r2.jar]
Reading program jar [/home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/classes.jar]
Reading library jar [/opt/android-sdk/build-tools/21.1.1/lib/shrinkedAndroid.jar]
Preparing output jar [/home/user/git/example-multidex-issue/target/debug/root-classes.jar]
  Copying resources from program directory [/home/user/git/example-multidex-issue/target/debug/classes]
  Copying resources from program jar [/home/user/.m2/repository/neko/neko/4.0.0-alpha5/neko-4.0.0-alpha5.jar]
  Copying resources from program jar [/home/user/.m2/repository/org/clojure/tools.nrepl/0.2.10/tools.nrepl-0.2.10.jar]
Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [tools.nrepl-0.2.10.jar:META-INF/MANIFEST.MF])
  Copying resources from program jar [/home/user/.m2/repository/org/clojure-android/clojure/1.7.0-r2/clojure-1.7.0-r2.jar]
Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [clojure-1.7.0-r2.jar:META-INF/MANIFEST.MF])
  Copying resources from program jar [/home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/classes.jar]
Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])

/opt/android-sdk/build-tools/21.1.1/dx -JXmx4096M --num-threads=4 --dex --no-optimize --multi-dex --main-dex-list /home/user/git/example-multidex-issue/target/debug/main-dex-list.txt --output /home/user/git/example-multidex-issue/target/debug /home/user/git/example-multidex-issue/target/debug/classes /home/user/.m2/repository/neko/neko/4.0.0-alpha5/neko-4.0.0-alpha5.jar /home/user/.m2/repository/org/clojure/tools.nrepl/0.2.10/tools.nrepl-0.2.10.jar /home/user/.m2/repository/org/clojure-android/clojure/1.7.0-r2/clojure-1.7.0-r2.jar /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/classes.jar /opt/android-sdk/tools/support/annotations.jar
--num-threads is ignored when used with --multi-dex

Crunching resources...
/opt/android-sdk/build-tools/21.1.1/aapt crunch -v -S /home/user/git/example-multidex-issue/res -C /home/user/git/example-multidex-issue/target/debug/res
Crunching PNG Files in source dir: /home/user/git/example-multidex-issue/res
To destination dir: /home/user/git/example-multidex-issue/target/debug/res

Packaging resources...
/opt/android-sdk/build-tools/21.1.1/aapt package --no-crunch -f --debug-mode --auto-add-overlay -M /home/user/git/example-multidex-issue/target/debug/AndroidManifest.xml -S /home/user/git/example-multidex-issue/target/debug/res -S /home/user/git/example-multidex-issue/res -S /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/res -A /home/user/git/example-multidex-issue/assets -A /home/user/git/example-multidex-issue/target/debug/assets-gen -A /home/user/git/example-multidex-issue/target/debug/aar-extracted/com.android.support_multidex_aar_1.0.0/assets -I /opt/android-sdk/platforms/android-15/android.jar -F /home/user/git/example-multidex-issue/target/debug/example-multidex-issue.ap_ --generate-dependencies --rename-manifest-package com.example.multidex_issue.debug

Creating APK...
Adding DEX files:  (#<File /home/user/git/example-multidex-issue/target/debug/classes.dex> #<File /home/user/git/example-multidex-issue/target/debug/classes2.dex>)
Signing APK with /home/user/.android/debug.keystore ...
jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore /home/user/.android/debug.keystore -storepass android -keypass android /home/user/git/example-multidex-issue/target/debug/example-multidex-issue-unaligned.apk androiddebugkey

...
(omit: notice message: jar-file certification expired)
...

Aligning APK...
/opt/android-sdk/build-tools/21.1.1/zipalign 4 /home/user/git/example-multidex-issue/target/debug/example-multidex-issue-unaligned.apk /home/user/git/example-multidex-issue/target/debug/example-multidex-issue.apk

/opt/android-sdk/platform-tools/adb devices
List of devices attached
CB5A275YVG  device
192.168.57.101:5555 device


1. CB5A275YVG   device
2. 192.168.57.101:5555  device
Enter the number 1..2 to choose the device: Installing APK...
/opt/android-sdk/platform-tools/adb -s 192.168.57.101:5555 install -r /home/user/git/example-multidex-issue/target/debug/example-multidex-issue.apk
12339 KB/s (3499870 bytes in 0.276s)
    pkg: /data/local/tmp/example-multidex-issue.apk
Success


Launching APK...
/opt/android-sdk/platform-tools/adb -s 192.168.57.101:5555 shell am start -n com.example.multidex_issue.debug/com.example.multidex_issue.SplashActivity
Starting: Intent { cmp=com.example.multidex_issue.debug/com.example.multidex_issue.SplashActivity }

Binding device port 9999 to local port 9999 ...
/opt/android-sdk/platform-tools/adb -s 192.168.57.101:5555 forward tcp:9999 tcp:9999

This log has some omitted line. Complete log file is here
Sorry the log file contains multi-byte characters because my environment has japanese settings.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants