转自: http://ticktick.blog.51cto.com/823160/1365947

一般情况下,我们都是使用Eclipse+ADT插件或者Android studio软件来编译Android工程的,其实,Eclipse或者Android studio仅仅是将一些编译命令封装到可视化界面里而已,通过shell脚本、ADT附带的一些命令以及Ant工具,我们完全可以将Android工程的编译过程自动化,直接通过运行脚本就得到最终的APK文件。

Linux下用脚本编译c/c++程序至少需要两个东西,一个是编译器,如gcc/g++,另一个则是编译配置文件,即Makefile;同理,编译Android程序也同样需要编译器和编译配置文件,由于Android程序是Java开发的,所以编译器一般使用Ant(Apache的核心项目,Java编译器),配置文件则是build.xml,该编译配置文件可以自己手写,也可以通过ADT的工具生成;如果Andrid工程涉及JNI层,则编译命令使用NDK-Build,对应的编译配置文件则是Android.mk。

前面这段话,简单介绍了使用脚本编译Andriod工程的一些基本工具和关键词,详细的用法就留给读者自己去Google吧,这里给出一个我自己编写的通用脚本,放到你的Android工程的根目录,修改脚本的相关路径的配置,添加执行权限(chmod +x),即可编译你的Android工程了,具体的用法用注释的形式添加在脚本中了,文章最后的附件则是该脚本的测试Android工程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash
                                                                                                                                                                                                                                                             
#NOTE: 用法,在本工程根目录下执行 ./build.sh xxx
                                                                                                                                                                                                                                         
#其中,xxx为参数,可以是clean debug release,也可以不带参数,不带参数默认为debug
                                                                                                                                                                                                                                            
#如果参数是 clean,  则会删除所有编译生成的文件              
#如果参数是 debug , 则会生成 debug 版本的apk,位于 bin 目录下
#如果参数是 release,则生成 release版本的apk,位于 bin 目录下
                                                                                                                                                                                                                                             
#NOTE: 如果更改了工程配置,请先删除目录下的build.xml
                                                                                                                                                                                                                                            
