用命令行编译APK(中文版)

一:首先必须配置jvm的path,sdk的path(这样运行各种可执行文件时就不必显示的添加可执行文件的路径了,如javac,aapt等)。
vim ~/.bashrc
根据自己软件的安装情况在.bashrc文件的末行添加如下:
export JAVA_HOME=/usr/lib/jvm/default-java:/usr/lib/jvm/java-6-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:JAVA_HOME/lib.tools.jar
export JAVA_HOME CLASSPATH PATH
export PATH=${PATH}:/home/huangqin/android-sdks/platform-tools
export PATH=${PATH}:/home/huangqin/android-sdks/tools
export PATH=~/bin:$PATH

二:进入上层应用的根目录。如:
cd ~/android-sdks/samples/android-15/WiFiDirectDemo

三:使用aapt生成R.java类文件
aapt package -f -m -J gen/ -S res -I ../../../platforms/android-14/android.jar -M AndroidManifest.xml
其中:-f -m -J gen/代表按覆盖的形式在gen目录下生成带包路径的R.java,-S res指定资源文件 ,-I ../../../platforms/android-14/android.jar指定使用的android类,-M AndroidManifest.xml指定程序的配置文件。

四:2使用android SDK提供的aidl.exe把.aidl转成.java文件。
usage: aidl OPTIONS INPUT [OUTPUT]
       aidl --preprocess OUTPUT INPUT...


OPTIONS:
   -I<DIR>    search path for import statements.
   -d<FILE>   generate dependency file.
   -p<FILE>   file created by --preprocess to import.
   -o<FOLDER> base output folder for generated files.
   -b         fail when trying to compile a parcelable.

INPUT:
   An aidl interface file.

OUTPUT:
   The generated interface files.


五:编译.java类文件生成class文件。
javac -encoding GB18030 -target 1.6  -bootclasspath ../../../platforms/android-14/android.jar -d bin src/com/example/android/wifidirect/*.java gen/com/example/android/wifidirect/R.java
其中-target 1.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<标志>                     直接将 <标志> 传递给运行时系统
  -Werror                    Terminate compilation if warnings occur


六:使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。
dx --dex --output=bin/classes.dex bin/classes
其中classes.dex为生成的目标文件,bin/classes为class文件所在目录。

七:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)
aapt package -f -M AndroidManifest.xml -S res -A assets -I ../../../platforms/android-14/android.jar  -F bin/WifiDirectDemo
将AndroidManifest.xml,res和assets文件夹中的资源文件打包生成WifiDirectDemo

八:生成未签名的apk安装文件。
apkbuilder WifiDirectDemo.apk -v -u -z bin/WifiDirectDemo -f bin/classes.dex -rf src/
其中:WifiDirectDemo.apk为生成的apk ,-z bin/WifiDirectDemo为资源包,bin/classes.dex为类文件包

详细信息:
THIS TOOL IS DEPRECATED. See --help for more information.

Packaging WifiDirectDemo.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文件。

猜你喜欢

转载自jasonshieh.iteye.com/blog/1635085