linux下完全命令行搭建android開發環境和開發編譯過程
author: 布智道
date: 2010.08.19
參考網上別人的經驗加上自己的一點點探索,得出了此文.
現在只是完成了開發環境和編譯打包,調試還要繼續探索.
以下所有的測試都是在ubuntu 9.10上操作
當然相信其它版本也可以
ubuntu和debian應該可以直接按以下的操作進行
redhat或centos可能在安裝java sdk時有所不同
而ms windows下可能除了安裝java sdk, android sdk, android tools不同外
還要注意目錄名'/'改為'\'
0, sudo apt-get install sun-java6-jdk
1, download sdk and tools
wget https://dl-ssl.google.com/android/repository/tools_r06-linux.zip
wget https://dl-ssl.google.com/android/repository/android-1.5_r04-linux.zip
2, install sdk and tools
cd /opt
unzip android-1.5_r04-linux.zip
unzip tools_r06-linux.zip
3, fixed apkbuilder bug for me (我自己修改的)
edit file /opt/tools_r06-linux/apkbuilder
append follow content into line 49
###### append begin ######
if [ ! -r "$frameworkdir/$jarfile" ]
then
progdir="$0"
frameworkdir=`dirname "$progdir"`/lib
libdir=`dirname "$progdir"`/lib
fi
###### append end ######
4, 處理環境變量
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:${CLASSPATH}
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export
PATH=${PATH}:${JAVA_PATH}:/opt/android-1.5_r04-linux/tools:/opt/tools_r06-linux
5, 以下以android sdk里的HelloActivity為例子介紹
cd android-1.5_r04-linux/samples/HelloActivity
mkdir bin
mkdir assets
mkdir -p gen/com/example/android/helloactivity
6, 使用aapt命令生成R.java類文件:
例:
aapt package \
-f -m -J gen \
-S res \
-I /opt/android-1.5_r04-linux/android.jar \
-M `pwd`/AndroidManifest.xml
其中
-f -m -J gen 代表按覆蓋的形式在gen目錄下生成帶包路徑的R.java
-S res 指定資源文件
-I android.jar 指定使用的android
-M AndroidManifest.xml 指定程序的配置文件
7, 使用aidl命令把.aidl轉成.java文件 (沒有.aidl文件則跳過)
aidl -p${android-framework} -I${srcdir} dir="${srcdir} **/*.aidl
8, 編譯.java類文件生成class文件:
例:
javac -encoding GB18030 \
-target 1.5 \
-bootclasspath /opt/android-1.5_r04-linux/android.jar \
-d bin \
src/com/example/android/helloactivity/*.java \
gen/com/example/android/helloactivity/R.java
9, 使用dx命令行腳本生成classes.dex文件:
例:
dx --dex --output=bin/classes.dex bin
其中
classes.dex為生成的目標文件
bin為class文件所在目錄
10, 使用aapt生成資源包文件(包括res、assets、androidmanifest.xml等):
例:
aapt package -f -M AndroidManifest.xml \
-S res \
-A assets \
-I /opt/android-1.5_r04-linux/android.jar \
-F bin/resources.ap_
將AndroidManifest.xml,res和assets文件夾中的資源文件打包生成resources.ap_
11, 使用apkbuilder命令生成未簽名的apk安裝文件:
apkbuilder ${output.apk.file} \
-u -z ${packagedresource.file} \
-f ${dex.file} \
-rf ${source.dir} \
-rj ${libraries.dir}
例:
/home/pxw/Public/tools_r06-linux/apkbuilder bin/hello.apk \
-v -u -z bin/resources.ap_ \
-f bin/classes.dex \
-rf src
其中
bin/hello.apk 為生成的apk
-z bin/resources.ap_ 為資源包
bin/class.dex 為類文件包
12, 使用jdk的keytool生成證書(密鑰)
keytool -genkey \
-alias android.keystore \
-keyalg RSA \
-validity 365 \
-keystore android.keystore
Enter keystore password:
輸入keystore密碼:[密碼不回顯]
Re-enter new password:
再次輸入新密碼:[密碼不回顯]
What is your first and last name?
您的姓名是什么?
[Unknown]: android
What is the name of your organizational unit?
您的組織單位名稱是什么?
[Unknown]: www.android.com.cn
What is the name of your organization?
您的組織名稱是什么?
[Unknown]: www.android.com.cn
What is the name of your City or Locality?
您所在的城市或區域名稱是什么?
[Unknown]: ShenZhen
What is the name of your State or Province?
您所在的州或省份名稱是什么?
[Unknown]: GuangDong
What is the two-letter country code for this unit?
該單位的兩字母國家代碼是什么
[Unknown]: CN
Is CN=android, OU=www.android.com.cn, O=www.android.com.cn, L=ShenZhen,
ST=GuangDong, C=CN correct?
[no]: yes 正確否, yes
Enter key password for輸入的主密碼
(RETURN if same as keystore password):
(如果和 keystore 密碼相同,按回車):
其中
-validity為證書有效天數
輸入密碼時沒有回顯,只管輸入就可以,一般位數建議使用20位,需要記下來后面
還要用
13, 使用jdk的jarsigner對未簽名的包進行apk簽名:
jarsigner -keystore ${keystore} \
-storepass ${keystore.password} \
-keypass ${keypass} \
-signedjar ${signed.apkfile} \
${unsigned.apkfile} \
${keyalias}
例如:
jarsigner -verbose \
-keystore android.keystore \
-signedjar bin/hello_signed.apk \
bin/hello.apk \
android.keystore
或者:
jarsigner -verbose \
-keystore android.keystore \
-storepass 123456 \
-keypass 123456 \
-signedjar bin/hello_signed.apk \
bin/hello.apk \
android.keystore
其中
–keystore f:\explorer\eclipse3.5\bbyread.keystore 為密鑰文件
-storepass byread002為密鑰文件密碼,和keytool輸入的一樣
-keypass byread002為密鑰別名密碼,和keytool輸入的一樣
-signedjar bin/hello_signed.apk為簽名后生成的apk文件
bin/hello.apk為未簽名的文件
byread 為密鑰別名
|