找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7098|回复: 1
打印 上一主题 下一主题
收起左侧

linux下完全命令行搭建android开发环境和开发编译过程

[复制链接]
跳转到指定楼层
楼主
ID:51773 发表于 2013-8-9 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 为密钥别名                                                                                            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:90534 发表于 2015-9-19 16:33 | 只看该作者
我输入dx --dex --output=/home/sunnyhuang/Hello/bin/classes.dex /home/sunnyhuang/Hello/bin/com/example/hellojni/这样的代码报错。错误内容是/usr/bin/dx : unrecognized parameter:  [1] (use -help to get usage information)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表