用命令行编译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文件。

相关推荐