当前位置: 首页 > 知识库问答 >
问题:

在AppGallery和Google Play上使用flavors发布应用程序

蔡鸿骞
2023-03-14
productFlavors {
    gms {
        dimension "services"
        buildConfigField "String", "SERVICE_USED", '"g"'

    }
    hms {
        dimension "services"
        buildConfigField "String", "SERVICE_USED", '"h"'
    }
}
gmsImplementation 'com.google.firebase:firebase-analytics:17.2.0'
gmsImplementation 'com.google.firebase:firebase-messaging:20.0.0'
gmsImplementation 'com.google.firebase:firebase-ads:18.2.0'
gmsImplementation 'com.google.firebase:firebase-crashlytics:17.2.2'
hmsImplementation 'com.huawei.hms:ads-installreferrer:3.4.34.301'
hmsImplementation 'com.huawei.hms:ads-identifier:3.4.34.301'
hmsImplementation 'com.huawei.hms:hianalytics:5.0.5.301'
hmsImplementation 'com.huawei.hms:iap:5.0.4.301'
hmsImplementation 'com.huawei.hms:push:5.0.4.302'

如果我错了,请纠正我,我需要使用一个抽象层的公共服务,对吗?例如,如果我需要使用IAP,我需要一个包装器类来决定使用GMS或HMS,这取决于设备类型。如果我这样做,我需要这样的东西:

>

  • 需要一个接口,该接口需要在HmsIAP和GmsIAP类上实现,用于requestProduct方法、PurchaseMethod等常见方法。等

    创建这些类并管理要使用的类的父类。这将称为“Appiap”类。逻辑层将使用该类进行不依赖于平台的IAP操作。

    我该如何解决这个问题?

  • 共有1个答案

    姬裕
    2023-03-14

    我认为最具可维护性的解决方案是对不同口味的不同源集使用依赖注入。您可以将GMS相关代码放在src/GMS/java中,将HMS相关代码放在src/HMS/java中。将只编译选定的产品风味源集。使用Hilt的一个非常基本的示例如下所示:

    在主源集中,您将拥有

    src/main/java/your/package/appmobileServices.kt

    interface AppMobileServices {
        val isAvailable: Boolean
    }
    
    @Module
    @InstallIn(SingletonComponent::class)
    class GmsModule {
        @Provides
        fun googleMobileServices(@ApplicationContext context: Context): AppMobileServices {
            return GmsServices(context)
        }
    }
    
    @Singleton
    class GmsServices(@ApplicationContext private val context: Context) : AppMobileServices {
        override val isAvailable: Boolean
            get() = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS
    }
    

    然后是HMS源集

    src/hms/java/your/package/hmsmodule.kt:

    @Module
    @InstallIn(SingletonComponent::class)
    class HmsModule {
        @Provides
        fun huaweiMobileServices(@ApplicationContext context: Context): AppMobileServices {
            return HmsServices(context)
        }
    }
    

    src/hms/java/your/package/hmsservices.kt:

    @Singleton
    class HmsServices(@ApplicationContext private val context: Context) : AppMobileServices {
        override val isAvailable: Boolean
            get() = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context) == ConnectionResult.SUCCESS
    }
    
    @Inject
    lateinit var appMobileServices: AppMobileServices
    
     类似资料:
    • 所有电子邮件信息如下: 亲爱的开发者, 谢谢您联系我们!! “说明”:我们发现您的APP中没有相关隐私声明。在您选择出版的中国大陆和其他国家或地区的出版一直受到影响,直到上述所有要求都得到满足。欲了解更多信息,请参阅“AppGallery审查指南”规则7.1:https://developer.huawei.com/consumer/en/doc/distribution/app/50104 “建

    • 我正在尝试使用expo客户端在iphone上发布我的应用程序。当我将链接从我的mackbook发送到iphone时。我收到一个错误,说“加载请求的应用程序时出现问题。看起来您可能正在使用LAN URL。确保您的设备与服务器位于同一网络上或尝试使用隧道。”我在同一个网络上。我检查了两次网络。这些是我遵循的步骤1)我通过在终端窗口中给出“npm start”命令来启动应用程序。2)我选择选项“s”,然

    • 谷歌的Play Store在应用程序描述中支持相当多的标记。对于华为的AppGallery来说,这是怎么回事?我在任何地方都找不到这方面的信息。 我确实尝试过使用和,但它们都显示为纯文本(标签可见)--在AppGallery应用程序和其网站上都是如此。

    • 我有一个React应用程序,位于http://localhost:3000/,而Laravel API位于http://localhost/blog/public/API/ 我得到以下错误 CORS策略阻止了在“http://localhost/blog/public/api/auth/signin”从origin“http://localhost:3000”获取的访问:请求的资源上没有“acce

    • 我正在尝试将我的应用程序上载到华为AppGallery Connect,该应用程序发布为Multi-APK以减小其大小(不使用应用程序包以避免被商店签名) 这是我最后的多个apk文件: 我找到了华为AppGallery解释Multi-APK的官方视频,但我找不到上传多个APK的任何选项,因为上传表单只接受1个APK,如下图所示: 你能解释一下这是否可能,以及如何做吗?

    • 我正在构建一个具有多种不同风格的应用程序。我的问题是,如果我为基于flavor的活动使用不同的代码,我是否需要在所有flavor directores中包含该代码的副本,或者如果我只将代码副本保留在app/src/main/java目录中,如果我不将其包含在flavor目录中,其他所有flavor是否会使用main/java中的文件。 我有 app/src/main/java/com/mycomp