android - 如何有效地支持代码中稍有不同的多个Android项目?

标签 android git android-studio gradle android-gradle-plugin

我们最初只有一个项目(我们称它为Project A),但是随着时间的流逝,有必要使用客户品牌(Project B)来制作相同的应用程序。与原始项目的唯一区别是颜色,可绘制对象和某些类中的代码。

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

我提请注意Product Flavors。这解决了“如何在一个git分支中支持2个项目”的问题,但是尚不清楚如何有效地更改文件的通用代码,而这些文件之间的差异很小(每个类中的某些行)。

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

最佳答案

您已经回答了第一个问题,即使用产品调味剂。对于第二个问题,您还将使用这些产品 flavor ,答案是简单地创建一个基类abstract,并从基类中扩展出两个具有相同名称的具体类,每个类都具有自己的 flavor 。

我举一个例子:

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();
    }

和 flavor 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
    }

关于android - 如何有效地支持代码中稍有不同的多个Android项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38123852/

相关文章:

Android,监听器/观察器/日历事件更改回调

android - 带有 PushPlugin 编译失败的 Phonegap Android

xcode - Xcode使用git如何解决project.pbxproj的冲突?

Git/Gerrit Jenkins 持续集成 : How to handle rebase needs

android - Android Studio中工具栏的预览问题

android - 如何在协同程序中开始新的 Activity ? Kotlin Android

git - 什么是默认的 git diff 工具(和 merge 工具)?

Android-studio 项目运行失败

android - 如何在 Android Kotlin 中抑制字符串常量的拼写检查?

Android autoLink 导致渲染错误