use*_*184 4 android build conditional-compilation android-library
我在Eclipse的一个项目中开发了一个Android应用程序 - 它是结构化的(来自iPhone),所以一个常量定义它是演示版还是完整版.
现在我遇到的问题是,每次我想创建演示版本时我都需要更改常量,但还需要使用不同的包名创建项目的副本.
显然,原始完整版中的代码更改需要复制到演示中,否则我每次提交应用程序时都必须重做演示应用程序的创建.
我看到三种可能的方法:
1.虽然我已经研究过图书馆项目,但我仍然不清楚在这种情况下这是如何真正提供一个好的解决方案的.
例如,如果我有一个活动结构的完整版本:
A1
A2
A3
Run Code Online (Sandbox Code Playgroud)
使用实用程序类U1,U2
当然U1和U2可以在一个库项目中并从两个项目中引用 - 但是活动,strings.xml,图形,布局需要重复(或者是否有另一种我看不到的方式?)这似乎没有是一个很好的前进方式,遗憾的是,当提出这种方法时,在这个主题的类似问题中没有解释过.
2.另一种方法是根据不同的构建设置(类似于iPhone)创建不同的包名称,但是,这似乎不可能在Eclipse中使用而不是使用一些外部脚本(诚实地说 - 我宁愿避免使用它似乎相当容易出错)同时还必须在Eclipse之外调用编译
3.可能最直接的方法(目前还有很少的努力)只是手动复制项目,更改一个常量,重命名包并在每次提交时编译/导出.然而 - 这似乎是相当"基本"的,当然看起来并不专业(与iPhone/xCode构建设置/目标解决方案相比)
什么是最好的方法(需要最少量的变化,仍然稳定且易于使用)?
非常感谢!
编辑
对于尝试过tim解决方案的每个人来说 - 它运行正常,但我遇到了自定义属性的问题.
检查一下:如何在构建期间解决Android库自定义属性和包名重新映射? 它将解决图书馆的问题
我目前在日食中这样做,并不难.
将现有源转换为库项目.
创建两个免费和付费的新项目.
将库项目包含在免费和付费项目中.
免费/付费项目中没有必要拥有单个活动或资源.您需要的只是每个表明您的图书馆活动的清单.我的免费和完整项目目前没有任何类型的java,资源或布局文件,它只是一个引用库中活动的清单.
我对两个项目使用完全相同的代码,我通过说:
if(getApplicationContext().getPackageName().equals("full version package name")) {
//do full stuff
} else {
//do free stuff
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一些问题,特别是如果你已经在市场上发布了你的应用程序:
如果您已经发布了一个免费版和专业版,它有点不幸,因为活动路径需要改变到公共库的路径,你不能重命名发布的包相匹配的库路径.所以有人将失去现有的图标.
在我的情况下,我在分割它们之前只发布了一个免费版本,并且我能够使用与免费版本相同的包名来命名库.我怀疑你是否被允许包含一个与包装包具有相同包装名称的库,但显然它可以这样做(对我来说工作正常).
所以在我的情况下,我有三个项目:
免费版和完整版显示添加名为com.myname.myapp.ActivityA或com.myname.myapp.ActivityB仅存在于库项目中的活动.
| 归档时间: |
|
| 查看次数: |
3127 次 |
| 最近记录: |