在Eclipse上创建两个Android项目

时间:2013-04-15 15:42:09

标签: java android eclipse project

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

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

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

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

最后一点,Andriod App使用他的root包进行识别,例如:com.example.myapp

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

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

4 个答案:

答案 0 :(得分:2)

创建一个公共代码项目,并从另外两个项目中引用该项目。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

enter image description here 她是链接中的一个例子,我发布了如何在Android项目中引用actionbarsherlock whcih是一个库项目的快照。

import .R cannot be resolved when I import actionbarsherlock

指向开发者网站的链接

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

答案 3 :(得分:1)

您可以使用图书馆计划来执行此操作。基本上,您将获取主项目,该项目将获取所有代码并将其转换为库。创建两个新项目,即免费和付费版本。

Read here如何设置图书馆项目。

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

Here你可以看到我发表的一个实际例子。整个来源在图书馆项目上,其他人只使用不同的资源。

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

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