当我在Android studio中使用USB在真实设备中测试时,我的应用程序工作正常。但是当我将apk发送到另一台设备并安装在那里时,它无法正常工作.App得到崩溃。我没有找到任何正确的方法解决问题。错误如下:
FATAL EXCEPTION: main Process: com.w3xplorers.cmch,PID: 17715 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.w3xplorers.cmch/com.w3xplorers.cmch.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2544)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1085)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2385)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2544)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) Suppressed: java.lang.ClassNotFoundException: com.w3xplorers.cmch.MainActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 12 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
我的清单如下:
`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.w3xplorers.cmch">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:name="com.w3xplorers.cmch.EnableMultiDex"
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.w3xplorers.cmch.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.w3xplorers.cmch.HomeActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.QuickSms"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.GroupSms"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.SelfSms"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.Contact"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.Favourite"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.w3xplorers.cmch.Info"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity android:name="com.w3xplorers.cmch.Dialog" />
</application>
</manifest>`
以下Gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.w3xplorers.cmch"
minSdkVersion 13
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',
{
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha5'
compile 'com.android.support:design:25.3.0'
compile 'com.andreabaccega:android-form-edittext:1.0.3'
compile 'com.android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
}
答案 0 :(得分:8)
转到项目级build.gradle 文件,并将gradle依赖项的版本降低到低于 2.3.0 的任何值,例如使用 2.2.3 < /强>
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
....
}
然后清理 - &gt; build - &gt;将debug apk安装到其他设备 - &gt;它可能确定然后!
答案 1 :(得分:5)
我认为问题是AndroidStudio正在使用“即时运行”而不是编译和安装新的APK。
从文件中禁用“即时运行” - &gt;设置 - &gt;构建,执行,部署 - &gt;即时跑步。
答案 2 :(得分:4)
在您的应用程序标记中,更改
android:name="com.w3xplorers.cmch.EnableMultiDex"
带
android:name="android.support.multidex.MultiDexApplication"
希望这会有所帮助:)
更多信息:
答案 3 :(得分:3)
更新到Android Studio 3.5后,我必须启用Java 8支持
在build.gradle文件中添加以下行:
android {
defaultConfig {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
您可以在此处查看文档: https://developer.android.com/studio/write/java8-support
答案 4 :(得分:2)
正如你所说,你构建应用程序并通过USB推送到手机,我相信你从你的构建目录中复制了apk并试图在其他设备上推送和运行。请尝试构建您的apk,而无需定位或连接任何设备或模拟器我的意思是从终端构建您的apk而不连接您的设备。它可以工作,也可以显示一些东西。
答案 5 :(得分:2)
您必须遵循官方文档: https://developer.android.com/studio/build/multidex.html#mdex-gradle
的build.gradle:
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
YourApp课程
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
答案 6 :(得分:1)
我也面临类似的问题。在我的情况下,我通过在 buildTypes
下面添加了这个来解决问题dexOptions {
javaMaxHeapSize "4g"
}
也用过
defaultConfig {
multiDexEnabled true
}
和
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
答案 7 :(得分:1)
我没有为我的问题找到任何完美的解决方案。但是当我在google play上传我的apk并从那里下载时,app工作正常。这是我找到的最奇怪的解决方案。
答案 8 :(得分:1)
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
答案 9 :(得分:1)
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
也许你没有制作你的应用程序Multidex.install(this);
答案 10 :(得分:1)
在build.gradle中添加
defaultConfig {
multiDexEnabled true
}
还要添加依赖项
dependencies {
compile 'com.android.support:multidex:1.0.0'}
答案 11 :(得分:1)
尝试了此处提到的所有答案后,仍然无法使用,请尝试使用File-> Invalidate Caches / Restart-> Invalidate and Restart。
对我有用。
答案 12 :(得分:1)
可能是因为您启用了即时运行功能,因此只需尝试禁用即时运行。
文件 - &gt;设置 - &gt;构建,执行,部署 - &gt;即时运行 - &gt; 取消选中即时运行的复选框
答案 13 :(得分:1)
它对我来说就像是一种魅力:)
答案 14 :(得分:0)
gradlew clean
in yourflutterproject/android
为我工作
答案 15 :(得分:0)
请谨慎执行以下步骤:
第1步:在应用级gradle中添加multidex
implementation 'com.android.support:multidex:1.0.3'
第2步:启用multidex
defaultConfig {
multiDexEnabled true
}
第3步:最后在应用程序内部添加此代码。从MultiDex.install(<< [parameter])中的attachBaseContext上下文传递参数,例如:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base); //not this use base. MultiDex.install(this); this will lead to some error in some prelolipop device.
}
答案 16 :(得分:0)
检查“活动”在Android清单中的拼写是否正确
答案 17 :(得分:0)
更改应用程序类的扩展类
来自public class MyApplication extends Application { ... }
到public class MyApplication extends MultiDexApplication { ... }
有关更多说明,请遵循官方文档:https://developer.android.com/studio/build/multidex.html#mdex-gradle
对我有用
答案 18 :(得分:0)
您可以检查MainActivity是用Kotlin而不是Java编写的吗?
我禁用Kotlin并用Kotlin编写Activity,这导致了此错误。
答案 19 :(得分:0)
您可以参考Mohaimanul Chowdhury的回答。如果您使用的是自定义应用程序类,请将其从扩展应用程序更改为MultiDexApplication
例如
class YourApplication : Application()
到
class YourApplication : MultiDexApplication()
它解决了我的问题
答案 20 :(得分:0)
对于遇到这种情况并使用Kotlin进行仪器测试的人:
请记住,方法名称中的空格仅适用于JVM测试,而不适用于 Android Instrumentation测试(如noted by Jake Wharton,他还说这可能是固定的在将来)
此刻,当我尝试运行如下测试时:
@Test
fun `spaces should work in names`() {
}
测试输出说:
未发现任何测试
日志说:
开始运行测试
测试运行失败:由于“进程崩溃”导致仪表运行失败。&#39;
空的测试套件。
当Logcat输出此异常时:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 5424
java.lang.RuntimeException: Unable to instantiate instrumentation
ComponentInfo{com.example.test/android.support.test.runner.AndroidJUnitRunner}:
java.lang.ClassNotFoundException: Didn't find class
"android.support.test.runner.AndroidJUnitRunner"
on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5730)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class
"android.support.test.runner.AndroidJUnitRunner" on path:
DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5728)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
正如您所看到的,错误在这里不是很有用,所以我希望人们现在能找到这个答案。解决方案很简单,使用有效的名称,如:
@Test
fun spaces_dontWorkInNames() {
}
答案 21 :(得分:0)
在您的Android演播室文件部分中清除您的项目并使缓存/重启无效,这对我有用。
答案 22 :(得分:0)
我似乎随机解决了这个问题。我只需将android:name更改为Android的MultiDex,运行它,然后将其更改回我自己的应用程序。