关于在Ubuntu中修改Android源码的一些总结

1.关于配置VMware,网上有一大堆的方法,这里就不详述了,我现在用的源码是4.0.3的。要想改源码,你需要以下基本的东西: 
推荐配置: 
OS 
Ubuntu 11.04 64bit
Gcc 
4.5.2(在ubuntu自带的软件搜索里面找来安装:应用程序->ubuntu软件中心->搜索 the gun Ccompiler)
JDK 
1.6.0(官网下载linux版本的jdk1.6版本)
Perl 
5.10.0(一般都装上的)
Python 
2.7.1(一般都装上的)
Make 
3.81  

安装jdk的方法如下:
   1.切换到Root用户下:
 命令:$su root
 如果不是root用户,就会制定密码,再执行命令:$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.每次在编译源码之前,执行以下命令(立即生效):
    exportJAVA_HOME=/home/ykb/jdk1.6.0_45
    export JRE_HOME=$JAVA_HOME/jre
    exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 
b.修改配置文件:
执行
sudo gedit /etc/profile命令,然后会打开一个配置文件,在最后面加上a方法里的4个命令,然后保存,重启ubuntu生效。
执行java -version查看默认jdk信息。
接下来你就可以使用Ecplise了。
注意:虽然我们修改配置文件后把全局的默认jdk设成了我们自己的,但是有时候编译源码,总是会提示找不到jdk,那就只能再次执行a方法再make了,具体原因,我这菜鸟也不清楚。 
 
2. 编译整个源码的步骤和命令:
    a.在此之前呢,我们应该要得到源码,当然你也可以用ubuntu自带的火Firefox去下载源码,不过。。。。。那速度,你会抓狂的。
    所以一般我们都是在windows下面弄到源码,通过共享目录来实现windows和VMware之间实现文件交换的。关于这点,推荐大去看     我同事的这篇博客:http://sunjilife.blog.51cto.com/3430901/1181223我相信你会很快配置好的。

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

ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。判断是否安装ssh服务,可以通过如下命令进行:
xjj@xjj-desktop:~$ sshlocalhost
ssh: connect to host localhost port 22: Connectionrefused
如上所示,表示没有还没有安装,可以通过apt安装,命令如下:
-desktop:~$ sudo apt-get installopenssh-server  
xjj@xjj-desktop:~$ sudo apt-get installopenssh-server
系统将自动进行安装,安装完成以后,先启动服务:
@xjj-desktop:~$ sudo /etc/init.d/sshstart  
xjj@xjj-desktop:~$ sudo /etc/init.d/sshstart
启动后,可以通过如下命令查看服务是否正确启动
@xjj-desktop:~$ ps -e|grepssh   
6212 ?       00:00:00sshd  
xjj@xjj-desktop:~$ ps -e|grep ssh 6212 ? 00:00:00sshd
如上表示启动ok。注意,ssh默认的端口是22,可以更改端口,更改后先stop,
然后start就可以了。改配置在/etc/ssh/sshd_config下,如下所示。
xjj@xjj-desktop:~$ vi/etc/ssh/sshd_config   
# Package generated configurationfile   
# See the sshd(8) manpage fordetails   
# What ports, IPs and protocols we listenfor  
Port22  
# Package generated configurationfile
# See the sshd(8) manpage fordetails
# What ports, IPs and protocols we listenfor
Port22
最后,应该是连接的时候了。请看如下命令:
xjj@xjj-desktop:~$ [email protected]  
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 findtools.jar并且又已经安装了jdk,则执行下面的命令
export JAVA_HOME=/home/ykb/jdk1.6.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/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文件,内容如下:
            
            
            Android4.2//这个地方的名字和你的源码版本一致吧,我也试过改随便的,貌似没影响。其他地方别动
             
            
            

            
        
   org.eclipse.jdt.core.javabuilder
        
       

       

       

     
   org.eclipse.jdt.core.javanature
  



       最后,你就打开你的Ecplise,新建一个java工程,是java,不是android,选择从已有工程建立,指定你源码的根目录路径,这样,基本上你的工程是没什么错误的,当然,如果你没先搭载安卓环境,代码里还是会报小红叉,因为R文件找不到,但这不影响我们修改源码,修改好源码后,我们用命令编译后,那些错误就会消失啦。如果你配置了ADT+AVD,你就可以用DDMS模式调试你修改的源码了。
 
 4.编译单独的一部分APP源码 
      Android系统源码本身就是很多APP系统的组合起来的,有时候我们修改了一部分代码,就没必要去编译整个源码,只需要编译我们改动的部分就可以了,看下面:

 Android源码目录下的build/envsetup.sh文件,描述编译的命令
-m:       Makes from the top of thetree.
- mm:      Builds all of the modules inthe current directory.
- mmm:     Builds all of the modules in thesupplied 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, lunch10
3, touchpackage/apps/Settings(更新)
4,mmmpackages/apps/Settings
  
出现时间错误:修改系统时间到你上次编译的那一天就可以了。

你可能感兴趣的:(android)