【问题标题】:Install two debug apk from same application (Flavors)从同一个应用程序安装两个调试 apk (Flavors)
【发布时间】:2017-06-02 17:05:23
【问题描述】:

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

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

这是我的毕业典礼:

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'
            }
        }

    }

【问题讨论】:

  • 我现在应该在控制台中创建一个新应用程序,并为她创建一个新的密钥库吗? (我在某处读到,您可以将同一个密钥库用于多个应用程序)
  • 安装第二个应用时adb返回什么错误?
  • 安装失败并显示消息 INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example1.app.permission.C2D_MESSAGE pkg=com.example2.app(不在 adb 中只是弹出窗口)我想我需要创建第二个清单和合并一些变化

标签: java android android-productflavors


【解决方案1】:

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

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

不要在清单中硬编码包名。

【讨论】:

  • 我正在尝试,但是清单中的 package 字段呢,似乎我使用 ${applicationId} adb 说它无法读取 packageName
  • 如何在清单中设置包?发布您的&lt;manifest&gt; 标签。
  • schemas.android.com/apk/res/android" package="com.example1.com"> 我就这样离开了,但改变了清单其余部分中的硬编码,它起作用了,我有现在安装了两个应用程序。谢谢,我接受了你的回答
猜你喜欢
  • 2012-05-27
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多