关于在ubuntu中修改Android源码的一些细节

1.关于配置VMware,网上有一大堆的方法,这里就不详述了,我现在用的源码是4.0.3的。要想改源码,你需要以下基本的东西:
推荐配置:
OS
Ubuntu 11.04 64bit

Gcc
4.5.2(在ubuntu自带的软件搜索里面找来安装:应用程序->ubuntu软件中心->搜索 the gun C compiler)

JDK
1.6.0(官网下载linux版本的jdk1.6版本)

Perl
5.10.0(一般都装上的)

Python
2.7.1(一般都装上的)

Make
3.81

安装jdk的方法如下:
1.切换到Root用户下:
命令: surootroot su root

2.跳到你存放jdk的目录,即你在官网下载的linux版本的jdk.bin文件所在根目录:
命令:./jdk--.bin (*代表你自己的jdk版本对应的东西)

3.此时你可能还是没有文件权限:
命令:chmod 777 jdk--.bin
然后再执行第2步,看到press Enter to continue。。。。
Done。
表示你安装成功了。你可以通过命令:ls 查看安装信息

在这里呢,配置jdk比较麻烦,因为ubuntu自带很多关于jdk的文件,我们必须把自己装的jdk设置为默认jdk,有两种办法:
a.每次在编译源码之前,执行以下命令(立即生效):

export JAVA_HOME=/home/ykb/jdk1.6.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 

b.修改配置文件:
执行

sudo gedit /etc/profile 命令,然后会打开一个配置文件,在最后面加上a方法里的4个命令,然后保存,重启ubuntu生效。

执行java -version 查看默认jdk信息。
接下来你就可以使用Ecplise了。

注意:虽然我们修改配置文件后把全局的默认jdk设成了我们自己的,但是有时候编译源码,总是会提示找不到jdk,那就只能再次执行a方法再make了,具体原因,我这菜鸟也不清楚。

  1. 编译整个源码的步骤和命令:
    a.在此之前呢,我们应该要得到源码,当然你也可以用ubuntu自带的火Firefox去下载源码,不过。。。。。那速度,你会抓狂的。
    所以一般我们都是在windows下面弄到源码,通过共享目录来实现windows和VMware之间实现文件交换的。关于这点,推荐大去看 我同事的这篇博客:http://sunjilife.blog.51cto.com/3430901/1181223,我相信你会很快配置好的。

还有就是用SSH,关于这个,看下面:

ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。判断是否安装ssh服务,可以通过如下命令进行:

xjj@xjj-desktop:~$ ssh localhost

ssh: connect to host localhost port 22: Connection refused

如上所示,表示没有还没有安装,可以通过apt安装,命令如下:

-desktop:~$ sudo apt-get install openssh-server

xjj@xjj-desktop:~$ sudo apt-get install openssh-server

系统将自动进行安装,安装完成以后,先启动服务:

@xjj-desktop:~$ sudo /etc/init.d/ssh start

xjj@xjj-desktop:~$ sudo /etc/init.d/ssh start

启动后,可以通过如下命令查看服务是否正确启动

@xjj-desktop:~$ ps -e|grep ssh

6212 ? 00:00:00 sshd

xjj@xjj-desktop:~$ ps -e|grep ssh 6212 ? 00:00:00 sshd

如上表示启动ok。注意,ssh默认的端口是22,可以更改端口,更改后先stop,

然后start就可以了。改配置在/etc/ssh/sshd_config下,如下所示。

xjj@xjj-desktop:~$ vi /etc/ssh/sshd_config

Package generated configuration file

See the sshd(8) manpage for details

What ports, IPs and protocols we listen for

Port 22

Package generated configuration file

See the sshd(8) manpage for details

What ports, IPs and protocols we listen for

Port 22

最后,应该是连接的时候了。请看如下命令:

xjj@xjj-desktop:~$ ssh exceljava@192.168.158.129

xjj@xjj-desktop:~$ vi /etc/ssh/sshd_config

然后在你下载好的SSH软件里点击quick connect 设置好IP 、端口等等,你就可以共享两个系统间的目录了。

b.说了这么多 ,就是为了得到安卓的源码,应该是个压缩包吧,我建议就不用命令解压了,在ubuntu根目录创建一个文件夹,直接解压,你的源码就出来了,接着,就是编译整个源码了:

