【发布时间】:2020-10-30 12:36:21
【问题描述】:
我将我的应用程序构建为“发布”版本(包括签名和所有内容)以将其发布到 PlayStore。我从 PlayStore 中的“发布前报告”中获得了很多崩溃报告,它们看起来都像这样:
Crash java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.domain/com.domain.MainActivity}: java.lang.ClassNotFoundException: Didn't find
class "com.domain.MainActivity" on path: DexPathList[[zip file "/data/app/com.domain-1/base.apk", zip
file "/data/app/com.domain-1/split_config.arm64_v8a.apk", zip file "/data/app/com.domain-
1/split_config.xxhdpi.apk"],nativeLibraryDirectories=[/data/app/com.domain-1/lib/arm64,
/data/app/com.domain-1/base.apk!/lib/arm64-v8a, /data/app/com.domain-
1/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.domain-
1/split_config.xxhdpi.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
但是,构建过程按预期工作,没有任何失败。此外,调试构建和 split-by-abi 构建工作正常,没有任何问题或崩溃。
这是 Android 应用的文件夹结构(最初我使用了另一个文件夹结构“app/main/kotlin/com/domain/MainActivity.kt”但结果相同):
这是 androids 文件夹级别的 gradle.build:
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') {
reader -> localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
logger.info("DEBUG - FLUTTER ROOT: " + flutterRoot)
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
/*
task clean(type: Delete) {
delete rootProject.buildDir
}
*/
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 28
packagingOptions {
exclude ("META-INF/shared_core_release.kotlin_module")
}
defaultConfig {
applicationId "com.domain"
minSdkVersion 25
targetSdkVersion 28
compileSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
minifyEnabled true
signingConfig signingConfigs.release
sourceSets {
main {
manifest.srcFile 'app/src/main/AndroidManifest.xml'
res.srcDirs = ['app/src/main/res']
}
}
}
}
}
flutter {
source '..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
这是引用的AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain">
<application
android:name="io.flutter.app.FlutterApplication"
android:label="App"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<!-- omitted -->
</manifest>
这是app/src/main/kotlin/com.domain/MainActivity.kt的内容:
package com.domain
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
这是flutter doctor的摘录:
[√] Flutter (Channel stable, v1.17.5, on Microsoft Windows [Version 10.0.18362.900], locale de-DE)
• Flutter version 1.17.5 at C:\flutter
• Framework revision 8af6b2f038 (9 days ago), 2020-06-30 12:53:55 -0700
• Engine revision ee76268252
• Dart version 2.8.4
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at C:\Users\xxx\AppData\Local\Android\Sdk
• Platform android-29, build-tools 29.0.3
• ANDROID_HOME = C:\Users\xxx\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
X Android license status unknown.
Try re-installing or updating your Android SDK Manager.
See https://developer.android.com/studio/#downloads or visit visit
https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions.
[√] Android Studio (version 4.0)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 46.0.2
• Dart plugin version 193.7361
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
[√] IntelliJ IDEA Ultimate Edition (version 2019.3)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.4
• Flutter plugin version 44.0.3
• Dart plugin version 193.6911.31
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 10 (API 29) (emulator)
非常欢迎任何帮助来解决这个问题。
编辑#1:
关闭修改后,com.domain.MainActivity似乎不在dex中了。
但我不明白为什么不包括在内。
【问题讨论】:
-
您在开发应用时没有遇到任何与Dex相关的问题吗?
-
部署到 PlayStore 本身没有问题。我已经查看了 AAB 文件(和 .dex 文件),但它被混淆了。我已经尝试使用
--no-shrink和--no-obfuscate进行构建,但由于某种原因这不起作用。 -
那么它可能与颤振本身有关。也许在flutter github中问会更好
-
您是否尝试将
minifiedEnabled设置为false来为您的发布版本启用ProGuard?我猜你的MainActivity类被 Proguard 混淆了。清单中的条目可能会保留原来的类名 -> MainActivity 找不到。要检查这一点,您可以使用 Android Studio 中内置的分析 APK 功能。 -
@muetzenflo 我已经更新了我的帖子。似乎
MainActivity不存在于包中。知道为什么它不存在吗?
标签: android flutter google-play