gpt4 book ai didi

android - 将代码转换为 (G+H) 后应用程序崩溃。 GMS 和 HMS 支持

转载 作者:行者123 更新时间:2023-12-04 23:49:58 25 4
gpt4 key购买 nike

我已经在HMS工具包的帮助下转换了代码以同时支持GMS和HMS。但转换后,它崩溃并抛出异常。

Process: com.example.android.wander.huawei, PID: 10649java.lang.VerifyError: Verifier rejected class com.example.android.wander.huawei.MapsActivity: void com.example.android.wander.huawei.MapsActivity.onCreate(android.os.Bundle) failed to verify: void com.example.android.wander.huawei.MapsActivity.onCreate(android.os.Bundle): [0x11] 'this' argument 'Reference: androidx.fragment.app.FragmentManager' not instance of 'Reference: androidx.fragment.app.FragmentManager' (declaration of 'com.example.android.wander.huawei.MapsActivity' appears in /data/app/~~M8blTtc1ehsAE-ySiPYUtQ==/com.example.android.wander.huawei-0H3LEYclNRMAw9Pq-MrWww==/base.apk)at java.lang.Class.newInstance(Native Method)at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)at android.app.Instrumentation.newActivity(Instrumentation.java:1253)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7656)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

在我从应用程序类中删除该行之后。

XLoader.init(this);

这个异常消失了

SupportMapFragment.newInstance()

抛出运行时异常“ stub ”

最佳答案

请引用Map Kit Manual Conversion Guide并逐步按照指南进行操作。 Add HMS API转换完成后,可以通过配置ClassLoader(简单,只需要导入资源和修改配置文件)或者手动写代码(复杂,手动转换工作量大)来实现Google APIs和HMS的兼容< strong> Activity 显示在 fragment 中。

目前ClassLoader方案不支持项目中的插件化或hotfix框架,不支持ClassLoader自定义。如果您的应用有此类需求,请手动编写代码。


在使用Add HMS API策略时,提供了XClassLoader方案,解决部分API组合方式无法转换的问题。该方案用于减少手动修改资源的工作量。在这种模式下,该工具会在 xmsadapter 模块中生成一个内置的 xmsaux 模块。 xmsaux 模块包含 xg、xh 和 xapi 模块以及 XClassLoader 代码。

  1. 修改项目相关配置文件。

一个。如果选择了Generate code for creating app dependent only on GMS SDK并启用了单一的xmsg flavor variant,修改项目级设置中的引用配置。 gradle 文件如下:

include ':xmsadapter:xmsaux', 'xmsadapter:xmsaux:xg', 'xmsadapter:xmsaux:xapi'

如果选择了Generate code for creating app dependent only on HMS SDK并且启用了单一的xmsh flavor variant,修改项目级的引用配置settings.gradle 文件如下:

include ':xmsadapter:xmsaux', 'xmsadapter:xmsaux:xh', 'xmsadapter:xmsaux:xapi'

如果选择了上述任何一种模式,并且启用了单一的xmsgh flavor variant,请修改项目级settings.gradle文件中的引用配置,如下所示:

include ':xmsadapter:xmsaux', 'xmsadapter:xmsaux:xg', 'xmsadapter:xmsaux:xh', 'xmsadapter:xmsaux:xapi'

在项目级 build.gradle 文件的dependencies{} 部分,将 Gradle 插件版本设置为 3.5.0 或更高版本。

buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}

在项目级gradle/wrapper/gradle-wrapper.properties文件中,将Gradle版本设置为5.4.1或更高版本。

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

对于多模块项目,在项目级目录的gradle.properties文件中添加如下配置:

android.enableD8=false
android.enableD8.desugaring=false
  1. 在程序入口调用init方法初始化程序。一种。在app中实现一个继承android.app.Application的程序入口类,重写类中的onCreate方法。
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
GlobalEnvSetting.init(this,null);
XLoader.init(this);
}
}

修改应用级src/main/AndroidManifest.xml文件中的application name属性,在第一个条目中添加新的application子类。

<application
android:name=".MyApp"
</application>
  1. 处理异常。

  1. 修改布局资源文件。 Add HMS API场景下,Google API和HMS需要使用独立的layout资源文件。资源文件中的 class 路径不同。每个布局资源文件必须一式两份,一个用于 HMS,另一个用于 Google API。这些文件与兼容重定向的代码一起使用。

  2. 修改代码。如果使用了Fragment,可以在activityonCreate()方法中使用if-else来制作一个与 HMS 和 Google API 兼容的代码副本。

关于android - 将代码转换为 (G+H) 后应用程序崩溃。 GMS 和 HMS 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65488950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com