文档章节

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

我勒个去真烦人
 我勒个去真烦人
发布于 2014/02/20 14:59
字数 2243
阅读 3712
收藏 0

        关于在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:~$ sshexceljava@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 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文件,内容如下:
            <?xmlversion="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>
   </natures>
</projectDescription>

      最后,你就打开你的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
 
出现时间错误:修改系统时间到你上次编译的那一天就可以了。
 
 
 
 

 

© 著作权归作者所有

我勒个去真烦人
粉丝 1
博文 1
码字总数 2243
作品 0
武汉
私信 提问
Android AOSP基础(四)Source Insight和Android Studio导入系统源码

本文首发于微信公众号「刘望舒」 相关系列文章 Android系统启动系列 应用进程启动系列 Android深入四大组件系列 Android深入理解Context系列 Android深入理解JNI系列 Android解析WindowManag...

刘望舒
05/15
0
0
Ubuntu环境下 Android平台源码的下载及编译

本文介绍Ubuntu环境下Android源码下载及编译方法,Android源码是什么?Android源码就是指Android平台和软件源 码,不单指Linux内核Kernel,我们常说的Linux Kernel在这个Open source project...

andy_android
2011/12/06
886
2
移植并定制自己的Android

主要分享在Devkit8500板子上移植并定制自己的Android 首先,入手这个板子的时候,可以看看Devkit8500的配件包,它自带了一些额外的数据线或者小设备,其中最最要的是找到里面的DVD光盘,里面...

wangxigui
2013/09/10
1K
0
CyanogenMod源码下载和编译(Android ROM定制基础篇)

转载一个哥们的教程,内容我做了一定修正,供自己和大家查阅: 本来想下载Android官方源代码,没想到android.git.kernel.org维护,不能访问,非常遗憾,并因此还郁闷了几天。 后来转投MIUI,...

枫影Xda
2011/10/23
5.3K
6
如何在 Ubuntu 9.10 下编译 Android 源码[简单可靠]

========================================== 如何在 Ubuntu 9.10 下编译 Android 源码 ========================================== 问题:Ubuntu 升级为 9.10, 后 Android 源码无法编译通过......

曾赛
2010/02/26
4.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部