#获取本目录的名称,作为build.xml的项目名称
PROJECT_NAME=${PWD##*/}
                                                                                                                                                                                                                                                   
#路径配置,请根据编译环境修改
ANDROID_SDK_PATH=/opt/android/sdk
ANDROID_NDK_PATH=/opt/android/ndk
ANT_PATH=/opt/apache-ant-1.9.0/bin
                                                                                                                                                                                                                                                             
#决定是否生成release版
BUILD_RELEASE=0
                                                                                                                                                                                                                                                              
if [ $1 = "clean" ]
then
    rm -rf gen
    rm -rf obj
    rm -rf libs/armeabi
    echo "clean success"
    exit
fi
                                                                                                                                                                                                                                                 
if [ $1 = "debug" ]
then
    BUILD_RELEASE=0
fi
                                                                                                                                                                                                                                                      
if [ $1 = "release" ]
then
    BUILD_RELEASE=1
fi
                                                                                                                                                                                                                                                                         
echo "begin to build..."
                                                                                                                                                                                                                                                             
#判断 build.xml 是否存在,若不存在,则创建一个
#请根据你的目标平台,修改update project命令的最后一个参数,该值为 android list 命令输出结果列表的id值
                                                                                                                                                                                                                                                        
if [ ! -e build.xml ]
then
    echo "No build.xml exist, generate build.xml"
    $SDK_PATH/tools/android update project -n $PROJECT_NAME -p . -s -t 1
fi
                                                                                                                                                                                                                                                                  
#判断jni目录是否存在,如果存在,则首先编译jni目录
if [ -d jni ]
then
    echo "build jni, generate libs"
    $ANDROID_NDK_PATH/ndk-build
fi
                                                                                                                                                                                                                                                               
#使用ant来编译
if [ $BUILD_RELEASE ]
then
    $ANT_PATH/ant release 
else
    $ANT_PATH/ant debug
fi
echo "build success"

在Android工程的根目录运行该脚本文件后,会在bin目录下生成apk文件,如果工程目录下没有ant.properties文件和xxx.key文件的话,则只会生成debug版和unsigned-release版,如果希望直接生成签名后的apk文件,则需要给出一个Android key文件,并编写一个ant.properties文件,该文件的编写示例如下:

1
2
3
4
key.store=ticktick.key
key.alias=ticktick
key.store.password=123456
key.alias.password=123456

在Android工程的根目录下,如果存在该ant.properties文件,则在编译release版的时候,会自动使用ticktick.key文件来签名生成的apk文件。

关于使用脚本编译Android工程就介绍到这儿了,希望我的示例脚本能够给初学者提供一些参考和帮助,有任何疑问欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博@卢_俊获取最新的文章和资讯。

转:Android开发实践:用脚本编译Android工程的更多相关文章

  1. Android 开发实践 ViewGroup 实现左右滑出窗口(二)

    接上一篇 <Android 开发实践 ViewGroup 实现左右滑出窗口(一)http://www.cnblogs.com/inkheart0124/p/3532862.html> 源码 ...

  2. Android 开发实践 ViewGroup 实现左右滑出窗口(一)

    利用假期把以前做的东西总结整理一下,先从简单的开始吧.实现的效果是这样的:   做了个截屏动画,比例有点不对了,凑合着看吧. 整个窗口有3部分组成,中间的主界面是个列表,左边的滑出界面是个菜单,右边的 ...

  3. Xamarin.Android开发实践(五)

    原文:Xamarin.Android开发实践(五) 一.服务的生命周期 服务与活动一样,在它的整个生命周期中存在着一些事件,下图可以很好解释整个过程以及涉及到的方法: 在真实的使用中,Service来 ...

  4. Xamarin.Android开发实践(四)

    原文:Xamarin.Android开发实践(四) Xamarin.Android下获取与解析JSON 一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选 ...

  5. Xamarin.Android开发实践(三)

    原文:Xamarin.Android开发实践(三) 一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没 ...

  6. Xamarin.Android开发实践(二)

    原文:Xamarin.Android开发实践(二) 一.准备 开始学习本教程前必须先完成该教程http://www.cnblogs.com/yaozhenfa/p/xamarin_android_qu ...

  7. Xamarin.Android开发实践(一)

    原文:Xamarin.Android开发实践(一) 一.准备工作 1.创建一个空的解决方案,并命名为Phoneword 2.右击解决方案 新建->新建项目 并命名为Phoneword_Droid ...

  8. Android开发面试经——4.常见Android进阶笔试题(更新中...)

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  9. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    [Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...

随机推荐

  1. MessageBox的Buttons和三级联动

    一.MessageBox的Buttons MessageBox.Show可以出现有按钮的对话框 例如: DialogResult dr = MessageBox.Show("是否要继续吗?& ...

  2. JavaScript基础12——js的方法重载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 收集oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...

  4. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. IOS 网络浅析-(九 NSURLSession代理简介)

    从最开始什么都不懂的小白,到到现在略知一二的小孩.我觉得不仅仅是我,大家应该都会注意到代理几乎贯穿着IOS,那么问题来了,我接下来要说什么呢,那就是.标题的内容啦.上篇网络系列的文章我介绍了NSURL ...

  6. android activity 管理器AMS----概述

    AMS & WMS,应该是app端打交道最多的2个framwork层的service. ActivityManagerService 是android提供给用于管理Activity运行状态的系 ...

  7. 【SVN】Unable to connect to a repository at URL 'svn://localhost/Test'

    早上配置SVN,但是这次不是那么顺利... 环境: Windows 7 SVN服务器端:CollabNetSubversion-server-1.8.13-1 SVN客户端:TortoiseSVN_V ...

  8. Js中获取对象的所有key值

    假如现在有一个对象 var obj = { A:2 ,B:"Ray" ,C:true ,D:function(){} } 如果想遍历对象obj中的所有键值,一般是用以下方式 for ...

  9. TOMCAT报错:HTTP Status 404 -

    构建struts2工程师,tomcat报错: HTTP Status 404 - type Status report message description The requested resour ...

  10. Eclipse编译去除svn文件夹

    使用Eclipse编译文件后,classes文件中总是有.svn的文件夹,这些文件没有什么用,而且影响build的速度 "Project->Properties->Java Bu ...