androidant打包
A. android studio 怎么安装ant
近年来,由于公司项目的越来越庞大和复杂,我们的项目走上了插件化开发之路,由于之前一直是用Eclipse开发的,而Eclipse里面本身集成了Ant脚本的,所以模块化编译打包发版都很方便,成熟。但是考虑到以后Google可能更重视AndroidStudio的维护,对于我们这些还有着很长程序开发之路要走的人来说,学习这个新的IDEA很有必要,况且公司项目主要还是用Eclipse来开发的,为了保持相同的项目结构,只能弃gradle不用了,所以今天的重点是ant在androidstudio中的使用。
AndroidStudio派生自Intellij项目,里面包含了我们开发Android应用所需的各种插件,它基于gradle来构建,但是Google公司将ant插件干掉了,所以先安装ant吧。
一、Ant插件的安装
由于之前我安装过IntellijIdea,所以我就用一个比较偷懒的方式,直接从那儿复制插件过来啦:
B. Android怎么把一个现有工程打包成sdk
方法一
使用eclipse导出jar包:我们知道一个java项目是可以用eclipse导出jar包的,安卓工程也一样,只要按普通的方法export就可以了。不过,export出来的包是没有混淆过的,如果你要混淆,还需要单独对你的jar包执行一次proguard程序,可参考proguard使用指南。
方法二
使用脚本打包:我个人比较喜欢该方法,因为android工程项目并不是只有JAVA代码,有的资源也需要提供出来,而使脚本可以更加定制化一些。
android的SDK默认提供了一个ant打包的脚本,具体使用方法,可参考之前的BLOG,使用ant打包APK及依赖包最佳解决办法
我们可以看出,打包,最终调用的其实是android sdk下的ant脚本,既然安卓已经帮我们写好了ant脚本,我们就好好利用。
使用上面的BLOG中介绍的方法,先在工程目录中生成你的build.xml,然后自己写一个target
<target name="sdk"
depends="-set-release-mode, -release-obfuscation-check, -compile, -post-compile, -obfuscate">
</target>
这段target代码,就是只执行到了混淆的脚本。然后我们在build.xml中选择右键,run as, 第二个ant Build,然后选择要执行的target为我们加上的sdk。
等执行完成后,就会在project/bin/proguard/obfuscated.jar找到你所要的jar包。
C. cocos2dx用ant打包出现if 语句与安卓SDK冲突的问题
你要是写出NDK的版本,以及错误信息。
建议使用r9d版本,r10版本有问题。
这里给题主几个小建议,方便发现问题的所在
1、在bat脚本中 set NDK_LOG=1,打开make的日志输出
2、在mk文件中通过$(info xxxxx) ,输出你定义的信息,方便定位是哪儿了问题
D. 用 ant 打包 android 一直出现 class.dex does not exists 急急急!!在线等
用ant在命令行创建以一个android项目 命令是 android create project -k com.test.ant -n TestAnt -a MainActivity -t 2 -p E:\JazzyYang\TestAnt
然后进入该目录下 敲ant debug
然后
BUILD FAILED
E:\JazzyYang\androidsdk\android-sdk-windows\tools\ant\ant_rules_r3.xml:395: The
following error occurred while executing this line:
E:\JazzyYang\androidsdk\android-sdk-windows\tools\ant\ant_rules_r3.xml:209: com.
android.sdklib.build.ApkCreationException: E:\JazzyYang\Android_Work\bin\classes
.dex does not exist
E. 使用ant脚本打包android项目,包含library项目,如何设置依赖项目
设置方法如下:
1.生成R.java类文件:
Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java;
2.将.aidl文件生成.java类文件:
Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件;
3.编译.java类文件生成class文件:
Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件;
4.将class文件打包生成classes.dex文件:
Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件;
5.打包资源文件:
Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件;
6.生成未签名的apk安装文件:
Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件;
7.对未签名的apk进行签名生成签名后的android文件就可以了。
F. ant打包安卓apk怎么实现.9图识别,现在就是报错,在不改图的情况下可以完成识别不
跟.9没关系吧,最好能把错误的log日志打印出来
G. Ant 打包 编译不通过 eclipse可以 命令行不行
在命令行中编译Eclipse 中的整个工程:
用命令行模拟eclipse中Android Project编译流程
1、新建一个Android Project,目前的目录结构如下图:
2、点击右键,Build Project,此时的目录结构如下图:
此时gen目录下产生了R.java,bin目录在工程目录中,显示如上,没有任何内容;但是在终端查看,内容有改变,如下:
只剩下一个classes文件夹,此文件夹为空
对应的命令:
在工程目录下执行如下代码:
生成R文件:
aapt p -f -m -J gen -S res -I ~/android-sdk-linux/platforms/android-18/android.jar -M AndroidManifest.xml
3、点击右键,再一次Build Project
4、点击右键Run as Android Application
对应的命令:
在工程目录下执行以下命令:
生成resources.ap_:
aapt package -f -S res -I ~/android-sdk-linux/platforms/android-18/android.jar -A assets/ -M AndroidManifest.xml -F bin/resources.ap_
生成classes.dex:
dx --dex --output=bin/classes.dex bin/classes
生成HelloWorld_unsigned.apk:
apkbuilder bin/HelloWorld_unsigned.apk -v -u -z bin/resources.ap_ -f bin/classes.dex -rf src -nf libs
签名apk,使用debug key,别名为androiddebugkey,密码是android:
jarsigner -verbose -keystore ~/.android/debug.keystore -signedjar bin/HelloWorld_signed.apk bin/HelloWorld_unsigned.apk androiddebugkey
对齐apk:
zipalign -v 4 bin/HelloWorld_signed.apk bin/HelloWorld.apk
移除临时apk:
rm bin/HelloWorld_unsigned.apk bin/HelloWorld_signed.apk
安装apk:
adb install bin/HelloWorld.apk
5、点击右键,Android Tools->Export Signed Application Package
同样的步骤,只是签名使用的自己创建的数字证书(release版),最后的apk不保存在bin目录下,而是由用户指定。
H. 如何配置android studio环境实现ionic的编译,运行与打包
1.1配置Java环境
下载jdk,jre(jre好像是跟jdk一起的,jdk1.8.0_101,jre1.8.0_101)
参考文档:如何配置jdk,jre的参考文档
配置的环境变量:PATH(jre/bin以及bin目录),ClASSPATH(lib以及lib/tools.jar目录),JAVA_HOME(jdk的安装目录)
测试配置java变量是否成功的方法是:在dos命令行输入:java -v,以及javac
1.2配置ant环境(同样需要配置环境变量)
下载地址:ant下载地址
配置环境变量:系统变量PATH(ant的bin目录环境);
测试ant安装是否成功:在dos命令行输入ant -v 如果显示ant版本说明安装成功。
1.3下载Android studio(目前安装的是2.2版本的android studio;)
下载地址:android studio 下载地址
I. android如何使用ant批量打包
ps :后期熟悉ant的话,可以使用纯ant脚本或者使用另一种更好的自动化打包工具(maven)关键代码如下:package com.cn.ant; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import org.apache.tools.ant.DefaultLogger; import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; public class AntTest { private Project project; public void init(String _buildFile, String _baseDir) throws Exception { project = new Project(); project.init(); DefaultLogger consoleLogger = new DefaultLogger(); consoleLogger.setErrorPrintStream(System.err); consoleLogger.setOutputPrintStream(System.out); consoleLogger.setMessageOutputLevel(Project.MSG_INFO); project.addBuildListener(consoleLogger); // Set the base directory. If none is given, "." is used. if (_baseDir == null) _baseDir = new String("."); project.setBasedir(_baseDir); if (_buildFile == null) _buildFile = new String(projectBasePath + File.separator + "build.xml"); //ProjectHelper.getProjectHelper().parse(project, new File(_buildFile)); // 关键代码 ProjectHelper.configureProject(project, new File(_buildFile)); } public void runTarget(String _target) throws Exception { // Test if the project exists if (project == null) throw new Exception( "No target can be launched because the project has not been initialized. Please call the 'init' method first !"); // If no target is specified, run the default one. if (_target == null) _target = project.getDefaultTarget(); // Run the target project.executeTarget(_target); } // private final static ArrayList<String> flagList = new ArrayList<String>(); //也可以使用集合,不过需要手动添加项 private final static String[] flagList = new String[]{"htc","moto","oppo"};//此处初始化市场标识 private final static String projectBasePath = ""; //项目的根目录,需要配置 private final static String ApkPath = ""; //要改名后拷贝的目录,需要配置 private final static String placeHolder = ""; //占位符,需要配置 public static void main(String args[]) { //flagList.add("htc"); //flagList.add("moto"); //flagList.add("oppo"); try { System.out.println("---------ant批量自动化打包开始----------"); for(String flag : flagList){ //先修改manifest文件:读取临时文件中的@market@修改为市场标识,然后写入manifest.xml中 String tempFilePath = projectBasePath + File.separator + "AndroidManifest.xml.temp"; String filePath = projectBasePath + File.separator + "AndroidManifest.xml"; write(filePath,read(tempFilePath, flag)); //执行打包命令 AntTest mytest = new AntTest(); mytest.init( projectBasePath + File.separator + "build.xml", projectBasePath); mytest.runTarget("clean"); mytest.runTarget("release"); //打完包后执行重命名加拷贝操作 //String flag = "htc"; File file = new File(projectBasePath + File.separator +"bin"+File.pathSeparator+"MainActivity-release.apk");//bin目录下签名的apk文件 file.renameTo(new File(ApkPath + File.separator + "MainActivity_"+flag+".apk")); } System.out.println("---------ant批量自动化打包结束----------"); } catch (Exception e) { e.printStackTrace(); System.out.println("---------ant批量自动化打包中发生异常----------"); } } public static String read(String filePath,String replaceStr) { BufferedReader br = null; String line = null; StringBuffer buf = new StringBuffer(); try { // 根据文件路径创建缓冲输入流 br = new BufferedReader(new FileReader(filePath)); // 循环读取文件的每一行, 对需要修改的行进行修改, 放入缓冲对象中 while ((line = br.readLine()) != null) { // 此处根据实际需要修改某些行的内容 if (line.contains(placeHolder)) { line = line.replace(placeHolder, replaceStr); buf.append(line); } else { buf.append(line); } buf.append(System.getProperty("line.separator")); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭流 if (br != null) { try { br.close(); } catch (IOException e) { br = null; } } } return buf.toString(); } /** * 将内容回写到文件中 * * @param filePath * @param content */ public static void write(String filePath, String content) { BufferedWriter bw = null; try { // 根据文件路径创建缓冲输出流 bw = new BufferedWriter(new FileWriter(filePath)); // 将内容写入文件中 bw.write(content); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭流 if (bw != null) { try { bw.close(); } catch (IOException e) { bw = null; } } } } }
J. Ant打包功能求解!BUILD FAILED
你看看后面是不是有这样的错误:
BUILD FAILED
D:\android\sdk\tools\ant\build.xml:649: The following error occurred while executing this line:
D:\android\sdk\tools\ant\build.xml:694: Execute failed: java.io.IOException: Cannot run program "D:\android\sdk\build-tools\23.0.0_rc2\bin\aapt.exe" (in directory "D:\Cocos\HelloCocos\proj.android"): CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
....
看提示:系统找不到指定的文件。是哪个文件呢?是这个:D:\android\sdk\build-tools\23.0.0_rc2\bin\aapt.exe,你去你的sdk目录下看看是否有这个文件夹和文件bin\aapt.exe;没有的话自己新建一个,然后将aapt.exe和zipalign.exe复制进去,这两个文件在你D:\android\sdk\build-tools\23.0.0_rc2目录下。然后在编译。我的错误就是这样解决的。不知道能否解决你的问题。个人经验,仅供参考。