【发布时间】:2020-04-23 21:01:13
【问题描述】:
我正在尝试创建一个包名称为“com.cvs.myapp”的应用程序。应用构建完美,但在运行时在设备中崩溃。
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.cvs.myapp/com.cvs.myapp.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.cvs.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/com.cvs.myapp-DG6fxWRjVXjsKQV_vwJwAw==/base.apk"],nativeLibraryDirectories=[/data/app/com.cvs.myapp-DG6fxWRjVXjsKQV_vwJwAw==/lib/x86, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.cvs.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/com.cvs.myapp-DG6fxWRjVXjsKQV_vwJwAw==/base.apk"],nativeLibraryDirectories=[/data/app/com.cvs.myapp-DG6fxWRjVXjsKQV_vwJwAw==/lib/x86, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
这只是一个新项目,没有其他添加,仅包含一个 MainActivity 类。如果我将包重命名为“com.demo.myapp”,则相同的新项目将起作用。
使用Analyze APK,我可以看到classes.dex 文件不包含MainActivity。名称“cvs”是否会导致问题,因为它可以与任何其他名称完美配合?
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
build.gradle(项目)
classpath 'com.android.tools.build:gradle:3.6.3'
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cvs.myapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.cvs.myapp.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
【问题讨论】:
-
我不认为这是一个 proguard 问题,因为如果我重命名包名称,同一个项目将完美运行。我认为这与当前的名称有关。如果我将 gradle 版本更改为 classpath 'com.android.tools.build:gradle:3.0.1 distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all,同样的项目也将在设备上运行.zip 。在我将版本更新到最新版本之前它工作正常。
-
你加了
multiDexEnabled true吗? -
是的,我已经添加了。没用。即使我不添加这个并重构包名,它也会在设备中运行而不会崩溃。
-
根据链接github.com/gradle/gradle/search?q=cvs&unscoped_q=cvs,名称“cvs”似乎被排除在外。遵循链接github.com/gradle/gradle/issues/11017 中提供的解决方案。添加:org.apache.tools.ant.DirectoryScanner.removeDefaultExclude("/CVS") org.apache.tools.ant.DirectoryScanner.removeDefaultExclude("**/CVS/") 到 settings.gradle