2011-07-25 106 views
2

我有一个Android应用程序项目,其中包含我所有的代码。我已经将这个“app”定义为here at android.developer.com.定义的库项目。Android应用程序版本(免费和付费) - 告诉图书馆项目类,如果应用程序是免费或付费

因此,我制作了两个利用这个库项目的新Android项目。每个新项目的新包的名字是:

com.myapps.freeapp 
com.myapps.paidapp 

正如你很可能会看到,我试图发布应用的免费和付费版本。

什么是告诉图书馆项目安装的应用程序是免费版还是付费版的最佳方式?

回答

5

这是从我的blog post,描述如何使用库项目建立免费/付费版本。

一般情况下,您将创建三个项目;免费项目,付费项目和图书馆项目。

,随后创建库项目中的一个Build.java文件,像这样:

public class Build { 
    public final static int FREE = 1; 
    public final static int PAID = 2; 
    public static int getBuild(Context context){ 
     return context.getResources().getInteger(R.integer.build); 
    } 
} 

现在,你会在每个项目创建的build.xml资源:

[库] /resources/values/build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <integer name="build">0</integer> 
</resources> 

[游离] /resources/values/build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <integer name="build">1</integer> 
</resources> 

[付费] /resources/values/build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <integer name="build">2</integer> 
</resources> 

然后,您将能够在运行时检查版本:

if (Build.getBuild(context) == Build.FREE){ 
    // Do the free stuff 
} else { 
    // Do the paid stuff 
} 

blog post详细介绍了具体步骤在Linux命令行中从头创建项目是必要的。

+0

我最终实现了一个像这样的方法。 – dell116

+3

这似乎不是一个好主意。我相信根深蒂固的手机可以改变资源价值,将1变为2可能非常简单。 –

0

“已付费”和“免费”信息取决于每个应用程序 - 图书馆不知道这些信息。

如果您有依赖于这些应用程序(即代码来检查许可证,例如)一些特定的代码,它应该是在具体应用中,而不是在这两者共同的部分。

+0

我在想,因为新的项目有不同的包名,然后我可以通过这些包名到库项目和创建基于新项目(com.myapps.freeapp和COM的软件包名称不同的逻辑路径。 myapps.paidapp)....这是不可能的? – dell116

+1

我想这将是可能的,但它*感觉不对*:你的图书馆将不会*通用*了。一个可能更好的解决方案是图书馆中的一个抽象类,每个项目扩展一个类;然后,从每个项目中,将相应的类实例化为库中的一个对象。 –

相关问题