我有1个应用程序,但我想制作2个apks(2个Android ID)并分发给手机和平板电脑。
为此,(以及其他方面)我正在使用Android Studio的flavors
“功能”。
同时我需要使用this来设置每个apk的屏幕大小。根据{{1}}方法,需要在两个不同的文件夹中创建相同的项目两次(这是一种非常简单的方式,我知道),但是这个案例,我应该只复制{{1在两个地方都设置flavor
标签内的正确内容,或者如何处理这个问题?
我猜它会起作用,但我想知道最佳做法是什么。如果有人知道或曾经尝试过,请告诉我。
答案 0 :(得分:2)
我可以看到你自己找到了一个解决方案,但它似乎是一个非常糟糕的解决方案,可以追溯到2013年3月,所以让我介绍一下当前的标准方法。此方法使用Google团队实施的清单合并。
来源 - >主要 - >的AndroidManifest.xml 强>
不要做任何特别的事情,不要添加任何与屏幕相关的东西。
来源 - >电话 - >的AndroidManifest.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="your.package.name"
xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="false"
android:xlargeScreens="false"/>
</manifest>
然后来源 - &gt;平板电脑 - &gt;的AndroidManifest.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="your.package.name"
xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens
android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="true"
android:xlargeScreens="true"/>
</manifest>
以上是完整的文件,仅support-screens
,仅此而已。它们会合并到您的 main - &gt;构建系统的ANdroidManifest.xml 。
此外,如果您需要(您需要使用Google Play)为每个版本号添加不同的版本号,build.gradle
部分内的android {
内包含:
productFlavors {
phone {
versionCode 200001
}
tablet {
versionCode 300001
}
}
答案 1 :(得分:0)
没关系我自己弄清楚了。我在build.gradle
为应用
//============================
// Custom manifest merging:
//============================
android.applicationVariants.all { variant ->
variant.processManifest.doLast {
def propertyList = variant.productFlavors*.name
propertyList.add(variant.buildType.name)
def variantProperties = new Properties()
propertyList.reverse().each { property ->
def propFile = "src/${property}/manifest.properties"
try {
file(propFile).withReader { reader ->
def tmpProps = new Properties()
tmpProps.load(reader)
variantProperties.putAll(tmpProps)
}
} catch (e) {
println "[${variant.name}] Failed to load ${propFile}"
}
}
println "[${variant.name}] manifest properties: ${variantProperties}"
copy {
from("${buildDir}/intermediates/manifests/full") {
include "${variant.dirName}/AndroidManifest.xml"
}
into("${buildDir}/filtered_manifests")
filter { String line -> line.replaceAll("<compatible-screens(.*)/>", variantProperties.get("compatible-screens", "")) }
filter { String line -> line.replaceAll("<supports-screens(.*)/>", variantProperties.get("supports-screens", "")) }
}
}
variant.processResources.manifestFile = file("build/filtered_manifests/${variant.dirName}/AndroidManifest.xml")
}
然后我在这些路径下创建了两个文件:src/phone/manifest.properties
和src/tablet/manifest.properties
,其中包含下一个内容:
compatible-screens=<compatible-screens>\
<screen android:screenSize="small" android:screenDensity="ldpi" />\
<screen android:screenSize="small" android:screenDensity="mdpi" />\
<screen android:screenSize="small" android:screenDensity="hdpi" />\
<screen android:screenSize="small" android:screenDensity="xhdpi" />\
<screen android:screenSize="normal" android:screenDensity="ldpi" />\
<screen android:screenSize="normal" android:screenDensity="mdpi" />\
<screen android:screenSize="normal" android:screenDensity="hdpi" />\
<screen android:screenSize="normal" android:screenDensity="xhdpi" />\
</compatible-screens>
和
supports-screens=<supports-screens \
android:smallScreens="false" \
android:normalScreens="false" \
android:largeScreens="true" \
android:xlargeScreens="true" \
android:requiresSmallestWidthDp="600" />
在AndroidManifest.xml
未定src/main/
我放置了两个空标记<supports-screens />
和<compatible-screens />
那就是它!
所有内容都来自此链接:https://groups.google.com/forum/#!msg/adt-dev/8igxEyihIlc/gk4b8K6ZxNYJ,只需对构建路径文件夹进行少量更改。我在${buildDir}/intermediates/manifests/full
下。