用命令行编译APK(中文版)
一:首先必须配置jvm的path,sdk的path(这样运行各种可执行文件时就不必显示的添加可执行文件的路径了,如javac,aapt等)。
vim~/.bashrc
根据自己软件的安装情况在.bashrc文件的末行添加如下:
exportJAVA_HOME=/usr/lib/jvm/default-java:/usr/lib/jvm/java-6-openjdk
exportPATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:JAVA_HOME/lib.tools.jar
exportJAVA_HOMECLASSPATHPATH
exportPATH=${PATH}:/home/huangqin/android-sdks/platform-tools
exportPATH=${PATH}:/home/huangqin/android-sdks/tools
exportPATH=~/bin:$PATH
二:进入上层应用的根目录。如:
cd~/android-sdks/samples/android-15/WiFiDirectDemo
三:使用aapt生成R.java类文件
aaptpackage-f-m-Jgen/-Sres-I../../../platforms/android-14/android.jar-MAndroidManifest.xml
其中:-f-m-Jgen/代表按覆盖的形式在gen目录下生成带包路径的R.java,-Sres指定资源文件,-I../../../platforms/android-14/android.jar指定使用的android类,-MAndroidManifest.xml指定程序的配置文件。
四:2使用androidSDK提供的aidl.exe把.aidl转成.java文件。
usage:aidlOPTIONSINPUT[OUTPUT]
aidl--preprocessOUTPUTINPUT...
OPTIONS:
-I<DIR>searchpathforimportstatements.
-d<FILE>generatedependencyfile.
-p<FILE>filecreatedby--preprocesstoimport.
-o<FOLDER>baseoutputfolderforgeneratedfiles.
-bfailwhentryingtocompileaparcelable.
INPUT:
Anaidlinterfacefile.
OUTPUT:
Thegeneratedinterfacefiles.
五:编译.java类文件生成class文件。
javac-encodingGB18030-target1.6-bootclasspath../../../platforms/android-14/android.jar-dbinsrc/com/example/android/wifidirect/*.javagen/com/example/android/wifidirect/R.java
其中-target1.6为jdk的版本号
附:javac用法
用法:javac<选项><源文件>
其中,可能的选项包括:
-g生成所有调试信息
-g:none不生成任何调试信息
-g:{lines,vars,source}只生成某些调试信息
-nowarn不生成任何警告
-verbose输出有关编译器正在执行的操作的消息
-deprecation输出使用已过时的API的源位置
-classpath<路径>指定查找用户类文件和注释处理程序的位置
-cp<路径>指定查找用户类文件和注释处理程序的位置
-sourcepath<路径>指定查找输入源文件的位置
-bootclasspath<路径>覆盖引导类文件的位置
-extdirs<目录>覆盖安装的扩展目录的位置
-endorseddirs<目录>覆盖签名的标准路径的位置
-proc:{none,only}控制是否执行注释处理和/或编译。
-processor<class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认的搜索进程
-processorpath<路径>指定查找注释处理程序的位置
-d<目录>指定存放生成的类文件的位置
-s<目录>指定存放生成的源文件的位置
-implicit:{none,class}指定是否为隐式引用文件生成类文件
-encoding<编码>指定源文件使用的字符编码
-source<版本>提供与指定版本的源兼容性
-target<版本>生成特定VM版本的类文件
-version版本信息
-help输出标准选项的提要
-Akey[=value]传递给注释处理程序的选项
-X输出非标准选项的提要
-J<标志>直接将<标志>传递给运行时系统
-WerrorTerminatecompilationifwarningsoccur
六:使用androidSDK提供的dx.bat命令行脚本生成classes.dex文件。
dx--dex--output=bin/classes.dexbin/classes
其中classes.dex为生成的目标文件,bin/classes为class文件所在目录。
七:使用AndroidSDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)
aaptpackage-f-MAndroidManifest.xml-Sres-Aassets-I../../../platforms/android-14/android.jar-Fbin/WifiDirectDemo
将AndroidManifest.xml,res和assets文件夹中的资源文件打包生成WifiDirectDemo
八:生成未签名的apk安装文件。
apkbuilderWifiDirectDemo.apk-v-u-zbin/WifiDirectDemo-fbin/classes.dex-rfsrc/
其中:WifiDirectDemo.apk为生成的apk,-zbin/WifiDirectDemo为资源包,bin/classes.dex为类文件包
详细信息:
THISTOOLISDEPRECATED.See--helpformoreinformation.
PackagingWifiDirectDemo.apk
bin/WifiDirectDemo:
=>assets/sample_file.txt
=>res/drawable/details_view.xml
=>res/drawable/machine.png
=>res/drawable/section_header.xml
=>res/layout/device_detail.xml
=>res/layout/device_list.xml
=>res/layout/main.xml
=>res/layout/row_devices.xml
=>res/menu/action_items.xml
=>AndroidManifest.xml
=>resources.arsc
=>res/drawable-hdpi/ic_action_discover.png
=>res/drawable-hdpi/ic_action_on_off.png
=>res/drawable-hdpi/ic_launcher.png
=>res/drawable-hdpi/icon.png
=>res/drawable-ldpi/ic_action_discover.png
=>res/drawable-ldpi/ic_action_on_off.png
=>res/drawable-ldpi/ic_launcher.png
=>res/drawable-ldpi/icon.png
=>res/drawable-mdpi/ic_action_discover.png
=>res/drawable-mdpi/ic_action_on_off.png
=>res/drawable-mdpi/ic_launcher.png
=>res/drawable-mdpi/icon.png
=>res/drawable-xhdpi/ic_action_discover.png
=>res/drawable-xhdpi/ic_action_on_off.png
=>res/drawable-xhdpi/ic_launcher.png
=>res/layout-land/main.xml
=>res/layout-large/main.xml
bin/classes.dex=>classes.dex
九:使用jdk的jarsigner对未签名的包进行apk签名。
十:编写共用的.sh文件。