[英]Flutter app crashes on launch on Android
我一直在 iOS 上测试我的第一个 Flutter 应用程序并且运行良好。 现在我第一次在 Android 模拟器中运行它,我得到了这个错误。
07-18 11:42:10.757 4264-4264/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.akamojo.liga, PID: 4264 java.lang.RuntimeException: Unable to instantiate application com.akamojo.liga.liga: java.lang.ClassNotFoundException: Didn't find class "com.akamojo.liga.liga" on path: DexPathList[[zip file "/data/app/com.akamojo.liga-1/base.apk"],nativeLibraryDirectories=[/data/app/com.akamojo.liga-1/lib/x86, /data/app/com.akamojo.liga-1/base.apk!/lib/x86, /vendor/lib, /system/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:578) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
对我来说它看起来很可疑,它说它正在寻找 class“com.akamojo.liga.liga”。 这是正确的吗? 我的 applicationId 是“com.akamojo.liga”。 Flutter 框架是否创建了一个名为“liga”的起始 class?
这是 build.gradle。
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')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
compileSdkVersion 27
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
applicationId "com.akamojo.liga"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
这是 AndroidManifest.xml 文件。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.akamojo.liga">
<!-- The INTERNET permission is required for development. Specifically,
flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="liga"
android:label="liga"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
在mainActivity.kt
文件中添加以下代码
override fun onCreate(savedInstanceState: Bundle?) {
FlutterMain.startInitialization(this); //Added line
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
}
我的应用程序正在运行,但在 Dart 插件更新后,我开始收到此错误。
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo com.package.name.MainActivity
就我而言,这是因为 Dart 和 Flutter 插件不兼容。 我运行了 flutter upgrade 命令,应用程序又开始正常工作了。
因此,请确保同时更新 Dart 和 Flutter 插件。
首先,File>Project Structure> 选择Project SDK 最新API 平台并转到模块(依赖项)并选择最新API 平台,应用,确定。 二、在build-gradle => compileSdkVersion 28、targetSdkVersion 28改成30 三、在build-gradle => GradleException改FileNotFoundException
就是这样。
我有同样的经历然后我将项目的 package 名称更改为 android> app> src> main> MainActivity.kt 或 MainActivity.java 并将您的 package com.example.name 替换为另一个示例。 您在 AndroidManiFest 和应用级构建文件中编写的名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.