我在编译flutter应用程序时遇到了这个错误,我正在使用华为p40 lite (没有谷歌服务)来重现这个错误。在使用谷歌服务的设备上,它可以完美地工作。
E/AndroidRuntime(29459): FATAL EXCEPTION: main
E/AndroidRuntime(29459): Process: com.google.android.gms.persistent, PID: 29459
E/AndroidRuntime(29459): java.lang.RuntimeException: Unable to create service com.google.android.location.internal.GoogleLocationManagerService: java.lang.SecurityException: Failed to find provider com.google.settings for
user 0; expected to find a valid ContentProvider for this authority
E/AndroidRuntime(29459): at android.app.ActivityThread.handleCreateService(ActivityThread.java:4650)
E/AndroidRuntime(29459): at android.app.ActivityThread.access$2800(ActivityThread.java:308)
E/AndroidRuntime(29459): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2330)
E/AndroidRuntime(29459): at android.os.Handler.dispatchMessage(Handler.java:110)
E/AndroidRuntime(29459): at android.os.Looper.loop(Looper.java:219)
E/AndroidRuntime(29459): at android.app.ActivityThread.main(ActivityThread.java:8349)
E/AndroidRuntime(29459): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(29459): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
E/AndroidRuntime(29459): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
E/AndroidRuntime(29459): Caused by: java.lang.SecurityException: Failed to find provider com.google.settings for user 0; expected to find a valid ContentProvider for this authority
E/AndroidRuntime(29459): at android.os.Parcel.createException(Parcel.java:2071)
E/AndroidRuntime(29459): at android.os.Parcel.readException(Parcel.java:2039)
E/AndroidRuntime(29459): at android.os.Parcel.readException(Parcel.java:1987)
E/AndroidRuntime(29459): at android.content.IContentService$Stub$Proxy.registerContentObserver(IContentService.java:1234)
E/AndroidRuntime(29459): at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2301)
E/AndroidRuntime(29459): at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2289)
E/AndroidRuntime(29459): at azlm.<init>(:com.google.android.gms@19420000@19.4.20 (000300-271418971):17)
E/AndroidRuntime(29459): at aznh.<init>(:com.google.android.gms@19420000@19.4.20 (000300-271418971):1)
E/AndroidRuntime(29459): at com.google.android.location.internal.GoogleLocationManagerChimeraService.onCreate(:com.google.android.gms@19420000@19.4.20 (000300-271418971):6)
E/AndroidRuntime(29459): at ebp.onCreate(:com.google.android.gms@19420000@19.4.20 (000300-271418971):1)
E/AndroidRuntime(29459): at msb.onCreate(:com.google.android.gms@19420000@19.4.20 (000300-271418971):4)
E/AndroidRuntime(29459): at android.app.ActivityThread.handleCreateService(ActivityThread.java:4636)
E/AndroidRuntime(29459): ... 8 more发布于 2020-11-24 11:52:42
您的应用程序集成了GMS。由于新的华为手机被禁止使用GMS,你的应用程序将无法在新的华为手机上运行。如果你想让你的应用在这些手机上运行,集成Huawei Mobile Services (HMS)。
华为为您提供Flutter插件,方便您集成HMS Core套件。目前,Flutter插件可用于Account Kit、Ads Kit、Analytics Kit、AR Kit、In-App Purchase、Location Kit、Map Kit、Push Kit、Scan Kit和Site Kit。你可以在GitHub上下载它们。
以Flutter Location插件为例,如果您需要集成它:
要使用华为定位套件,您需要在设备上下载并安装HMS Core (APK) 4.0.1.300或更高版本。
中配置应用程序信息
包括创建app、生成签名证书指纹、生成签名文件、从签名文件中获取SHA-256指纹、配置签名证书指纹、启用所需服务。
a.登录AppGallery连接,选择My projects,然后单击所需的应用程序名称。
b.进入项目设置>常规信息。在应用程序信息字段中,单击agconnect-services.json下载配置文件。
c.执行以下命令,确保未上报错误。
1. [project_path]> flutter doctord.将agconnect-services.json文件复制到Flutter项目的android/app目录中。
e.将生成的签名文件复制到Flutter项目的android/app目录下。
f.验证agconnect-services.json文件和签名文件是否已成功添加到Flutter项目的android/app目录中。
g.打开Flutter项目的android目录中的build.gradle文件。
请转到buildscript,并为
配置Maven库地址和AppGallery连接插件
buildscript {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
dependencies {
/*
* <Other dependencies>
*/
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}转到allprojects,并为 Core
配置Maven存储库地址
allprojects {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
}h.打开Flutter项目的android/app目录中的build.gradle文件。
在apply from:"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle‘行之后添加apply
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.huawei.agconnect'在
中,
defaultConfig {
applicationId "<package_name>"
minSdkVersion 19
/*
* <Other configurations>
*/
}在android中配置签名
android {
/*
* <Other configurations>
*/
signingConfigs {
release {
storeFile file('<keystore_file>')
storePassword '<keystore_password>'
keyAlias '<key_alias>'
keyPassword '<key_password>'
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
}
}
}a.下载Location Kit Flutter插件并解压缩。
b.打开Flutter项目中的pubspec.yaml文件,并将插件依赖项添加到dependencies部分。
dependencies:
huawei_location:
path: {library path}c.执行以下命令更新包信息:
[project_path]> flutter pub getd.运行以下命令或单击工具栏上的Run图标启动应用程序:
[project_path]> flutter run的
在构建APK之前,请配置混淆配置文件,以防止HMS Core SDK被混淆。
混淆配置文件是Android Studio中的proguard-rules.pro。
a.打开app目录下的混淆配置文件proguard-rules.pro。
b.添加配置,将HMS Core SDK排除在混淆之外。
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-repackageclasseshttps://stackoverflow.com/questions/64970650
复制相似问题