这是在使用android 4.4从studio 2.x迁移到studio 3.0之后发生的。 Android 6运行正常。 我搜索了这个问题,但没有找到清晰的回应。只是一个特定的应用程序有此行为。我还有其他应用程序可以。
更新过程已经打破了什么但是什么?为什么它只影响android 4.x?
我尝试了干净同步,重建,重启工作室,重新启动平板电脑......
这是我的傻瓜:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.narb.test"
minSdkVersion 18
targetSdkVersion 24
versionName '3.2'
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
versionNameSuffix '-9-nov-2017'
multiDexEnabled true
versionCode 53
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile files('libs/commons-net-3.5.jar')
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.google.android.gms:play-services-maps:10.0.1'
testCompile 'junit:junit:4.12'
compile 'org.jsoup:jsoup:1.10.3'
}
和logcat:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.narb.test/com.narb.test.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.narb.test.MainActivity" on path: DexPathList[[zip file "/data/app/com.narb.test-29.apk"],nativeLibraryDirectories=[/data/app-lib/com.narb.test-29, /vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
at android.app.ActivityThread.access$900(ActivityThread.java:174)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.narb.test.MainActivity" on path: DexPathList[[zip file "/data/app/com.narb.test-29.apk"],nativeLibraryDirectories=[/data/app-lib/com.narb.test-29, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
at android.app.ActivityThread.access$900(ActivityThread.java:174)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
和清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.narb.test">
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:allowBackup="true"
android:largeHeap="true"
android:configChanges="keyboardHidden|screenSize"
android:icon="@drawable/networksafe"
android:label="test"
android:logo="@drawable/networksafe"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".vpn.services"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.Net.Services"/>
</intent-filter>
</service>
<activity
android:name=".Activities.Settings"
android:windowSoftInputMode="stateHidden" />
<activity android:name=".Activities.About" />
<activity android:name=".Activities.History" />
<service
android:name=".Socket"
android:exported="false" />
<service
android:name=".ServiceMonitoring"
android:exported="false" />
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity android:name=".Activities.RateMe"></activity>
</application>
</manifest>
答案 0 :(得分:1)
运行Gradle clean命令,然后执行File - &gt;无效的缓存和放大器重新开始。对我来说它解决了问题
答案 1 :(得分:0)
崩溃是由于build.gradle中的这一行:
multiDexEnabled true
一旦我删除了这一行,崩溃就消失了。
我不知道为什么2.3最初放了这条线,但可以肯定的是,工作室3.0使sdk 18及以下版本崩溃。
答案 2 :(得分:0)
在您的情况下,如果您不需要multidex,那么禁用它是正确的解决方案。如果将来需要它,请按照下面链接的说明使用MultiDexApplication。
对于上下文,有两种类型的multidex,legacy和native。对于API 21及更高版本的设备,该平台只是直接从APK中读取多个dex文件。
对于API 21之前的设备,有一个multidex支持库,可以修补类加载器,将其作为Application类的一部分添加到额外的dex文件中。在此之前可以加载的任何内容都需要在主dex中,并且您需要使用MultiDexApplication(或子类,或从您的Application onAtttachBaseContext调用MultiDex.install(this))
Android studio 3.0切换到为调试版本创建最小的主要dex,也就是说,只保留主要dex中最小的文件集。这是为了构建性能并使这些崩溃可以重现,而不是如果一个类被包含在主dex中那么运气。
在您的情况下,您的应用程序适合2.3中的一个dex,但在3.0中具有新的最小主要dex行为,该类不在主dex中。但是,由于您没有使用MultiDexApplication,因此永远不会修补类加载器,因此无法加载辅助dex文件中的类。
有关详细信息,请参阅https://developer.android.com/studio/build/multidex.html#mdex-gradle