首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有谷歌服务的华为p40 lite上编译我的应用程序flutter应用程序时出错

在没有谷歌服务的华为p40 lite上编译我的应用程序flutter应用程序时出错
EN

Stack Overflow用户
提问于 2020-11-23 22:45:40
回答 1查看 558关注 0票数 2

我在编译flutter应用程序时遇到了这个错误,我正在使用华为p40 lite (没有谷歌服务)来重现这个错误。在使用谷歌服务的设备上,它可以完美地工作。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 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插件为例,如果您需要集成它:

  1. Install HMS Core (APK)

要使用华为定位套件,您需要在设备上下载并安装HMS Core (APK) 4.0.1.300或更高版本。

  1. 安装Android SDK
  2. 在AppGallery Connect

中配置应用程序信息

包括创建app、生成签名证书指纹、生成签名文件、从签名文件中获取SHA-256指纹、配置签名证书指纹、启用所需服务。

  1. Configure Your Flutter Project

a.登录AppGallery连接,选择My projects,然后单击所需的应用程序名称。

b.进入项目设置>常规信息。在应用程序信息字段中,单击agconnect-services.json下载配置文件。

c.执行以下命令,确保未上报错误。

代码语言:javascript
复制
1.  [project_path]> flutter doctor

d.将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连接插件

代码语言:javascript
复制
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存储库地址

代码语言:javascript
复制
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

  • :'com.huawei.agconnect’行。

代码语言:javascript
复制
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.huawei.agconnect'

  • > defaultConfig.

中,

  • 将设置为19或更高

代码语言:javascript
复制
defaultConfig {
    applicationId "<package_name>"
    minSdkVersion 19
    /*
     * <Other configurations>
     */
}

  • 根据签名文件information.

android中配置签名

代码语言:javascript
复制
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        
       }    
    }
}

  1. 集成插件

a.下载Location Kit Flutter插件并解压缩。

b.打开Flutter项目中的pubspec.yaml文件,并将插件依赖项添加到dependencies部分。

代码语言:javascript
复制
dependencies:    
    huawei_location:
        path: {library path}

c.执行以下命令更新包信息:

代码语言:javascript
复制
[project_path]> flutter pub get

d.运行以下命令或单击工具栏上的Run图标启动应用程序:

代码语言:javascript
复制
[project_path]> flutter run

  1. Configuration混淆脚本

在构建APK之前,请配置混淆配置文件,以防止HMS Core SDK被混淆。

混淆配置文件是Android Studio中的proguard-rules.pro

a.打开app目录下的混淆配置文件proguard-rules.pro

b.添加配置,将HMS Core SDK排除在混淆之外。

代码语言:javascript
复制
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-repackageclasses
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64970650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档