我想在 gradle 的帮助下构建 2-3 个不同的 APK,其中应用程序名称会发生变化,并且会更改一些代码行。我不想更改整个目录或整个文件,只想更改代码 fragment ,这可能吗? 我试图理解Build variants and Product flavor 。但不知道它是如何工作的。还有这个tutorial .
谢谢
最佳答案
这只是一个建议。我们面临着同样的事情,这就是我们如何让它发挥作用的。在我看来,它非常干净,而且确实使用了产品口味。
假设您有一个类 Address,其格式因国家/地区而异,但当然有很多通用代码。为简单起见,假设您只有 street_number
和 street_name
,但在国家/地区 A
,地址格式应为 street_number street_name
,在国家 B
上,其格式应为 street_name, street_number
。
我们这样做的方式是有一个像这样的项目结构:
源代码
|
|\主要
|\国家A
|\国家B
因此该项目有 2 种风格 - countryA
和 countryB
。这是相关的 build.gradle
部分:
productFlavors {
countryA {
applicationId "com.countryA"
}
countryB {
applicationId "com.countryB"
}
}
现在是代码部分。所以 Address
是一个公共(public)类,我们将其放置在 main
中,看起来或多或少像:
public abstract class AbstractAddress {
private String streetNumber;
private String streetName;
// ... your favorite getters and setters plus some common methods
public abstract String getFormattedAddress();
}
这里的关键是类是抽象的,子类需要实现getFormattedAddress()
。现在,在 countryA
文件夹中,您将拥有:
package com.myapp.addresses;
public class Address extends AbstractAddress {
public String getFormattedAddress() {
return getStreetNumber() + " " + getStreetName();
}
}
现在,在与 countryA
相同的包中,但在 countryB
的文件夹中,您将拥有相同的类,但具有不同的实现:
package com.myapp.addresses;
public class Address extends AbstractAddress {
public String getFormattedAddress() {
return getStreetName() + ", " + getStreetNumber();
}
}
Gradle 将负责为您生成任务。类似于 assembleCountryA 和 assembleCountryB 的内容(这也取决于您拥有的构建变体)。当然,您也可以仅使用一个任务生成所有 apk。
关于android - Gradle 多个 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441179/