如何有效支持几个Android项目与代码略有差异?

时间:2016-06-30 12:58:28

标签: android git android-studio gradle android-gradle

我们最初只有一个项目(让我们称之为Project A),但随着时间的推移,有必要使用客户端品牌(Project B)创建相同的应用程序。与原始项目的唯一区别是颜色,drawable和某些类中的代码。

我决定在Git中复制分支并实现Project B的更改。结果,现在我有2个代码重复的应用程序大约95%。主要问题是,对于相同的应用程序时间进行代码更改是非常昂贵的,因为这两个分支无法合并。它们具有不同的包,Android上的包名称与磁盘上文件的路径相匹配。因此,所有文件都只是在不同的目录中。

我提请注意Product Flavors。这解决了"如何在一个git分支中支持2个项目的问题"但是不清楚如何有效地对具有小差异的文件的公共代码进行更改(每个类中的一些行) 。

在这种情况下,我应该只进行一次更改?也许,您之前遇到过这样的问题。

1 个答案:

答案 0 :(得分:0)

您已经回答了第一个使用Product Flavors的问题。对于第二个问题,您还将使用这些产品风格,答案是简单地创建一个基类abstract类,并且具有两个具有相同名称的具体类 。基地一个,每一个都有自己的味道。

我给你举个例子:

package com.application.main;
public abstract class BaseMainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myDifferingMethod();
    }

    public abstract void myDifferingMethod();

}

然后,您创建覆盖该方法的具体类:

风味A:

package com.application.main;
public class MainActivity extends BaseMainActivity {
    @Override
    public void myDifferingMethod() {
        System.out.println("im on A product flavor");
        doStuff();
    }

和风味B:

package com.application.main;
public class MainActivity extends BaseMainActivity {
    @Override
    public void myDifferingMethod() {
        System.out.println("im on B product flavor");
        // don't do nothing
    }