2

我想在 gradle 的帮助下构建 2-3 个不同的 APK,其中应用名称发生变化和一些代码行。我不想更改整个目录或整个文件,只更改代码片段,这可能吗?我试图了解Build variant 和 Product flavor。但无法弄清楚它是如何工作的。还有这个教程

谢谢

4

1 回答 1

3

这只是一个建议。我们面临同样的事情,这就是我们如何让它发挥作用的方式。在我看来,它非常干净,是的,它确实使用了产品口味。

因此,假设您有一个类地址,其格式因国家/地区而异,但当然有很多通用代码。为简单起见,假设您只有street_numberand street_name,但在国家/地区A,地址应格式化为street_number street_name,在国家/地区,地址应B格式化为street_name, street_number

我们这样做的方式是有一个像这样的项目结构:

src | |\ main |\ countryA |\ countryB

所以该项目有 2 种口味 -countryAcountryB. 这是相关build.gradle部分:

productFlavors {
    countryA {
        applicationId "com.countryA"
    }
    countryB {
        applicationId "com.countryB"
    }
}

现在是代码部分。我们Address放在里面的一个普通类也是如此,它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();
  }
}

现在在与 in 相同的包中,countryA但在countryB's 文件夹中,您将拥有相同的类,但具有不同的实现:

package com.myapp.addresses;

public class Address extends AbstractAddress {
  public String getFormattedAddress() {
     return getStreetName() + ", " + getStreetNumber();
  }
}

Gradle 将负责为您生成任务。类似于 and 的东西assembleCountryAassembleCountryB这也取决于您拥有的构建变体)。当然,您也可以仅使用一项任务生成所有 apk。

于 2014-12-12T10:21:25.730 回答