android - Gradle 多个 Android 应用程序

标签 android gradle apk android-productflavors

我想在 gradle 的帮助下构建 2-3 个不同的 APK,其中应用程序名称会发生​​变化,并且会更改一些代码行。我不想更改整个目录或整个文件,只想更改代码 fragment ,这可能吗? 我试图理解Build variants and Product flavor 。但不知道它是如何工作的。还有这个tutorial .

谢谢

最佳答案

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

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

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

源代码 | |\主要 |\国家A |\国家B

因此该项目有 2 种风格 - countryAcountryB。这是相关的 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/

相关文章:

java - 如何修复 "Failed to notify build listener"错误?

android - 是否可以将 *.so 库移到扩展文件中?

unity3d - 如何减少 Unity 包的大小

android - 使用适用于 Android 的 google places api 网络服务搜索附近的特定地点

java - Firebase 身份验证 - 许多用户使用相同的凭据登录

java - 如何使用 drawElements 和索引数组使用 OpenGL ES 渲染四边形?

android - TWA 和外部链接

android - intellij + gradle + robolectric + Espresso

android - 为特定 flavor 和 buildType 定义 buildconfigfield

android - 使用 android map utils library 生成签名 apk 时出错