1.将文件包在linux环境下解压,注意不要直接挂载windows分区解压,Windows分区不区分大小写,解压会引起出错
2.解压缩k218.tar.gz,命令为sudo tar -xvf k218.tar.gz(可以直接手动解压)
3.解压完成后配置环境,执行解压出来的idh.code文件夹下的set_env.sh
命令为: . ./set_env.sh (. set_env.sh)
4.使用make开始编译,命令为 make

5.若是编译提示 could not find tools.jar并且又已经安装了jdk,则执行下面的命令

export JAVA_HOME=/home/ykb/jdk1.6.0_45
export JRE_HOME= JAVAHOME/jreexportCLASSPATH= JAVA_HOME/lib: JREHOME/lib: CLASSPATH
export PATH= JAVAHOME/bin: JRE_HOME/bin:$PATH

再执行make

注意若是存在权限问题时使用命令:
chmod -R 777 /home/mypackage
那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777.
777是读、写、执行权限…

若是存在用户组的问题,找不到组或者找不到用户则使用以下命令

sudo chown -R ykb:ykb ./* sudo chown -R 组id:用户id 要修改的文件或文件夹

chown是指更改用户组命令-R指的是当前所在文件夹及其子文件夹,子文件;这里将./*下面的所有文件和文件夹的所有者改为ykb组下ykb用户所有

到此,你就要祈祷你的电脑了,因为根据电脑性能不同,有时候可能会编译一整天!!!

3.在ubuntu中把Android源码导入到Ecplise里
@ 首先呢,去你的源码根目录,找到developement/ide/ecplise目录下的.classpath文件,这个文件可能是隐藏的,你要在工具栏里打开<显示隐藏的文件和文件夹>选项,然后copy这个.classpath文件到你源码的根目录;

@ 然后呢,自己在源码根目录创建一个.project文件,内容如下:
        <?xml version="1.0" encoding="UTF-8"?>
         <projectDescription>
         <name>Android4.2</name>//这个地方的名字和你的源码版本一致吧,我也试过改随便的,貌似没影响。其他地方别动
         <comment></comment>
         <projects>
         </projects>
         <buildSpec>
     <buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
     <arguments>
    </arguments>
    </buildCommand>
    </buildSpec>
  <natures>
<nature>org.eclipse.jdt.core.javanature</nature>


 @ 最后呢,你就打开你的Ecplise,新建一个java工程,是java,不是android,选择从已有工程建立,指定你源码的根目录路径,这样,基本上你的工程是没什么错误的,当然,如果你没先搭载安卓环境,代码里还是会报小红叉,因为R文件找不到,但这不影响我们修改源码,修改好源码后,我们用命令编译后,那些错误就会消失啦。如果你配置了ADT+AVD,你就可以用DDMS模式调试你修改的源码了。

4.编译单独的一部分APP源码
Android系统源码本身就是很多APP系统的组合起来的,有时候我们修改了一部分代码,就没必要去编译整个源码,只需要编译我们改动的部分就可以了,看下面:

Android源码目录下的build/envsetup.sh文件,描述编译的命令

  • m: Makes from the top of the tree.
  • mm: Builds all of the modules in the current directory.
  • mmm: Builds all of the modules in the supplied directories.

要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境

m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件

下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:

1、. build/envsetup.sh (.后面有空格)
2、mmm hardware/libhardware_legacy/power/

或者 :

1、. build/envsetup.sh
2、cd hardware/libhardware_legacy/power/

3、mm

=====================================我割======================================

关于源码的编译,我大致就了解这么多,这其中还有许多问题,比如编译单独的APP部分,生成的xxTests.apk文件,想放到手机上运行,却总是说文件不完整,在网上google和百度再加上360,都只有一位大神说了个方法,不过我没成功,希望有大神能搞懂,早日分享出来。关于大神的处理方法,大家请看链接:http://blog.csdn.net/hxdanya/article/details/7564190

还有就是编译出现:“all 没有什么可以为的”错误,可以使用以下命令:
1,source ./build/envsetup.sh

2, lunch 10

3, touch package/apps/Settings(更新)

4,mmm packages/apps/Settings

出现时间错误:修改系统时间到你上次编译的那一天就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值