Android - 单个代码库中的多个.apk文件

时间:2011-11-15 12:42:43

标签: android apk

我在android中开发了3个应用程序,主要功能相同但UI看起来不同。图像和屏幕的背景颜色不同。

不,我想创建一个代码库,我可以从中为3个应用程序生成多个.apk文件。

我尝试为3个应用创建3个不同的src文件夹包。但我不知道如何为这些应用程序设置res文件夹。

需要有关创建单个代码库的指针,我们可以从中生成多个.apk文件,其中仅包含相应的src和res文件夹。

5 个答案:

答案 0 :(得分:9)

  • 使用包含所有常用代码的Android Library Project
  • 创建引用库项目的单独Android项目(您需要将Manifest复制到其中每个项目中,并确保使用完整的Java包名称声明所有组件)。
  • 将特定于每个应用程序的任何资源(drawables,colors等)放入各个项目资源文件夹中,并且它们将在构建时覆盖库项目中类似命名的资源。

答案 1 :(得分:1)

我认为最好的选择是使用ant,您需要为每个构建添加一个ant目标并更改资源文件夹。 如果使用生成的build.xml,res文件夹就像这样定义 <property name="resource.absolute.dir" location="res" />所以你要覆盖那个

答案 2 :(得分:1)

您不能将所有公共代码放入库项目中,然后只从每个包含相关资源的3个独特项目中引用该项目。

更新:使用Gradle构建系统时,此答案现已过时。

答案 3 :(得分:0)

为什么不使用单个应用程序,它根据用户设置的SharedPreferences值或安装时的上下文执行三种不同的操作。如果你真的想要分开,你可以有三个不同的活动,你可以决定从一个重定向到不同的活动的静态主活动中启动哪个活动。

另一种方法是拥有一个独特的活动,在onCreate时间从3种不同的布局动态膨胀自己。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (...custom check for layout... equals(layout1)) {
        setContentView(R.layout.main_layout1);
    } else if (... equals(layout2)) {
        setContentView(R.layout.main_layout2);
    } else if (... equals(layout3)) {
        setContentView(R.layout.main_layout3);
    } else {
        throw new IllegalStateException("Unknown layout!");
    }
    ... your onCreate stuff....
}

它将使代码维护更容易(只需修改一个代码源,只需维护一个版本列表和变更集)

点击此处: How to use SharedPreferences in Android to store, fetch and edit values

答案 4 :(得分:0)

我建议使用Gradle flavors

它似乎很好地解释了所有基础知识。我今天刚刚完成转换为Gradle,效果很好。自定义应用程序图标,名称和字符串等。

正如网站所解释的那样,此设计背后的部分目的是使其更具动态性,并且更容易使用基本相同的代码创建多个APK,这听起来与您正在做的相似。

另请参阅我的recent question,参考您的项目结构并为每个应用使用自定义代码。