参考:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_gawor/0502_gawor.html
http://www.chinaaet.com/article/9809
http://www.zuidaima.com/user/1982170616236032/mood.htm
package com.test;
import java.io.File;
import java.util.Date;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.taskdefs.Delete;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.taskdefs.Mkdir;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.FilterSet;
import org.apache.tools.ant.types.PatternSet;
public class AntBuild {
/**
* @param args
*/
public static void main(String[] args) {
// 拷贝绘本资源文件
File picRes = new File("d:\\app\\picBook.zip");
buildPicBooks(picRes,"haha");
}
public static final String appDir="d:\\app";
// 绘本空Android 工程存放目录
public static final String apkDir = appDir+"\\apk";
public static String buildPicBooks(File picRes,String title){
long now = System.currentTimeMillis();
//临时生成apk目录
String fileName = String.format("d:\\app\\%d\\", System.currentTimeMillis());
File file = new File(fileName);
// 创建临时目录
mkDir(file);
// 拷贝APk资源文件、并替换app name
copy2Replace(file, title);
//解压绘本图片、音乐
unZip(file, picRes);
//将绘本jpg mp3 拷贝到app工程assets里
String name = picRes.getName();
File picFile = new File(fileName +name.substring(0,name.indexOf(".")) );
File replace = new File(String.format(
"%s\\OCCUPTION_PACKAGE\\assets\\dede_audios", fileName));
copy(replace, "**/*.mp3", picFile);
copy(replace, "**/*.MP3", picFile);
replace = new File(String.format(
"%s\\OCCUPTION_PACKAGE\\assets\\dede_images", fileName));
copy(replace, "**/*.JPG", picFile);
copy(replace, "**/*.jpg", picFile);
//Build apk
File build = new File(String.format(
"%s\\OCCUPTION_PACKAGE\\build.xml", fileName));
build(build);
//apk 移动到正式apk目录
File appFile = new File(String.format(
"%s\\OCCUPTION_PACKAGE\\bin", fileName));
copy(picRes.getParentFile(), "**/OCCUPTION_PACKAGE-debug.apk", appFile);
//删除临时目录
delDir(file);
System.out.println((System.currentTimeMillis()-now)/1000+"秒");
return null;
}
/**
*
*/
public static void build(File file){
//1.5 以后使用,但是报错 import requires support in ProjectHelper
// Project project = new Project();
// try {
// project.fireBuildStarted();
// project.init();
// ProjectHelper projectHelper = ProjectHelper.getProjectHelper();
// projectHelper.parse(project, file);
project.executeTarget(project.getDefaultTarget()); //调用默认的target标签
// project.executeTarget("debug"); //调用删除target标签
// project.fireBuildFinished(null);
// } catch (Exception e) {
// System.out.println("#############");
// e.printStackTrace();
// }
Project p = new Project();
p.init();
ProjectHelper.configureProject(p,file);
p.executeTarget("debug");
}
/**
* 文件拷贝并替换apk名字
*
* @param args
*/
public static void copy2Replace(File file, String title) {
Project prj = new Project();
Copy copy = new Copy();
copy.setEncoding("UTF-8");
copy.setProject(prj);
copy.setTodir(file);
FileSet fileSet = new FileSet();
fileSet.setDir(new File(apkDir));
fileSet.setIncludes("**/**"); // 拷贝所有文件
copy.addFileset(fileSet);
FilterSet filter = copy.createFilterSet();
// 替换@app_name@ 为 title
filter.addFilter("app_name", title);
copy.execute();
}
/**
* 文件拷贝
*
* @param args
*/
public static void copy(File dirFile, String include, File picFile) {
Project prj = new Project();
Copy copy = new Copy();
copy.setEncoding("UTF-8");
copy.setProject(prj);
copy.setTodir(dirFile);
FileSet fileSet = new FileSet();
fileSet.setDir(picFile);
fileSet.setIncludes(include); // 拷贝所有文件
copy.addFileset(fileSet);
copy.execute();
}
/**
* make dir
*
* @param file
*/
private static void mkDir(File file) {
// TODO Auto-generated method stub
Project prj = new Project();
Mkdir mkdir = new Mkdir();
mkdir.setProject(prj);
mkdir.setDir(file);
mkdir.execute();
}
/**
* delete dir
*
* @param file
*/
private static void delDir(File file) {
// TODO Auto-generated method stub
Project prj = new Project();
Delete delete = new Delete();
delete.setProject(prj);
delete.setDir(file);
delete.execute();
}
public static void unZip(File file, File zip) {
Project prj = new Project();
Expand expand = new Expand();
expand.setProject(prj);
expand.setSrc(zip);
expand.setOverwrite(true);
expand.setDest(file);
PatternSet patternset = new PatternSet();
patternset.setIncludes("**/**");
patternset.setProject(prj);
expand.addPatternset(patternset);
expand.execute();
}
}