0

使用 Eclipse(在 Android 上开发)我想创建第二个项目,它与第一个项目相同,但有些类不同。

确切地说,我正在创建一个 Android 应用程序,我想提供免费版本和高级版本。实际上,项目的代码是相同的,但改变了一些类。

问题是我不想支持两个项目。如果我修改一个类,那么我必须在另一个项目上修改相同的更改。这是非常多余的。

此外,项目被推送到远程 GIT 存储库。

最后一点,Andriod 应用程序是使用他的根包来识别的,例如:com.example.myapp

所以,我需要两个不同的根包(所以我需要创建新文件夹),例如 com.example.myappfree 和 com.example.myapppremium

在 Eclipse 中创建两个共享包和类的 java 项目,但更改两到三个类的最佳解决方案是什么?

4

4 回答 4

2

创建一个通用代码项目并从其他两个项目中引用该项目。

于 2013-04-15T15:44:32.513 回答
1

这并不是应该的那么简单,但您可能希望在 Eclipse 中使用 Android 项目的库功能:

http://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject

于 2013-04-15T15:48:31.010 回答
1

将您希望在其他 andorid 项目中引用的项目作为库项目。你在你的android项目中引用库项目

使您的项目成为图书馆项目。右击项目。转到属性选择android。选择是库。单击应用并单击确定

在此处输入图像描述 她是链接中的一个示例,我在其中发布了如何引用 actionbarsherlock 的快照,它是 Android 项目中的一个库项目。

导入 actionbarsherlock 时无法解析 import .R

指向开发者网站的链接

http://developer.android.com/tools/projects/projects-eclipse.html#ReferenceLibraryProject

于 2013-04-15T15:49:21.323 回答
1

您可以使用图书馆项目来做到这一点。基本上,您将采用您的主项目,该项目将采用所有代码并将其转换为库。创建两个新项目,免费版和付费版。

在此处阅读如何设置库项目。

您必须确保免费和付费项目具有不同的包名称,并且在您的库项目中,您阅读包名称并验证您运行的是免费版本还是付费版本。

在这里你可以看到我发布的一个工作示例。整个资源都在图书馆项目上,其他的只使用不同的资源。

查看PackageSelector 类。它展示了如何检测正在运行的版本,然后相应地更改应用程序很简单。

public class PackageSelector extends Application {


public int getVersion() {       
    if (getPackageName().toLowerCase().contains("pro")) 
     return LanguagePickActivity.FULL;
    else if (getPackageName().toLowerCase().contains("macedonian")) 
     return LanguagePickActivity.MACEDONIAN;
    else if (getPackageName().toLowerCase().contains("german")) 
         return LanguagePickActivity.GERMAN;        
    else // if (getPackageName().toLowerCase().contains("spanish")) 
     return LanguagePickActivity.SPANISH;
}
}

关于你的活动:

public void getVersion()  {
    Country =  ((PackageSelector)getApplication()).getVersion(); 
 }

当您有与单个版本相关的内容时:

 if (Country == LanguagePickActivity.FULL ) { 
            //Do something only the paid version has
        finish();
    }
    else {
     //Do something on the free version
     finish();
 }
于 2013-04-15T15:56:15.267 回答