一键编译之通过脚本自动打成apk
来源:互联网 发布:在c 中执行sql语句 编辑:程序博客网 时间:2024/06/05 21:52
一键编译分三篇,1.通过脚本自动打成apk;2.配合apk中的版本更新实现自动检测/自动更新;3.搭建jekins环境实现自动测试;
本篇博客为:通过脚本自动打成apk,因为是个懒人,所以这里不对ant脚本作分析,如果感兴趣的朋友可以baidu下,有很多前辈写了很多文章,当时小弟也是根据这些文件搞出来的,这里说实话更多也只是为了记录下,怕以后忘记,记性不好没办法.....
build.xml
<?xml version="1.0" encoding="UTF-8"?><project name="iWifi" default="zipalign" basedir="."> <property name="password" value="12345678"/> <!-- environment of the system --> <property environment="env"/><property name="env.ANDROID_HOME" value="D:\flow\adt-bundle-windows-x86-20130219\sdk"/> <property name="env.JAVA_HOME" value="C:\Program Files (x86)\Java\jdk1.6.0_39"/> <!-- current time --> <tstamp> <format property="today" pattern="yyMMdd_hhmmss"/> </tstamp> <property name="dir.android_home" value="${env.ANDROID_HOME}"/> <property name="dir.java_home" value="${env.JAVA_HOME}"/> <!-- relative dir of android sdk --> <property name="dir.tools" value="${dir.android_home}/tools"/> <property name="dir.platform" value="${dir.android_home}/platforms/android-17"/> <property name="dir.platform_tools" value="${dir.android_home}/platform-tools"/> <property name="lib.android" value="${dir.platform}/android.jar"/> <property name="android.framework" value="${dir.platform}/framework.aidl"/> <!-- command tools in android sdk --> <property name="aapt" value="${dir.platform_tools}/aapt"/> <property name="aidl" value="${dir.platform_tools}/aidl"/> <property name="adb" value="${dir.platform_tools}/adb"/> <property name="zipalign" value="${dir.tools}/zipalign"/> <condition property="dx" value="${dir.platform_tools}/dx.bat" else="${dir.platform_tools}/dx"> <os family="windows" /> </condition> <condition property="apk-builder" value="${dir.tools}/apkbuilder.bat" else="${dir.tools}/apkbuilder"> <os family="windows" /> </condition> <condition property="jarsigner" value="${dir.java_home}/bin/jarsigner.exe" else="${dir.java_home}/bin/jarsigner"> <os family="windows" /> </condition> <!-- relative dir of our project --> <property name="dir.src" value="${basedir}/src"/> <property name="dir.assets" value="${basedir}/assets"/> <property name="dir.res" value="${basedir}/res"/> <property name="dir.gen" value="$basedir}/gen"/> <property name="file.manifest" value="${basedir}/AndroidManifest.xml"/> <property name="external-jars" value="${basedir}/libs"/> <!-- dex file name --> <property name="file.dex" value="classes.dex"/> <property name="file.resource" value="resources.ap_"/> <!-- the output dir --> <property name="dir.target" value="${basedir}/bin"/> <property name="dir.target_classes" value="${dir.target}/classes"/> <property name="dir.target_dex" value="${dir.target}/${file.dex}"/> <property name="dir.target_resource" value="${dir.target}/${file.resource}"/> <property name="dir.target_debug" value="${dir.target}/debug"/> <property name="dir.target_release" value="${dir.target}/release"/> <property name="file.apk_debug" value="${dir.target_debug}/${ant.project.name}_${today}.apk"/> <property name="file.apk_unsign_release" value="${dir.target_release}/${ant.project.name}_unsign_${today}.apk"/> <property name="file.apk_release" value="${dir.target_release}/${ant.project.name}s.apk"/> <!-- the signed release which use zipalign tool to optimized --> <property name="file.apk_zipalign" value="${dir.target_release}/${ant.project.name}.apk"/> <target name="clean"> <delete dir="${dir.target}"/> <delete dir="${dir.target_classes}"/> <delete dir="${dir.target_debug}"/> <delete dir="${dir.target_release}"/> </target> <!-- init --> <target name="init" depends="clean"> <mkdir dir="${dir.target}"/> <mkdir dir="${dir.target_classes}"/> <mkdir dir="${dir.target_debug}"/> <mkdir dir="${dir.target_release}"/> </target> <!-- generate apk file for the project --> <target name="compile" depends="init"> <!-- Generate the R.java file for this project's resources. --> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-m" /> <arg value="-J" /> <arg value="${dir.src}" /> <arg value="-M" /> <arg value="${file.manifest}" /> <arg value="-S" /> <arg value="${dir.res}" /> <arg value="-I" /> <arg value="${lib.android}" /> </exec> <!-- Generate java classes from .aidl files. --> <apply executable="${aidl}" failonerror="true"> <arg value="-p${android.framework}" /> <arg value="-I${dir.src}" /> <fileset dir="${dir.src}"> <include name="**/*.aidl" /> </fileset> </apply> <!-- Compile this project's .java files into .class files. --> <javac encoding="GBK" target="1.6" debug="true" extdirs="" srcdir="${dir.src}" destdir="${dir.target_classes}" bootclasspath="${lib.android}"> <classpath> <fileset dir="${external-jars}" includes="*.jar" /> </classpath> </javac> <!-- Convert this project's .class files into .dex files. --> <apply executable="${dx}" failonerror="true" parallel="true"> <arg value="--dex" /> <arg value="--output=${dir.target_dex}" /> <arg path="${dir.target_classes}" /> <fileset dir="${external-jars}" includes="*.jar" /> </apply> <!-- Put the project's resources into the output package file. --> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="${dir.res}" /> <arg value="-A" /> <arg value="${dir.assets}" /> <arg value="-I" /> <arg value="${lib.android}" /> <arg value="-F" /> <arg value="${dir.target_resource}"/> </exec> </target> <!-- Package the application and sign it with a debug key. This is the default target when building. It is used for debug. --> <target name="debug" depends="compile"> <exec executable="${apk-builder}" failonerror="true"> <arg value="${file.apk_debug}" /> <arg value="-z" /> <arg value="${dir.target_resource}" /> <arg value="-f" /> <arg value="${dir.target_dex}" /> <arg value="-rf" /> <arg value="${dir.src}" /> <arg value="-rj" /> <arg value="${external-jars}" /> </exec> </target> <!-- Package the application without signing it. This allows for the application to be signed later with an official publishing key. --> <target name="unsign-release" depends="compile"> <exec executable="${apk-builder}" failonerror="true"> <arg value="${file.apk_unsign_release}" /> <arg value="-u" /> <arg value="-z" /> <arg value="${dir.target_resource}" /> <arg value="-f" /> <arg value="${dir.target_dex}" /> <arg value="-rf" /> <arg value="${dir.src}" /> <arg value="-rj"/> <arg value="${external-jars}"/> </exec> </target> <!-- sign the apk --> <!-- use the command below to generate the android.keystore file: "keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore" --> <target name="jarsigner" depends="unsign-release"> <exec executable="${jarsigner}" failonerror="true"> <arg value="-verbose" /> <arg value="-storepass" /> <arg value="${password}" /> <arg value="-keystore" /> <arg value="android.keystore" /> <arg value="-signedjar" /> <arg value="${file.apk_release}" /> <arg value="${file.apk_unsign_release}" /> <arg value="android.keystore" /> </exec> </target> <!-- optimize --> <target name="zipalign" depends="jarsigner"> <exec executable="${zipalign}" failonerror="true"> <arg value="-v" /> <arg value="-f" /> <arg value="4" /> <arg value="${file.apk_release}" /> <arg value="${file.apk_zipalign}" /> </exec> <!-- delete unsigned apk and unoptimized apk --> <delete file="${file.apk_unsign_release}"/> <delete file="${file.apk_release}"/> </target></project>需要做两处修改:
1.修改property name="env.ANDROID_HOME"和property name="env.JAVA_HOME",分别对应android的SDK路径和java的SDK路径;
2.需要生成key.store文件,如何生成同样baidu,步骤都很详细;
build.bat
if defined ANT_HOME goto BUILDset ANT_HOME=..\apache-ant-1.9.4set path=%path%;%ANT_HOME%\bin:BUILDant.bat -buildfile build.xml
0 0
- 一键编译之通过脚本自动打成apk
- Android 项目编译过程【Android脚本自动发布APK提测】
- 2015_12_15 cocos 一键盘脚本编译apk
- 自动卸载安装apk脚本
- MoSync 自动打包apk 脚本
- Ubuntu-Linux环境下通过命令搭建android环境 通多ant脚本自动打包apk
- 自动编译脚本
- Xcode自动编译脚本
- eclipse不能自动编译APK
- ant 自动编译 android apk
- eclipse不能自动编译APK
- LNMP一键自动安装脚本
- bat - 通过adb批量安装apk脚本
- 通过Python脚本读取apk信息
- 通过NotificationManager一键更新下载apk安装包
- Python脚本实现自动下载apk文件
- MySQL5.6一键编译安装脚本
- Appium基础篇3-第一个appium自动化脚本之自动安装apk包到手机
- XML与HTML
- hdu 3401 单调队列+DP
- (每日算法)Leetcode--Simplify Path (简单路径)
- 解决maven项目中出Build path is incomplete. Cannot find class file for org/apache/ibatis/session/SqlSession
- = =与equals的区别
- 一键编译之通过脚本自动打成apk
- 开通C博的第一篇文章
- 题目1010:A + B
- Eclipse中操作Hive、HDFS时的jar包列表
- Ubuntu如何更换软件源
- VF 动态规划系列dp入门
- 回溯法-作业调度
- uva 104(dp)
- Android之Service的用法