I run an app in a real device (Android 7.0 Table) from Android Studio, it's OK.
Now I create a APK file of the app, then I install it on my real device, finish I run the app.
I get the following errors, why ?
Why can an app run in real device by Android Studio and failed by install?
E:\>cd E:\Android_SDK\platform-tools
E:\Android_SDK\platform-tools>adb logcat --buffer=crash
03-20 12:05:29.378 15996 15996 E AndroidRuntime: FATAL EXCEPTION: main
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Process: info.dodata.voicerecorder, PID: 15996
03-20 12:05:29.378 15996 15996 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{info.dodata.voicerecorder/info.dodata.voicerecorder.ui.ActivityMain}: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class fragment
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2804)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2875)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.-wrap12(ActivityThread.java)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1578)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:105)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.os.Looper.loop(Looper.java:156)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6617)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class fragment
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: java.lang.RuntimeException: Exception inflating info.dodata.voicerecorder:navigation/nav_graph line 66
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.q.r.c()
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at androidx.navigation.NavController.j(:2)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at androidx.navigation.fragment.NavHostFragment.L(:32)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.m.b.r.U(:19)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.m.b.p.onCreateView(:5)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.m.b.e.onCreateView(:4)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:738)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:832)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.b.c.n.v()
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.b.c.k.setContentView()
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at info.dodata.voicerecorder.ui.ActivityMain.onCreate(:2)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6910)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2757)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2875)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.-wrap12(ActivityThread.java)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1578)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:105)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.os.Looper.loop(Looper.java:156)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6617)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: info.dodata.voicerecorder.model.MVoice
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.q.r.d(:1)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.q.r.b(:1)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at g.q.r.b(:27)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: ... 28 more
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: info.dodata.voicerecorder.model.MVoice
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.Class.classForName(Native Method)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.Class.forName(Class.java:400)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.Class.forName(Class.java:326)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: ... 31 more
03-20 12:05:29.378 15996 15996 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "info.dodata.voicerecorder.model.MVoice" on path: DexPathList[[zip file "/data/app/info.dodata.voicerecorder-1/base.apk"],nativeLibraryDirectories=[/data/app/info.dodata.voicerecorder-1/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64, /product/lib64]]
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
03-20 12:05:29.378 15996 15996 E AndroidRuntime: ... 34 more
Added Content
To Amin: Thanks!
My app can work well when I run it in Android Studio.
In order to shrink file size, I use the Code A in my Build.gradle, but it maybe cause the error which I don't image when I install and run the alone apk file.
Do you mean I should handle my classes just like Code B? It's too complex.
BTW, I think "minifyEnabled true" is too terrible, the shrunk apk file only cause error in runtime, I can't test it in Android Studio.
Code A
Build.gradle
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
}
}
Code B
-keep public class info.dodata.voicerecorder.model.**
{
public protected *;
}