从同一个应用程序(Flavors)安装两个调试 apk
Install two debug apk from same application (Flavors)
所以我有这个应用程序 1,我想从应用程序 1 创建一个应用程序 2,它几乎是相同的应用程序,但布局有所不同。我设法使用 productFlavors 来做到这一点。结果需要是 Play 商店中的两个应用程序,都是免费的,并且用户可以在他的 phone 中同时拥有这两个应用程序。
但是我可以构建两个 apk 进行调试,但是当我安装一个时,phone 不允许我安装另一个。两者都上传到商店后会发生这种情况吗?
这是我的 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}
占位符声明此权限:
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
不要在清单中硬编码包名称。
所以我有这个应用程序 1,我想从应用程序 1 创建一个应用程序 2,它几乎是相同的应用程序,但布局有所不同。我设法使用 productFlavors 来做到这一点。结果需要是 Play 商店中的两个应用程序,都是免费的,并且用户可以在他的 phone 中同时拥有这两个应用程序。
但是我可以构建两个 apk 进行调试,但是当我安装一个时,phone 不允许我安装另一个。两者都上传到商店后会发生这种情况吗?
这是我的 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}
占位符声明此权限:
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
不要在清单中硬编码包名称。