我想一个Android构建系统过程,命令行或Eclipse,从单个源代码库生成几个。apk文件。一些常见的原因是——针对不同需求的市场有特定的版本,或者有免费和付费的版本。
这个问题是不是关于:
-
将共享代码打包到Android库或外部Java jar中
-
生成调试版与签名版。apk
Google说"你可能需要为你打算发布的每个APK创建单独的Android项目,这样你就可以分别适当地开发它们。你可以简单地复制你现有的项目,并给它一个新名字。"然后他们善意地建议使用图书馆,这我理解。然后,他们顺便提到了我真正想要的:"一个可以根据构建配置输出不同资源的构建系统"
-
我知道要在JAVA中完成条件编译,可以关闭一个"公共静态final"变量。在build.xml中有一个调整这样一个值的示例。有更完整的Android Ant构建配置的例子吗?或者有一个OSS项目的链接吗?顺便说一句,build.xml是自动生成的,但我见过有人破解它,那么它是如何工作的呢?
-
使用Manifest.xml中声明的包名作为package="com.example "。Appname",如果一个人需要发出多个不同名称的。apks,那么每个人是否都有一个单独的项目?
我从一个单一的源代码树生成2个不同的APK(演示和生产),有3个小修改:
1)我在我的Application
类中有public static final DEMO=true; //false;
,并且根据该值,我用于在演示/生产功能之间切换代码
2)有两个主要活动,如:
package mypackage;
public class MyProduction extends Activity
{
//blah-blah
}
package mypackage.demo;
public class MyDemoActivity extends mypackage.MyProductionActivity
{
//blah-blah
}
3)最后2个独立的AndroidManifest.xml
文件,根据演示/生产切换指向不同的启动器活动
我手动在2个APK之间切换,但看到编写小ANT任务自动在它们之间切换没有什么困难
一种方法是维护两个独立的AndroidManifest.xml,每个配置一个。您可以在手动(复制)或自动(构建脚本)之间来回切换。
[编辑]这个人在这里有一个系统来做这种事情:http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/
回答这个尖叫 Gradle
,如本网站所解释的。这是Android Studio的官方内置功能,并受到鼓励。
令人惊奇的;我已经建立了3个独立的应用程序使用相同的源代码,自定义文本和图形,没有任何特殊的编码。只需要一些目录和Gradle
设置,我的其他帖子可以找到答案。
它似乎很好地解释了所有的基础知识。要了解您的特定问题的答案,请查看Build Variants
下的Product Flavors
部分,其中描述了指定不同的口味。
正如网站解释的那样,这种设计背后的部分目的是使其更具动态性,更容易允许使用基本相同的代码创建多个apk,这听起来就像你正在做的。
我可能没有解释得最好,但是那个网站做得很好。
尽管你坚持认为这不是关于将共享代码打包到Android库中,但它确实是。你说过市场可能有不同的需求,或者有免费和付费版本。在每个示例中,您的两个最终输出apk具有不同的行为和/或资源。你可以把你的大部分代码放在一个共享的Android库中,然后在你的实际项目中保持差异。
举个例子,我曾经开发过需要同时在Android Market和Amazon AppStore上发布的应用。亚马逊AppStore要求,如果你链接到应用的市场页面,该页面必须是亚马逊的(与Android market页面相反)。您可以将URL存储在库中的资源中,并在代码中使用它,但随后在Amazon项目中重写该资源,以指向适当的Amazon URL。
如果你的结构正确,你可以在代码中做类似的事情,因为你的起点是你的应用程序对象,你可以子类化它并做不同的事情。
也就是说,如果您想添加一个Ant步骤来更改清单中的包名,那么就是 XML。作为预编译步骤,应该不难修改。这篇文章很好地介绍了如何在构建时修改配置文件的示例;具体请参见定制构建和使用Java配置文件两节。注意,关于build.xml和ant的一些信息现在有点过时了。
我们的情况是这样的:我们有一个单一的代码库,我们从它为几个客户端发布。他们每个人都有不同的要求,关于标题,背景和应用程序中的其他资源(更不用说包名称)。
Build由一个Ruby脚本处理,该脚本修改AndroidManifest
,从客户端特定文件夹复制/替换某些资源,然后移动到Android的标准构建例程。构建完成后,脚本将更改的文件重置为原始的"默认"状态。
嗯…也许这不是最优的,也绝对不是针对android的,但我们就是这么做的。
我也有同样的问题,但是将所有的标记打包在一个项目中对我来说不是解决方案。我写了一个如何用Maven做这件事的例子:
如何从一个由Maven多模块项目组织的代码库创建多个Android apk文件。
我的团队使用单个代码库+附加代码构建2个不同的构建。由于android构建是基于ant脚本的,所以我使用ant脚本来完成这项工作。
我使用xmltask来操作manifest xml文件和许多ant任务(regexp, copy..)来编辑源代码。
我准备的模板项目模板(包括build.xml,默认。Properties, local.properties),并将新的源代码复制到这些项目模板中。复制完成后,并行运行build.xml以缩短构建时间。当构建完成时,我得到多个apk文件。
通过使用Android Studio构建变体(使用gradle作为构建系统)很容易实现您的目标。
点击这里查看更多详细信息。
我认为最好的方法仍然是对公共源代码使用library,并为演示和生产包使用两个不同的Android项目。这是因为在Java中,从apk到源代码进行反向工程非常简单。如果您在演示和生产中使用相同的源代码,有人可能会破解您的apk下载演示包,提取java源代码并解锁源代码,更改变量以将其用作生产版本。使用库,您可以在生产包中保留部分源代码,这样就没有办法将演示包用作生产包。