java - 从同一个应用程序(Flavors)安装两个调试 apk

标签 java android android-productflavors

所以我有这个应用程序 1,我想从应用程序 1 创建一个应用程序 2,它几乎是相同的应用程序,但布局有所不同。我设法使用 productFlavors 来做到这一点。结果需要是 Play 商店中的两个应用程序,都是免费的,并且用户可以在他的手机中同时拥有这两个应用程序。

但是我可以构建两个 apk 进行调试,但是当我安装一个时,手机不允许我安装另一个。两者都上传到商店后会发生这种情况吗?

这是我的gradle:

defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 48
    versionName "3.1.1"

    multiDexEnabled true
}

signingConfigs {
    String releaseFilename = "/.androidReleaseKeys/example_release.properties"

    Properties props = new Properties()
    props.load(new FileInputStream(file(releaseFilename)))


    release {
        storeFile file(props.getProperty('keystore'))
        storePassword props.getProperty('keystore.password')
        keyAlias props.getProperty('keyAlias')
        keyPassword props.getProperty('keyAlias.password')
    }

}

productFlavors{
    app1{
        applicationId "com.example.app"
        buildTypes {

            debug {
                buildConfigField "String", "GOOGLEMAPS_API_KEY", "\"${googleMapsAPIDev}\"";
                debuggable true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }


            release {
                signingConfig signingConfigs.release
                buildConfigField "String", "GOOGLEMAPS_API_KEY", "\"${googleMapsAPIRelease}\"";
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    app2{
        applicationId "com.example2.app2"
        versionCode 1
        versionName "1"
        multiDexEnabled true

        buildTypes {

            debug {
                buildConfigField "String", "GOOGLEMAPS_API_KEY", "\"${googleMapsAPIDev}\"";
                debuggable true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }


            release {
                signingConfig signingConfigs.release
                buildConfigField "String", "GOOGLEMAPS_API_KEY", "\"${googleMapsAPIRelease}\"";
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }

    }

最佳答案

使用 ${applicationId} 占位符在 list 中声明此权限:

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>

不要在 list 中硬编码包名称。

关于java - 从同一个应用程序(Flavors)安装两个调试 apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334111/

相关文章:

java - 如何在java中检查mysql错误

java - 如何用空格分割 $(MAKECMDGOALS)

java - 制作带有可选 UI 界面的 headless Eclipse 应用程序

java - NetBeans 8.0 Gradle 插件(用于 LibGDX)

android - 在方向更改时处理 Fragment 的万无一失的方法

android - Android Gradle Plugin 3.0.1 versionNameSuffix用Flavors尺寸覆盖

android - Gradle 从特定构建类型的构建中排除文件夹

安卓 native 代码调试

Android 工具栏显示/隐藏空格

android - 如何在一个项目中为少数应用创建 flavor