资讯专栏INFORMATION COLUMN

使用ANT,实现一套代码生成多个不同的APK

PingCAP / 2333人阅读

摘要:首先从资源文件读取项目属性属性包括包名版本号版本编号渠道号修改文件内容替换文件内容目前使用的是正则来替换,如果有必要的话可以改成。对做制定,替换包名,版本号由于包名换了,所以需要替换代码内的文件引用路径替换完成后调用之前的任务。

最近由于项目需要,要在自有平台上发布若干个代码一致,但包名,版本,引用资源都不同的App。结合了一下网上查到的资料,成功的使用ant实现。

主要需求

重用android项目生成的build.xml来生成apk,复用它的release,debug等target

操作前后不需要手工对源代码进行修改,保证源代码能正常运行

通过build参数的不同,实现一个代码树生成多个版本的apk。


步骤 思路:

使用根目录下的build.xml 来把代码和相关文件复制到临时文件内,并进行对应版本的处理,再在临时文件夹内使用来调用android生成的build.xml。实验相关代码如下:


     
        
             
            
        
    

目录配置:

版本特定内容,分目录放到指定目录下:

custom_versions/{version}/yoyo_project.properties #配置的properties文件
custom_versions/{version}/res #资源目录    

文件复制:

在进行apk的build之前,将代码,资源以及manifest等需要的文件复制至临时目录:








    


...





...

对应项目的资源文件复制到临时文件来覆盖通用的资源:


    

读取配置

复制后还需要对配置文件的内容进行修改,替换到对应的版本。首先从资源文件读取项目属性:

 

属性包括:

{u9.package}: 包名
{u9.versionName}: 版本号
{u9.versionCode}: 版本编号
{u9.channelName}: 渠道号
修改文件内容

替换文件内容目前使用的是正则来替换,如果有必要的话可以改成xpath。

对AndroidManifest.xml做制定,替换包名,版本号:









由于包名换了,所以需要替换代码内的R文件引用路径:


    
        
    

替换完成后调用之前的ant任务。

完整Ant文件:



    

    
    

    

    
        
    

    
        
    

    
        
    

    
        
    

    
        
    

    
        
    
    
    
    
    
    
    
    
    

    

    
        
    


    

    

    


    

    

    
        
            
        
    

    
        
            
            
            
        
    

调用:

build版本的时候如下:

ant -Dversion=official #版本所在的目录名称

即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12072.html

相关文章

  • 如何使用Ant自动构建Android版本

    摘要:是一个很好的跨平台构建工具,特别是对于项目,这里使用它对工程进行自动化构建可以得到非常大的便利。渠道监测平台还可以帮助开发者第一时间发现盗版,保护公司合法权益。   Ant是一个很好的跨平台构建工具,特别是对于Java项目,这里使用它对Android工程进行自动化构建可以得到非常大的便利。一般来说对Android工程进行构建主要有以下几个步骤:   使用aapt来编译工程生成R.ja...

    Markxu 评论0 收藏0
  • Tinker + Bugly + Jenkins 爬坑之路

    摘要:这里需要确定一个找到基准包的策略,比如,我这里是通过构建编号来匹配存放基准包的路径,然后通过固定命名格式如版本号来匹配基准包以及文件和文件,如此下来,我只需要确定基线版本的版本号和构建编号即可。前阵子 Android 端的线上崩溃比较多,热修复被提上日程。实现方案是 Tinker,Jenkins 打包,最后补丁包上传到 Bugly 进行分发。主要在 Jenkins 打包这一块爬了不少坑,现记...

    番茄西红柿 评论0 收藏0
  • NDK构建

    摘要:注意,一个文件可能被构建系统分析多遍,所以不要假设某个变量没有被定义。有个函数可以做到这个功能这将会包含当前构建路径的所有子路径下的文件们。组件它是个很小的脚本在目录下,用于构建库。 Android.mk Android.mk把你的源码组织成模块(静态库/动态库)。默认情况会读取project/jni/Android.mk,并会读取project/jni/Application.mk作...

    G9YH 评论0 收藏0
  • Android Gradle从认识到实践(1)

    摘要:工作包含三个阶段首先是初始化阶段。阶段完了后,整个的以及内部的关系就确定了。对象显然,每一个都会转换成一个对象。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 前言 做为一个做Android的同学,我想对于Gradle是再熟悉不过了,但是对于Gradle却是有点陌生,几个月前,只是停留在这样简单的使用上。 compile com.strange.unfamili...

    付伦 评论0 收藏0
  • 网狐荣耀6701/6801 手机打包发布

    摘要:环境环境主要用于资源打包发布安卓打包和模拟运行和调试。环境下,安卓打包修改文件,中的路径。目录下,提供了一键打包脚本发布版发布版会发布数到路径下。使用以下命令即可运行手机项目。 1.前言 本篇将介绍网狐cocos2dx-lua工程打包android的apk、ios编译过程以及vs2015模拟运行和调试、lua脚本热更新。关于网狐的服务端编译运行,请查看网狐6701/6801服务端编译 ...

    LancerComet 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<