﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-jessee-文章分类-Android</title><link>http://www.cppblog.com/jessee/category/19507.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 16 Oct 2012 00:31:25 GMT</lastBuildDate><pubDate>Tue, 16 Oct 2012 00:31:25 GMT</pubDate><ttl>60</ttl><item><title>Ubuntu 10.04（64位）下载并编译 Android 2.2 源码[只有11条命令] 转载</title><link>http://www.cppblog.com/jessee/articles/186609.html</link><dc:creator>Jessee</dc:creator><author>Jessee</author><pubDate>Tue, 07 Aug 2012 15:23:00 GMT</pubDate><guid>http://www.cppblog.com/jessee/articles/186609.html</guid><wfw:comment>http://www.cppblog.com/jessee/comments/186609.html</wfw:comment><comments>http://www.cppblog.com/jessee/articles/186609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jessee/comments/commentRss/186609.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jessee/services/trackbacks/186609.html</trackback:ping><description><![CDATA[原文地址:
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.360doc.com/content/10/1118/15/474846_70436251.shtml</span></div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008000; "></span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">为了方便，我把所有操作写成了命令，按顺序（软件安装</span><span style="color: #000000; ">--</span><span style="color: #000000; ">源码下载</span><span style="color: #000000; ">--</span><span style="color: #000000; ">编译）执行成功即可：<br />
</span><span style="color: #000000; ">1</span><span style="color: #000000; ">.&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install&nbsp;git</span><span style="color: #000000; ">-</span><span style="color: #000000; ">core&nbsp;gnupg&nbsp;flex&nbsp;bison&nbsp;gperf&nbsp;build</span><span style="color: #000000; ">-</span><span style="color: #000000; ">essential&nbsp;zip&nbsp;curl&nbsp;zlib1g</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;gcc</span><span style="color: #000000; ">-</span><span style="color: #000000; ">multilib&nbsp;g</span><span style="color: #000000; ">++-</span><span style="color: #000000; ">multilib&nbsp;libc6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i386&nbsp;lib32ncurses5</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;ia32</span><span style="color: #000000; ">-</span><span style="color: #000000; ">libs&nbsp;x11proto</span><span style="color: #000000; ">-</span><span style="color: #000000; ">core</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev libx11</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;lib32readline5</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;lib32z</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;java</span><span style="color: #000000; ">-</span><span style="color: #000000; ">common&nbsp;unixodbc&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">2</span><span style="color: #000000; ">.&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install&nbsp;sun</span><span style="color: #000000; ">-</span><span style="color: #000000; ">java6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jdk&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">3</span><span style="color: #000000; ">.&nbsp;cd&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">4</span><span style="color: #000000; ">.&nbsp;mkdir&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p&nbsp;software</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">5</span><span style="color: #000000; ">.&nbsp;curl&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/repo&nbsp;&gt;software/bin/repo&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">6</span><span style="color: #000000; ">.&nbsp;chmod&nbsp;a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">x&nbsp;software</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">repo&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">7</span><span style="color: #000000; ">.&nbsp;mkdir&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p&nbsp;software</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">8</span><span style="color: #000000; ">.&nbsp;cd&nbsp;software</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">/</span><span style="color: #000000; ">src</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">9</span><span style="color: #000000; ">.&nbsp;repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;-b&nbsp;froyo&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">10</span><span style="color: #000000; ">.&nbsp;repo&nbsp;sync&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000; ">11</span><span style="color: #000000; ">.&nbsp;make&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">j4&nbsp;&nbsp;<br />
<br />
本文叙述了如何从零开始搭建基于Google官方Android&nbsp;</span><span style="color: #000000; ">2.2</span><span style="color: #000000; ">.</span><span style="color: #000000; ">1</span><span style="color: #000000; ">（froyo）源码的开发环境，包括如何下载源代码、编译源代码，以及在模拟器中运行编译生成的镜像。文中开发机是基于Ubuntu&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">.04的，同样适用于其他版本的Ubuntu。现在需要弄清楚一下几点，防止后面出现误操作：&nbsp;下载源代码是用参数：repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;&nbsp;-b&nbsp;&nbsp;froyo&nbsp;（下载的是2.2.1版本，编译环境操作系统必须是32位的，jdk1.5版本的---jdk1.5没有64位版本）。如果是没有带参数的下载源代码，将会下载所有的源代码，编译环境要求：操作系统64位，jdk1.6，（偶是2010年10月15日做）但很有可能会出现交叉编译工具错误：&#8220;&nbsp;/bin/bash:&nbsp;prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc:&nbsp;没有那个文件或目录&nbsp;&#8221;（实际上是有arm-eabi-gcc这个文件的，偶怀疑是版本问题--32位的，而环境要求是64位的&#8212;--&nbsp;下载全部代码）</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">.&nbsp;下载JDK&nbsp;</span><span style="color: #000000; ">1.5</span><span style="color: #000000; ">&nbsp;（不建议此下载方式，防止配置环境参数出错。建议用apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install方式，请跳转到：第4步）<br />
<br />
编译Android源码需要JDK1.5版（主要是需要其中的javadoc），</span><span style="color: #000000; ">1</span><span style="color: #000000; ">.6版是&nbsp;不兼容的。JDK1.5已经停止支持，其最&nbsp;终的版本是JDK&nbsp;</span><span style="color: #000000; ">5.0</span><span style="color: #000000; ">&nbsp;Update&nbsp;</span><span style="color: #000000; ">22</span><span style="color: #000000; ">。<br />
<br />
可从Sun官网上下载：<br />
<br />
http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">java.sun.com/javase/downloads/5u22/jdk</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">3.2</span><span style="color: #000000; ">&nbsp;JDK版本切换<br />
<br />
&nbsp;&nbsp;如果同时需要使用JDK1.6版做应用开发，则系统中将同时存在JDK1.5和JDK1.</span><span style="color: #000000; ">6</span><span style="color: #000000; ">。&nbsp;因此需要实现能够在不同版本间切换。如果不使用JDK1.</span><span style="color: #000000; ">6</span><span style="color: #000000; ">，请做完1.5版&nbsp;的设置后跳至3.3节。<br />
<br />
这里使用update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives命令实现。<br />
<br />
首先为JDK1.5版生成可选配置选项：<br />
<br />
update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">install&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk&nbsp;jdk&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk1.</span><span style="color: #000000; ">5.22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">255</span><span style="color: #000000; ">&nbsp;<br />
<br />
(sudo&nbsp;update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">install&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk&nbsp;jdk&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">home</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ynb</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk1.</span><span style="color: #000000; ">5</span><span style="color: #000000; ">.0_22&nbsp;</span><span style="color: #000000; ">255</span><span style="color: #000000; ">)&nbsp;<br />
<br />
</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk是符号链接，它指&nbsp;向</span><span style="color: #000000; ">/</span><span style="color: #000000; ">etc</span><span style="color: #000000; ">/</span><span style="color: #000000; ">alternatives</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk（由第2个参数&nbsp;给出的），</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk1.</span><span style="color: #000000; ">5.22</span><span style="color: #000000; ">(</span><span style="color: #000000; ">/</span><span style="color: #000000; ">home</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ynb</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk1.</span><span style="color: #000000; ">5</span><span style="color: #000000; ">.0_22)是&nbsp;实际目的链接，255是优先级（任意整数，&nbsp;在automatic&nbsp;mode自动模式&nbsp;时，数字大的优先级较高，被选为默认配置选项）。<br />
<br />
然后再为JDK1.6版生成（如果有JDK1.6的话。不使用JDK1.6的请跳至3.3节）：<br />
<br />
update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">install&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk&nbsp;jdk&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk1.</span><span style="color: #000000; ">6.20</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
<br />
这样，默认jdk版本即为1.5版。&nbsp;需要切换到1.6版时，请使用update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;&#8211;config&nbsp;jdk<br />
<br />
&nbsp;</span><span style="color: #000000; ">3.3</span><span style="color: #000000; ">&nbsp;配置JDK环境变量<br />
<br />
下面开始配置环境变量。<br />
<br />
在终端中执行：sudo&nbsp;gedit&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc<br />
<br />
修改.bashrc文件，添加下面语句：<br />
<br />
#</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;java&nbsp;environment<br />
<br />
export&nbsp;JAVA_HOME</span><span style="color: #000000; ">=/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jdk<br />
<br />
export&nbsp;JRE_HOME</span><span style="color: #000000; ">=</span><span style="color: #000000; ">JAVA_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">jre<br />
<br />
export&nbsp;CLASSPATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$JAVA_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib:$JRE_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib:$CLASSPATH<br />
<br />
export&nbsp;PATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$JAVA_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin:$JRE_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin:$PATH<br />
<br />
该段代码最好设置在文件的尾部。<br />
<br />
保存文件。在终端中执行source&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc<br />
<br />
</span><span style="color: #000000; ">4</span><span style="color: #000000; ">.用apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install方式安装JDK1.</span><span style="color: #000000; ">5</span><span style="color: #000000; ">：<br />
<br />
Android&nbsp;要求的&nbsp;jdk&nbsp;</span><span style="color: #000000; ">1.5</span><span style="color: #000000; ">,而Ubuntu10.4的源里只有JDK1.</span><span style="color: #000000; ">6</span><span style="color: #000000; ">.&nbsp;如果安装了jdk1.6请先卸载：<br />
<br />
$sudo&nbsp;&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;&nbsp;remove&nbsp;&nbsp;remove&nbsp;openjdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jdk<br />
<br />
$sudo&nbsp;&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;&nbsp;remove&nbsp;&nbsp;remove&nbsp;openjdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jre<br />
<br />
$sudo&nbsp;&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;&nbsp;remove&nbsp;&nbsp;remove&nbsp;openjdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jre</span><span style="color: #000000; ">-</span><span style="color: #000000; ">headless<br />
<br />
&nbsp;<br />
<br />
安装jdk1.5目前网上解决方法有两种：<br />
&nbsp;&nbsp;解决方法一(建议)：&nbsp;安装JDK1.</span><span style="color: #000000; ">5</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">）&nbsp;根据官方文档里所说,源代码的编译必须使用JDK5才能编译的了，所以这里偶使用jdk5<br />
&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">）&nbsp;需要先更新源,在终端里执行&nbsp;sudo&nbsp;vim&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">etc</span><span style="color: #000000; ">/</span><span style="color: #000000; ">apt</span><span style="color: #000000; ">/</span><span style="color: #000000; ">sources.list<br />
&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">）&nbsp;在source.list里把以下2行拷贝到文档最后面：　　　&nbsp;&nbsp;<br />
<br />
deb&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">us.archive.ubuntu.com/ubuntu/&nbsp;jaunty&nbsp;multiverse</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
deb</span><span style="color: #000000; ">-</span><span style="color: #000000; ">src&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">us.archive.ubuntu.com/ubuntu/&nbsp;jaunty&nbsp;multiverse</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
deb&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">us.archive.ubuntu.com/ubuntu/&nbsp;jaunty-updates&nbsp;multiverse</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
deb</span><span style="color: #000000; ">-</span><span style="color: #000000; ">src&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">us.archive.ubuntu.com/ubuntu/&nbsp;jaunty-updates&nbsp;multiverse</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
&nbsp;&nbsp;保存退出。<br />
&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">）&nbsp;执行&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;update&nbsp;更新源.<br />
&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">）&nbsp;配置编译环境并下载JDK5：sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install&nbsp;sun</span><span style="color: #000000; ">-</span><span style="color: #000000; ">java5</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jdk<br />
&nbsp;解决方法二：&nbsp;安装JDK&nbsp;</span><span style="color: #000000; ">1.6</span><span style="color: #000000; ">&nbsp;,&nbsp;修改Android源文件。<br />
&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">）&nbsp;安装jdk&nbsp;</span><span style="color: #000000; ">1.6</span><span style="color: #000000; ">，修改</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">src_top</span><span style="color: #000000; ">/</span><span style="color: #000000; ">build</span><span style="color: #000000; ">/</span><span style="color: #000000; ">core</span><span style="color: #000000; ">/</span><span style="color: #000000; ">make.mk</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(如果2.0版本源码请修改</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">src_top</span><span style="color: #000000; ">/</span><span style="color: #000000; ">build</span><span style="color: #000000; ">/</span><span style="color: #000000; ">core</span><span style="color: #000000; ">/</span><span style="color: #000000; ">main.mk</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;在文件中搜索并分别把：<br />
&nbsp;&nbsp;java_version&nbsp;:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;$(shell&nbsp;java&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">version&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;head&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[&nbsp;"]1.5[.&nbsp;"$$]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;javac_version&nbsp;:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;$(shell&nbsp;javac&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">version&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;head&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[&nbsp;"]1.5[.&nbsp;"$$]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;两行改成：<br />
&nbsp;&nbsp;java_version&nbsp;:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;$(shell&nbsp;java&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">version&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;head&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[&nbsp;"]1.6[.&nbsp;"$$]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;javac_version&nbsp;:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;$(shell&nbsp;javac&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">version&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;head&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[&nbsp;"]1.6[.&nbsp;"$$]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;即可。<br />
&nbsp;推荐使用第一种解决方法。<br />
<br />
</span><span style="color: #000000; ">5</span><span style="color: #000000; ">.&nbsp;安装其他必备组件<br />
<br />
在终端上，使用下面的命令安装：(前面的1、</span><span style="color: #000000; ">2</span><span style="color: #000000; ">、3步骤都可以省略啦)<br />
<br />
sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install&nbsp;git</span><span style="color: #000000; ">-</span><span style="color: #000000; ">core&nbsp;gnupg&nbsp;flex&nbsp;bison&nbsp;gperf&nbsp;libsdl</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;libesd0</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;libwxgtk2.</span><span style="color: #000000; ">6</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;build</span><span style="color: #000000; ">-</span><span style="color: #000000; ">essential&nbsp;zip&nbsp;curl&nbsp;libncurses5</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;zlib1g</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev<br />
因为JDK1.5在前面已经单独安装过了，因此此处apt</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">&nbsp;install命令行中没有加入sun</span><span style="color: #000000; ">-</span><span style="color: #000000; ">java5</span><span style="color: #000000; ">-</span><span style="color: #000000; ">jdk。&nbsp;<br />
</span><span style="color: #000000; ">6</span><span style="color: #000000; ">.&nbsp;下载Android&nbsp;源代码<br />
<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">6.1</span><span style="color: #000000; ">&nbsp;安装repo脚本<br />
<br />
首先安装repo。在当前用户：</span><span style="color: #000000; ">~</span><span style="color: #000000; ">目&nbsp;录下新建一个bin目录。在终端中执行：<br />
<br />
cd&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; "><br />
<br />
mkdir&nbsp;bin<br />
<br />
然后，向PATH中添加bin路&nbsp;径：<br />
<br />
export&nbsp;PATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$PATH:</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">bin<br />
<br />
然后执行下面两行指令，下载repo脚本并修改可执行属性：<br />
<br />
curl&nbsp;https:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/repo&nbsp;&gt;~/bin/repo&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
chmod&nbsp;a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">repo<br />
<br />
&nbsp;&nbsp;</span><span style="color: #000000; ">6.2</span><span style="color: #000000; ">&nbsp;初始化repo<br />
<br />
首先建立一个目录用来存放Android源代码：<br />
<br />
mkdir&nbsp;mydroid<br />
<br />
cd&nbsp;mydroid<br />
<br />
然后用最新的列表执行初始化。这里偶下载android&nbsp;</span><span style="color: #000000; ">2.2</span><span style="color: #000000; ">.</span><span style="color: #000000; ">1</span><span style="color: #000000; ">(froyo)，因此加了参数&nbsp;&#8211;b&nbsp;froyo：(android&nbsp;</span><span style="color: #000000; ">2.2</span><span style="color: #000000; ">.</span><span style="color: #000000; ">2</span><span style="color: #000000; ">(froyo)源码下载:2G多<br />
repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;-b&nbsp;froyo&nbsp;)</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">(下载2.1_r2源码<br />
<br />
repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;&#8211;b&nbsp;android-2.1_r2</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
下载全部源码：repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git)</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
(下载2.0源码：<br />
repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;&#8211;b&nbsp;eclair&nbsp;)</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">（上面下载2.0时有个莫名其妙的问题：<br />
ynb@ynb</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pc:</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">bin$&nbsp;repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;&#8211;b&nbsp;eclair</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">Usage:&nbsp;repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;url&nbsp;[options]<br />
出现上面问题，删除mydroid目录：rmdir&nbsp;mydroid&nbsp;&nbsp;;&nbsp;mkdir&nbsp;mydroid2.</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;&nbsp;cd&nbsp;mydroid2.</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
再：repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;-b&nbsp;eclair&nbsp;就可以了）</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">(如果能通过浏览器浏览到android源码的主页，但运行repo&nbsp;init或repo&nbsp;sync的时候，却没法下载源码，形如：<br />
只需要把git开头的地址改为http即可：<br />
[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]<br />
repo&nbsp;init&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">u&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">android.git.kernel.org/platform/manifest.git&nbsp;-b&nbsp;froyo</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]修改manifest.git里的地址，也是把git:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">改为http:</span><span style="color: #008000; ">//<br />
</span><span style="color: #000000; ">vim&nbsp;.repo</span><span style="color: #000000; ">/</span><span style="color: #000000; ">manifest.git<br />
如：<br />
</span><span style="color: #000000; ">&lt;?</span><span style="color: #000000; ">xml&nbsp;version</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">?&gt;</span><span style="color: #000000; "><br />
&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">manifest</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">remote&nbsp;&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">korg</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fetch</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://android.git.kernel.org/</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;review</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">review.source.android.com</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">&nbsp;revision</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">froyo</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remote</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">korg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;)<br />
<br />
&nbsp;<br />
<br />
这中间会问到你的名字和Email。如果你打算上传代码，Email须是一个Google账户。<br />
<br />
repo初始化成功后会看到类似于下面的提&nbsp;示：<br />
<br />
repo&nbsp;initialized&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">home</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(当前用户名)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mydroid<br />
<br />
最后执行$repo&nbsp;sync开始同步代码。过程比较漫长，下载速度取决于你的网速（偶的3</span><span style="color: #000000; ">-</span><span style="color: #000000; ">4小时左右），中间有可能遇到断线，重新执行repo&nbsp;sync即可断点续传。<br />
<br />
</span><span style="color: #000000; ">7</span><span style="color: #000000; ">.&nbsp;编译Android源代码<br />
<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">7.1</span><span style="color: #000000; ">&nbsp;编译生成镜像<br />
<br />
切换到android源码根目录下，执行$sudo&nbsp;make即可。首次编译非常耗时，取决于机器配置，大约需要2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">3小时。有可能会出现：&#8220;Permission&nbsp;denied&nbsp;（权限拒绝的提示）&#8221;&nbsp;请命令赋予权限：$cd&nbsp;无权限文件的当前目录&nbsp;回车；&nbsp;&nbsp;$sudo&nbsp;chmod&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">R&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">rwx&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;回车；&nbsp;完成后镜像生成在</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mydroid</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">/</span><span style="color: #000000; ">target</span><span style="color: #000000; ">/</span><span style="color: #000000; ">product</span><span style="color: #000000; ">/</span><span style="color: #000000; ">generic下：android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中，&nbsp;ramdisk.img是emulator的文件系统，system.img包括了主要的包、库等文件，userdata.img包括了一些用户数据，emulator加载这3个映像文件后，会把&nbsp;system和&nbsp;userdata分别加载到&nbsp;ramdisk文件系统中的system和&nbsp;userdata目录下。<br />
<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">7.2</span><span style="color: #000000; ">&nbsp;编译、配置Android&nbsp;SDK<br />
<br />
make编译完成后，执行$sudo&nbsp;make&nbsp;sdk命令，生成对应于该版本源代码的sdk,此过程用的时间偶的是10多分钟。注意这个sdk不能用于生产环境。<br />
<br />
用于生产环境的最好用如下命令：&nbsp;$sudo&nbsp;make&nbsp;PRODUCT</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk命令，生成对应于该版本源代码的用于生产环境的sdk,此过程用的时间偶的是1个多小时。<br />
<br />
Android官方的SDK和偶自己编译Android源码时使用make&nbsp;sdk编译出的SDK有区别，模拟器版本不同，加载的默认镜像也不同（一个是官方的，&nbsp;一个是自己编译的）。下面将展示如何能够自由切换SDK版本。<br />
<br />
首先是自己编译的SDK版本，实际位置是</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mydroid</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">/</span><span style="color: #000000; ">host</span><span style="color: #000000; ">/</span><span style="color: #000000; ">linux</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x86</span><span style="color: #000000; ">/</span><span style="color: #000000; ">sdk</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk_eng.root_linux</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x86。<br />
<br />
因为它比较常用，我们给它高优先级：<br />
<br />
update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">install&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">AndroidSDK&nbsp;AndroidSDK&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mydroid</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">/</span><span style="color: #000000; ">host</span><span style="color: #000000; ">/</span><span style="color: #000000; ">linux</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x86</span><span style="color: #000000; ">/</span><span style="color: #000000; ">sdk</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk_eng.root_linux</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x86&nbsp;</span><span style="color: #000000; ">255</span><span style="color: #000000; "><br />
<br />
事先下载的官方SDK位置是</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">linux_86，执行：<br />
<br />
update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">install&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">AndroidSDK&nbsp;AndroidSDK&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">root</span><span style="color: #000000; ">/</span><span style="color: #000000; ">android</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sdk</span><span style="color: #000000; ">-</span><span style="color: #000000; ">linux_86&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />
然后使用update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">display&nbsp;AndroidSDK查看当前配置情况：&nbsp;<br />
<br />
<br />
如果要切换配置，使用update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">alternatives&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">config&nbsp;AndroidSDK<br />
<br />
配置AndroidSDK环境变量。终端中执行gedit&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc&nbsp;<br />
在文件最后添加下面三行：<br />
#&nbsp;</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;android&nbsp;environment<br />
export&nbsp;ANDROID_SDK_HOME</span><span style="color: #000000; ">=/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;AndroidSDK<br />
export&nbsp;PATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$ANDROID_SDK_HOME</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tools:$PATH&nbsp;<br />
保存文件。在终端中执行source&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc<br />
<br />
</span></div>
<span style="color: #008000; "><br />
</span></div>
<img src ="http://www.cppblog.com/jessee/aggbug/186609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jessee/" target="_blank">Jessee</a> 2012-08-07 23:23 <a href="http://www.cppblog.com/jessee/articles/186609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tips &amp; Tricks: Debugging with Android NDK stack traces</title><link>http://www.cppblog.com/jessee/articles/179421.html</link><dc:creator>Jessee</dc:creator><author>Jessee</author><pubDate>Tue, 19 Jun 2012 13:47:00 GMT</pubDate><guid>http://www.cppblog.com/jessee/articles/179421.html</guid><wfw:comment>http://www.cppblog.com/jessee/comments/179421.html</wfw:comment><comments>http://www.cppblog.com/jessee/articles/179421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jessee/comments/commentRss/179421.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jessee/services/trackbacks/179421.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">***</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;Build&nbsp;fingerprint:&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">htc_wwe/htc_bravo/bravo/bravo:2.2/FRF91/218634:user/release-keys</span><span style="color: #000000; ">'</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;pid:&nbsp;</span><span style="color: #000000; ">2474</span><span style="color: #000000; ">,&nbsp;tid:&nbsp;</span><span style="color: #000000; ">2485</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">&gt;&gt;&gt;</span><span style="color: #000000; ">&nbsp;com.test&nbsp;</span><span style="color: #000000; ">&lt;&lt;&lt;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;signal&nbsp;</span><span style="color: #000000; ">11</span><span style="color: #000000; ">&nbsp;(SIGSEGV),&nbsp;fault&nbsp;addr&nbsp;</span><span style="color: #000000; ">00000001</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;r0&nbsp;</span><span style="color: #000000; ">00000001</span><span style="color: #000000; ">&nbsp;&nbsp;r1&nbsp;</span><span style="color: #000000; ">00000000</span><span style="color: #000000; ">&nbsp;&nbsp;r2&nbsp;afd438e4&nbsp;&nbsp;r3&nbsp;</span><span style="color: #000000; ">00000001</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;r4&nbsp;4825395c&nbsp;&nbsp;r5&nbsp;</span><span style="color: #000000; ">00001000</span><span style="color: #000000; ">&nbsp;&nbsp;r6&nbsp;</span><span style="color: #000000; ">00001000</span><span style="color: #000000; ">&nbsp;&nbsp;r7&nbsp;</span><span style="color: #000000; ">00000001</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;r8&nbsp;48253ad8&nbsp;&nbsp;r9&nbsp;432faf40&nbsp;&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;802a3448&nbsp;&nbsp;fp&nbsp;432faf40<br />
<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;d30&nbsp;</span><span style="color: #000000; ">0000000000000000</span><span style="color: #000000; ">&nbsp;&nbsp;d31&nbsp;</span><span style="color: #000000; ">0000000000000000</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.730</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;scr&nbsp;</span><span style="color: #000000; ">80000012</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.790</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</span><span style="color: #000000; ">00</span><span style="color: #000000; ">&nbsp;&nbsp;pc&nbsp;</span><span style="color: #000000; ">00018656</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">com.test</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib</span><span style="color: #000000; ">/</span><span style="color: #000000; ">libmylib.so<br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.790</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</span><span style="color: #000000; ">01</span><span style="color: #000000; ">&nbsp;&nbsp;pc&nbsp;000186d2&nbsp;&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">com.test</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib</span><span style="color: #000000; ">/</span><span style="color: #000000; ">libmylib.so<br />
</span><span style="color: #000000; ">08</span><span style="color: #000000; ">-</span><span style="color: #000000; ">22</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">23</span><span style="color: #000000; ">:</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:</span><span style="color: #000000; ">40.790</span><span style="color: #000000; ">:&nbsp;INFO</span><span style="color: #000000; ">/</span><span style="color: #000000; ">DEBUG(</span><span style="color: #000000; ">65</span><span style="color: #000000; ">):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</span><span style="color: #000000; ">02</span><span style="color: #000000; ">&nbsp;&nbsp;pc&nbsp;</span><span style="color: #000000; ">00018708</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">data</span><span style="color: #000000; ">/</span><span style="color: #000000; ">com.test</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib</span><span style="color: #000000; ">/</span><span style="color: #000000; ">libmylib.so<br />
<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
<br />
<br />
First&nbsp;ensure&nbsp;your&nbsp;native&nbsp;code&nbsp;</span><span style="color: #0000FF; ">is</span><span style="color: #000000; ">&nbsp;compiled&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;Debug&nbsp;mode&nbsp;to&nbsp;access&nbsp;code&nbsp;information&nbsp;(&#8220;APP_OPTIM&nbsp;:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;debug&#8221;&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;your&nbsp;application.mk).&nbsp;Then&nbsp;call&nbsp;the&nbsp;executable&nbsp;with&nbsp;your&nbsp;.so&nbsp;compiled&nbsp;library,&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;example:<br />
<br />
${Android</span><span style="color: #000000; ">-</span><span style="color: #000000; ">NDK}</span><span style="color: #000000; ">/</span><span style="color: #000000; ">build</span><span style="color: #000000; ">/</span><span style="color: #000000; ">prebuilt</span><span style="color: #000000; ">/</span><span style="color: #000000; ">linux</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x86</span><span style="color: #000000; ">/</span><span style="color: #000000; ">arm</span><span style="color: #000000; ">-</span><span style="color: #000000; ">eabi</span><span style="color: #000000; ">-</span><span style="color: #000000; ">[version]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">arm</span><span style="color: #000000; ">-</span><span style="color: #000000; ">eabi</span><span style="color: #000000; ">-</span><span style="color: #000000; ">addr2line&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">C&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">f&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">e&nbsp;libmylib.so<br />
<br />
Then&nbsp;just&nbsp;type&nbsp;the&nbsp;address,&nbsp;the&nbsp;one&nbsp;you&nbsp;can&nbsp;find&nbsp;after&nbsp;the&nbsp;&#8220;pc&#8221;&nbsp;directive,&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;example:<br />
</span><span style="color: #000000; ">00018656</span><span style="color: #000000; "><br />
<br />
taken&nbsp;from&nbsp;line&nbsp;&#8220;#</span><span style="color: #000000; ">00</span><span style="color: #000000; ">&nbsp;&nbsp;pc&nbsp;</span><span style="color: #000000; ">00018656</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">system</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib</span><span style="color: #000000; ">/</span><span style="color: #000000; ">libstlport.so&#8220;.</span></div>
<br />
<img src ="http://www.cppblog.com/jessee/aggbug/179421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jessee/" target="_blank">Jessee</a> 2012-06-19 21:47 <a href="http://www.cppblog.com/jessee/articles/179421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>