﻿<?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>语源科技BlogJava-ZircoN</title><link>http://www.blogjava.net/ZircoN/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:03:46 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:03:46 GMT</pubDate><ttl>60</ttl><item><title>API Demos_App/Activity</title><link>http://www.blogjava.net/ZircoN/archive/2012/02/24/370128.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Fri, 24 Feb 2012 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2012/02/24/370128.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/370128.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2012/02/24/370128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/370128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/370128.html</trackback:ping><description><![CDATA[此篇来看下App/Activity下的demos。<br />第一个Animation，展示了从一个activity启动另一个activity时的两种动画效果，主要是这个方法：<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">overridePendingTransition(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;enterAnim,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;exitAnim)<br /></span><span style="color: #008080; "></span><span style="color: #000000; "></span></div></div>这个方法跟在<code>startActivity()或者finish()之后调用来指定一个效果</code>，第一个参数是下一个activity出现的效果，第二个参数是该activity退出的效果。<br />关于animation，可以参考这篇文章：<a href="http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html">http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html</a>。<br />第二个CustomDialogActivity，展示了一个activity如何使用自定义theme，使其看起来像一个dialog，在ApiDemos Manifest.xml中对应该activity的标签下，<br />有该属性：android:theme="@style/Theme.CustomDialog"，引用了一个自定义的theme，在styles.xml文件中：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Theme.CustomDialog"</span><span style="color: #FF0000; ">&nbsp;parent</span><span style="color: #0000FF; ">="android:style/Theme.Dialog"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span> &nbsp;&nbsp;&nbsp; <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:windowBackground"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">@drawable/filled_box</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span></div>继承自android内置的Theme.Dialog，位于/base/core/res/res/values/themes.xml。其background为一个自定义的shape，在filled_box.xml中：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">shape&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000ff;">="http://schemas.android.com/apk/res/android"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">solid&nbsp;</span><span style="color: #FF0000; ">android:color</span><span style="color: #0000FF; ">="#f0600000"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">stroke&nbsp;</span><span style="color: #FF0000; ">android:width</span><span style="color: #0000FF; ">="3dp"</span><span style="color: #FF0000; ">&nbsp;color</span><span style="color: #0000FF; ">="#ffff8080"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">corners&nbsp;</span><span style="color: #FF0000; ">android:radius</span><span style="color: #0000FF; ">="3dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">padding&nbsp;</span><span style="color: #FF0000; ">android:left</span><span style="color: #0000FF; ">="10dp"</span><span style="color: #FF0000; ">&nbsp;android:top</span><span style="color: #0000FF; ">="10dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:right</span><span style="color: #0000FF; ">="10dp"</span><span style="color: #FF0000; ">&nbsp;android:bottom</span><span style="color: #0000FF; ">="10dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">shape</span><span style="color: #0000FF; ">&gt;</span></div>solid填充，stroke描边，corners圆角，padding内间距，关于shape，可以看下这篇文章：<a href="http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html">http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html</a>。<br />这儿分享一个展现渐变色背景的方法，除了ps一张渐变色的图片，也可以使用shape，将上面代码的&lt;solid&gt;标签替换成&lt;gradient&gt;代表渐变:<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">gradient&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:startColor</span><span style="color: #0000FF; ">="#52adcd"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:endColor</span><span style="color: #0000FF; ">="#1c87b1"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:angle</span><span style="color: #0000FF; ">="0"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">-&nbsp;&nbsp;angle代表角度，0就是从左往右渐变，可以多用几个值试一试&nbsp;。这个标签不能和solid标签同时出现。-!</span><span style="color: #0000FF; ">&gt;</span></div><div>第三个CustomTitle，如何自定义一个title，而不是使用一个activity原来的那种title，主要是3句代码：</div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">setContentView(R.layout.custom_title);<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,&nbsp;R.layout.custom_title_1);</span></div> <span style="color: #000000; "></span><span style="color: #000000; "></span><div>第四个DialogActivity展示了如何使一个activity看上去像一个弹出的dialog，跟第二个实例类似，也是在其activity标签上加上theme属性，不过这次引用的<br />是系统自己的dialog theme：@android:style/Theme.Dialog，其次跟第三个实例类似，也使用了requestWindowFeature()这个方法，关于这个方法，<br />网上有很多介绍，大家可以自己搜一下，给个参考文章：<a href="http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html">http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html</a>。<br />第五个看下PersistentState和SaveRestoreState，先说SaveRestoreState展示了<code>onSaveInstanceState()保存activity状态的效果，其实本身没做什么，<br /></code><div><code><code>onSaveInstanceState()是当该activity可能会被系统destory时默认调用的，默认会记录布局中每个view的状态，如edittext的内容、checkedbox的选中状态，<br />你需要做的就是给每个控件加一个id，没有id的话是无法保存状态的，可以看下源码PhoneWindow.java中的saveHierarchyState()。一般情况下不需要你重写</code></code><div><code><code><code><code></code></code></code></code><div><code><code><code><code><code><code>onSaveInstanceState()，但是如果你想保存除了UI状态之外的其他附加信息，如一个成员变量的值等就可以覆写，但要注意，一定要调用</code></code></code></code></code></code><div><code><code><code><code><code><code><code><code><code></code></code></code></code></code></code></code></code></code><div><code><code><code><code><code><code><code><code><code>super.</code></code></code></code></code></code></code></code></code>onSaveInstanceState()，以上都可以在官方文档里找到。<br />再说下PersistentState，这个展示了使用SharedPreferences持久化的保存edittext的状态，包括光标的位置。主要是在onPause()里保存，onResume()里还原，<br />不多说了，测试这两个例子时，可以修改两个edittext中的值然后旋转手机，使其横屏，这样那个activity会destory然后再create。<br />第六个看下ReceiveResult，主要展示了startActivityForResult()的用法，这个可以用于比如从一个activity跳到另一个activity去选择一个email地址或是一张图片，<br />选择完毕时结果再返回给上一个activity。我按照流程来介绍下这个方法的用法，<code><code><code><code><code><code><code><code><code><code>ReceiveResult</code></code></code></code></code></code></code></code></code></code>--&gt;SendResult，首先先要调用<br />startActivityForResult(Intent  intent, int requestCode)启动SendResult，然后在SendResult这个activity中处理，处理完调用setResult (int resultCode, Intent data)，<br />返回到ReceiveResult中，注意setResult()后要调用finish()。最后呢在ReceiveResult中要覆写onActivityResult(int requestCode, int resultCode, Intent  data)方法，<br />来处理返回的结果，一些细节大家自己看看例子。关于requestCode，可以理解成A跳转到B同时也可以跳转到C或D，区分是跳到哪个activity；而resultCode，可以理解<br />成B可以返回多个值，OK或NOT OK等，区分一个activity返回的多个值，可以去看下Redirection这个例子，加强对<code><code><code>startActivityForResult</code></code></code>()的理解。<br />还有个知识点说下，在receiveResult的onCreate()中，mResults.setText(mResults.getText(), TextView.BufferType.EDITABLE);关于<br /><div>void android.widget.TextView.setText(CharSequence  text, BufferType  type)这个方法，可以参考这篇文章：<a href="http://litonggang.iteye.com/blog/507200">http://litonggang.iteye.com/blog/507200 </a><br />最好结合源码来看这个方法，从TextView的setText( CharSequence text, BufferType type ) --&gt; Editable.java --&gt; SpannableStringBuilder.java。实际上是将原来的<div><code><code><code><code><code><code><code><code><code><code>的CharSequence text扩展成SpannableStringBuilder，以使其具有append等扩展的方法，这儿还有个工厂模式，有时间多读读源码还是不错的。<br />第七个看下QuickContactsDemo，首先是QuickContactBadge这个控件，自己看下配置文件。接着是ResourceCursorAdapter，这个adapter继承在CursorAdapter，它覆写了<br />CursorAdapter的newView()方法，其实就一句代码，用Inflater填充指定的xml文件，所以在这个例子的newView()方法中首先调用super().newView()方法，将构造函数中指定的<br />那个layout转成view，然后bindView()里填充数据。最后是个viewHolder缓存layout中的view，viewHolder保证了对控件的缓存，减少了每次findViewById()的开销，是优化listview的一个较好的方式。<br /></code></code></code></code></code></code></code></code></code></code><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: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ContactListItemCache&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;TextView&nbsp;nameView;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;QuickContactBadge&nbsp;photoView;<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;CharArrayBuffer&nbsp;nameBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;CharArrayBuffer(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; "> }<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">ContactListItemCache&nbsp;cache&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ContactListItemCache();<br /></span><span style="color: #008080; ">7</span> <span style="color: #000000; ">cache.nameView&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(TextView)&nbsp;view.findViewById(R.id.name);<br /></span><span style="color: #008080; ">8</span> <span style="color: #000000; ">cache.photoView&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(QuickContactBadge)&nbsp;view.findViewById(R.id.badge);<br /></span><span style="color: #008080; ">9</span> <span style="color: #000000; ">view.setTag(cache);</span></div><code><code><code><code><code><code><code>最后那3个activity，一个透明背景activity、一个透明并且模糊不清背景activity、一个用你的壁纸做背景的activity都使用了自定义的theme，可以自己看看，放到自己的应用中。<br /><div></div>这篇总结先到这，有些乱。</code></code></code></code></code></code></code></div><div></div></div><br /> </div></div></div></div></div></div><img src ="http://www.blogjava.net/ZircoN/aggbug/370128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2012-02-24 15:32 <a href="http://www.blogjava.net/ZircoN/archive/2012/02/24/370128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>API Demos_入口</title><link>http://www.blogjava.net/ZircoN/archive/2012/01/10/368140.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Tue, 10 Jan 2012 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2012/01/10/368140.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/368140.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2012/01/10/368140.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/368140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/368140.html</trackback:ping><description><![CDATA[基于android 2.3.3的API Demos。<br />先看下ApiDemosApplication.java这个类，这个类继承自Application，主要作用是保存一些全局的状态，这个类会在你的应用程序创建时便被实例化，<br />这个类的类名，便是AndroidManifest.xml 的 &lt;application&gt; tag的name。比如在这个类中onCreate()中：<br /><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; ">PreferenceManager.setDefaultValues(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">,&nbsp;R.xml.default_values,&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);</span></div>这个方法将会从default_values.xml中填充默认的值到com.example.android.apis_preferences.xml这个默认的配置文件中去。<br />这个配置文件在/data/data/com.example.android.apis/shared_prefs/下。根据官方API，This should be called by the application's main activity. <br />这样其他的activity、service等才能相应的使用这个配置文件。<br />接着看下ApiDemos.java，这个类充分应用了AndroidManifest.xml这个文件。首先这个类是程序入口，一个ListActivity，这个类会重复利用到。<br />在其onCreate()方法里，第一次时path=""即prefix=""，接着看getData()这个方法，这个方法就是给这个listview填值的，填入的值放在myData这个List&lt;Map&gt;中：<br /><div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><div></div><div>Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);<br />mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);</div>PackageManager&nbsp;pm&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;getPackageManager();<br />List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ResolveInfo</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;list&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pm.queryIntentActivities(mainIntent,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000;">);</span></div></div>这段代码将AndroidManifest.xml文件中所有Intent action是ACTION_MAIN及category是<span style="color: #000000;">CATEGORY_SAMPLE_CODE</span>的activity全部取得。放入list中。<br />下面就是一些逻辑了，应该能看懂。<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><div>ResolveInfo info = list.get(i);</div>CharSequence&nbsp;labelSeq&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;info.loadLabel(pm);</span></div>取得所有activity的label，label的格式类似于App/Activity/Hello World这样的，如果我们点击App或者Activity时还是调用ApiDemos.java这个类，只是listview的内容<br />在变而已，在browseIntent()这个方法中。<br />每个列表项是按照首个字符的ascii码排序的，在sDisplayNameComparator中可以看到，列表项还可以按照你输入的字符过滤。<br /><br /><img src ="http://www.blogjava.net/ZircoN/aggbug/368140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2012-01-10 11:01 <a href="http://www.blogjava.net/ZircoN/archive/2012/01/10/368140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse下导入android源码</title><link>http://www.blogjava.net/ZircoN/archive/2011/12/24/367118.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Sat, 24 Dec 2011 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2011/12/24/367118.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/367118.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2011/12/24/367118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/367118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/367118.html</trackback:ping><description><![CDATA[编译好的源码可以导入eclipse中方便研究。<br />1、将 源码目录\development\ide\eclipse 中的.classpath复制到源码根目录下。<br />2、更改eclipse缓存设置<br />&nbsp;&nbsp;&nbsp; 在eclipse安装根目录下修改eclipse.ini&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; -Xms128m <br /><div> &nbsp;&nbsp;&nbsp; -Xmx512m <br /> &nbsp;&nbsp;&nbsp; -XX:MaxPermSize=256m<br />3、将 源码目录\development\ide\eclipse 中的android-formatting.xml和android.importorder导入eclipse<div></div>&nbsp;&nbsp;&nbsp; android-formatting.xml用来配置eclipse编辑器的代码风格；android.importorder用来配置eclipse的import的顺序和结构。 <br /><div> &nbsp;&nbsp;&nbsp; window-&gt;preferences-&gt;java-&gt;Code style-&gt;Formatter中导入android-formatting.xml <br /> &nbsp;&nbsp;&nbsp; window-&gt;preferences-&gt;java-&gt;Code style-&gt;Organize Imports中导入android.importorder。<br />4、导入源码<br />&nbsp;&nbsp;&nbsp; 最好重新换一个workspace，因为源码是比较庞大的。新建Java Project，指定一个name，接着将use default location勾掉，指定到你源码的目录下，finish。<br /></div></div><img src ="http://www.blogjava.net/ZircoN/aggbug/367118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2011-12-24 16:53 <a href="http://www.blogjava.net/ZircoN/archive/2011/12/24/367118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>32位Ubuntu 11.10下android2.3.7源码下载与编译小结</title><link>http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Sun, 13 Nov 2011 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/363452.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/363452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/363452.html</trackback:ping><description><![CDATA[<div>  <p><span>1、</span><span>我是在</span>vmware<span>下安装</span>ubuntu 11.10<span>的，这个网上资料很多，不多说了。我给</span>ubuntu<span>分了</span>25g<span>硬盘和</span>1g<span>内存。</span></p><p><span>2、</span><span>请参照</span><a href="http://source.android.com/source">http://source.android.com/source</a><span>。</span></p>    <p><span>初始化编译环境</span></p><p><span>检查一下包是否安装：</span></p>  <p>Python 2.4-2.7</p>  <p>Git 1.5.4 <span>或更高版本</span></p>    <p><span>没有话可以</span>sudo apt-get install..<span>安装一下</span></p><p><span></span></p><div><p>JDK 6 因为是编译android2.3以上，如果编译2.2以下需要JDK5</p></div><p><span>安装</span>JDK6<span>：</span></p><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 />--><p><span style="color: #000000; ">$&nbsp;sudo&nbsp;add</span><span style="color: #000000; ">-</span><span style="color: #000000; ">apt</span><span style="color: #000000; ">-</span><span style="color: #000000; ">repository&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">deb&nbsp;http://archive.canonical.com/&nbsp;lucid&nbsp;partner</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />$&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #000000; ">get&nbsp;update<br />$&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #000000; ">get&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</span></p></div><p><span>如果下载速度不行，可以先把</span>ubuntu<span>的更新源改成网易的源，可参考：</span><a href="http://bolg.malu.me/html/2010/279.html">http://bolg.malu.me/html/2010/279.html</a><span>。</span></p>  <p><span>其他需要安装的包：</span></p>  <p><span>我安装了如下包：官网上那是</span>64<span>位需要安装的包，我是</span>32<span>位的有些不一样。</span></p>  <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 />--><p><span style="color: #000000; ">$&nbsp;sudo&nbsp;apt</span><span style="color: #000000; ">-</span><span style="color: #000000; ">get&nbsp;install&nbsp;git</span><span style="color: #000000; ">-</span><span style="color: #000000; ">core&nbsp;gnupg&nbsp;flex&nbsp;bison&nbsp;gperf&nbsp;libsdl1.</span><span style="color: #000000; ">2</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&nbsp;x11proto</span><span style="color: #000000; ">-</span><span style="color: #000000; ">core</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;libx11</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;libgl1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">mesa</span><span style="color: #000000; ">-</span><span style="color: #000000; ">dev&nbsp;g</span><span style="color: #000000; ">++-</span><span style="color: #000000; ">multilib&nbsp;mingw32&nbsp;tofrodos&nbsp;python</span><span style="color: #000000; ">-</span><span style="color: #000000; ">markdown&nbsp;libxml2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utils</span></p></div>  <p><span>3、</span><span>下面开始下载源码</span></p>  <p><span>首先安装</span>repo(<span>是一个便于</span>git<span>管理的工具</span>)</p><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 />--><p><span style="color: #000000; ">$&nbsp;mkdir&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">bin<br />$&nbsp;PATH</span><span style="color: #000000; ">=~/</span><span style="color: #000000; ">bin:$PATH<br />$&nbsp;curl&nbsp;https:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">dl-ssl.google.com/dl/googlesource/git-repo/repo&nbsp;&gt;&nbsp;~/bin/repo</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">$&nbsp;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</span></p></div><p><span>初始化</span>repo client</p><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 />--><p><span style="color: #000000; ">$&nbsp;mkdir&nbsp;android2.</span><span style="color: #000000; ">3.7</span><span style="color: #000000; "><br />$&nbsp;cd&nbsp;android2.</span><span style="color: #000000; ">3.7</span></p></div><p><span>初始化</span>repo<span>，我是使用的下面的地址，使用官网地址时出现了网络错误</span></p>  <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 />--><p><span style="color: #000000; ">$&nbsp;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.googlesource.com/platform/manifest.git&nbsp;-b&nbsp;android-2.3.7_r1</span></p></div>  <p><span>按照提示输入用户名和邮箱。</span></p>  <p><span>接着</span><span></span></p><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 />--><p><span style="color: #000000; ">$&nbsp;repo&nbsp;sync</span></p></div><p><span>开始同步源码，根据你的网速，我的持续了</span>50<span>分钟左右。</span></p>  <p><span>还有一步验证</span>git tags<span>可参照官网。下完后就可以在刚才创建的</span>android2.3.7<span>文件夹下看见已下载的源码。</span></p>  <p><span>4、</span><span>开始编译</span></p>  <p><span>初始化：</span></p><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 />--><p><span style="color: #000000; ">$&nbsp;source&nbsp;build</span><span style="color: #000000; ">/</span><span style="color: #000000; ">envsetup.sh<br />$&nbsp;lunch&nbsp;full</span><span style="color: #000000; ">-</span><span style="color: #000000; ">eng</span></p></div><p><span>上面代表编译的一个</span>target<span>，</span>full<span>是针对</span>emulator<span>编译全部包括</span>app<span>、输入法等，</span>eng<span>是指针对开发者编译，有最高权限。具体可参见官网。</span></p>  <p><span>接着就可以编译了，在源码目录下直接</span>make<span>就行，需要一段时间。</span></p>  <p><span>编译过程中有几个问题需要指出一下：</span></p>  <p><span>问题</span>1<span>：</span></p>  <p><span>由于我们是</span>32<span>位系统，所以有些文件需要修改一下：将</span></p>  <p>./external/clearsilver/cgi/Android.mk </p>  <p>./external/clearsilver/java-jni/Android.mk </p>  <p>./external/clearsilver/util/Android.mk </p>  <p>./external/clearsilver/cs/Android.mk</p>  <p><span>四个文件中的</span></p><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 />--><p><span style="color: #000000; ">LOCAL_CFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">m64<br />LOCAL_LDFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">m64 <br /></span></p></div><p><span>注释掉，或者将</span>&#8220;64&#8221;<span>换成</span>&#8220;32&#8221;</p><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 />--><p><span style="color: #000000; ">LOCAL_CFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">m32<br />LOCAL_LDFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">m32 <br /></span></p></div><p><span>然后，将</span>./build/core/main.mk <span>中的</span></p>  <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 />--><p><span style="color: #000000; ">ifneq&nbsp;(</span><span style="color: #000000; ">64</span><span style="color: #000000; ">,$(findstring&nbsp;</span><span style="color: #000000; ">64</span><span style="color: #000000; ">,$(build_arch))) <br /></span></p></div>  <p><span>改为：</span></p>  <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 />--><p><span style="color: #000000; ">ifneq&nbsp;(i686,$(findstring&nbsp;i686,$(build_arch))) <br /></span></p></div>  <p><span>问题</span>2<span>：</span></p>  <div>    <p><span>frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing &#8216;const android::RefBase::weakref_impl&#8217; as &#8216;this&#8217; argument of &#8216;void</span>&nbsp; <span>android::RefBase::weakref_impl::trackMe(bool, bool)&#8217; discards qualifiers [-fpermissive] make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1</span></p>  </div>  <p><span>如下解决：</span></p>  <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 />--><p><span style="color: #000000; ">$&nbsp;gedit&nbsp;frameworks</span><span style="color: #000000; ">/</span><span style="color: #000000; ">base</span><span style="color: #000000; ">/</span><span style="color: #000000; ">libs</span><span style="color: #000000; ">/</span><span style="color: #000000; ">utils</span><span style="color: #000000; ">/</span><span style="color: #000000; ">Android.mk</span></p></div>  <p>将下面一行</p>  <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 />--><p><span style="color: #000000; ">LOCAL_CFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">DLIBUTILS_NATIVE</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;$(TOOL_CFLAGS)</span></p></div>  <p>改成<br /></p>  <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 />--><p><span style="color: #000000; ">LOCAL_CFLAGS&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">DLIBUTILS_NATIVE</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;$(TOOL_CFLAGS)&nbsp;&#8211;fpermissive</span></p></div><p><span></span></p>  <p><span>问题</span>3<span>：</span></p>  <p><span>&lt;command-line&gt;:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default] <br /> </span></p><p><span>&lt;built-in&gt;:0:0: note: this is the location of the previous definition cc1plus: all warnings being treated as errors </span></p>  <p><span>make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1 </span></p>  <p><span>这是由于</span>11.10<span>的</span>gcc<span>版本过高造成的，可参考这篇文章修改：</span><a href="http://hi.baidu.com/designhouse/blog/item/fec5cdbf8d6a231618d81fc1.html">http://hi.baidu.com/designhouse/blog/item/fec5cdbf8d6a231618d81fc1.html</a><span>。</span></p>  <p><span>至此编译完毕。</span></p><p><span>make编译的并不是所有内容，不包含内核和SDK。</span></p><p>映像生成在out/target/product/generic下：android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中， ramdisk.img是一个分区映像文件，在kernel启动时，ramdisk被用来调用init，以及把真正的root file system mount起来。system.img包括了主要系统，系统app等，会被挂载到/下，可对应查看./system该目录，可以发现在其下app/下有一些系统自带的应用程序。userdata.img包括了一些用户数据，被挂载到/data下，对应可查看./data/目录，emulator加载这3个映像文件。</p><p>5、编译SDK</p><p>编译SDK可以得到与源码同步的SDK，还会生成一些tools，在源码根目录下：</p><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 />--><p><span style="color: #000000; ">$&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</span></p></div><p>编译生成的SDK在out/host/linux-x86/SDK下。之后如果在ubuntu下使用eclipse进行开发，可以使用你编译的SDK。</p><p>下面就在模拟器中运行镜像，建议切到root用户下，首先配置几个环境变量，将自己编译的SDK设为优先级最高，在源码根目录下执行：<br /></p><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 />--><p><span style="color: #000000; ">$&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; ">AndroidSDK&nbsp;AndroidSDK&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">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></p></div><p>这样会在/etc/<span style="color: #000000; ">alternatives下生成一个指向该SDK目录的软连接</span><span style="color: #000000;">AndroidSDK</span>，这个目录主要存放一些系统默认打开的程序的信息和配置。那么/usr/bin/AndroidSDK就指向这个软连接。接着执行:<br /></p><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 />--><p><span style="color: #000000; ">gedit&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc</span></p></div><p>在文件末尾添加：</p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><p><span style="color: #000000; ">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; ">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<br />export&nbsp;ANDROID_PRODUCT_OUT</span><span style="color: #000000; ">=~/</span><span style="color: #000000; ">android2.</span><span style="color: #000000; ">3.7</span><span style="color: #000000; "></span><span style="color: #000000; ">/</span><span style="color: #000000; "></span><span style="color: #000000; ">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</span></p></div><p>接着就可以执行：</p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><p><span style="color: #000000;">$&nbsp;emulator</span></p></div><p>运行的就是你编译的映像。执行emulator 命令时，如果不带任何参数，则Linux  Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件，而 </p><p>Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img。模拟器运行需要这四个文件，如果你编译了内核则可以使用自己的Kernel镜像，可用于android移植等。</p><p>6、单独编译模块</p><p>如果你不想编译整个系统，就想编译某一个应用程序，可以使用mmm命令，使用之前，在源码目录下先要执行：</p><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 />--><p><span style="color: #000000; ">$ build</span><span style="color: #000000; ">/</span><span style="color: #000000; ">envsetup.sh<br /></span></p></div><p>这样会生成一些命令，有m即make、mm编译当前目录下所有模块、mmm编译指定目录下所有模块。你可以把packages/apps/Music应用的application name改成MyMusic(AndroidManifest.xml中)，然后执行：</p><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 />--><p><span style="color: #000000; ">$&nbsp;mmm&nbsp;packages</span><span style="color: #000000; ">/</span><span style="color: #000000; ">apps</span><span style="color: #000000; ">/</span><span style="color: #000000; ">Music</span></p></div><p>在out/target/product/generic/system/app中就可以看见Music.apk，然后执行：</p><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 />--><p><span style="color: #000000; ">$&nbsp;make&nbsp;snod</span></p></div><p>重新生成system.img。</p><p>7、问题：ubuntu下搭建eclipse编译android源码环境，将会另写一篇文章。  </p></div><img src ="http://www.blogjava.net/ZircoN/aggbug/363452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2011-11-13 23:17 <a href="http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android APK反编译工具及方法</title><link>http://www.blogjava.net/ZircoN/archive/2011/11/12/363576.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Sat, 12 Nov 2011 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2011/11/12/363576.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/363576.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2011/11/12/363576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/363576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/363576.html</trackback:ping><description><![CDATA[反编译别人的APK主要是为了学习与修改，并非破解别人软件。<br />一、反编译得到xml配置<br />如果只想从apk中抠一些图出来，直接把.apk改成.rar解压，图片即在res下面。<br />如果想查看xml配置，资源文件等，则用下面的方法，先下载工具<a title="http://code.google.com/p/android-apktool/" href="http://code.google.com/p/android-apktool/"> http://code.google.com/p/android-apktool/</a> 。<br /><div>apktool1.4.1.tar.bz2和apktool-install-windows-r04-brut1.tar.bz2解压到同一个文件夹，有三个文件：aapt.exe，apktool.bat，apktool.jar。<br />接着cmd到命令行，cd到该目录，输入：apktool d **.apk ** 。解释：apktool d 需要反编译的apk文件 反编译输出的文件夹。这样就可以到res下查看xml配置等了。<br />你可以对其修改，已达到汉化或者去广告的目的。然后执行apktool b **(你反编译出来的文件夹) 重新生成一个新的apk在**/dist/下。<br />二、反编译得到源码<br />需要系在两个工具：1、dex2jar 地址：<a href="http://code.google.com/p/dex2jar/downloads/list">http://code.google.com/p/dex2jar/downloads/list</a> 下载dex-translator-0.0.9.3.zip。作用是将apk中的.dex转化成.jar 2、jd-gui，地址：<a href="http://java.decompiler.free.fr/">http://java.decompiler.free.fr/</a> 这个很熟悉了，将.class反编译成.java，除了有windows版的.exe还有对应的eclipse插件可供下载。<br />接着将.apk改成.rar解压得到classes.dex文件，将其放到dex-translator-0.0.9.3.zip解压的目录，命令行下cd到该目录下，执行dex2jar.bat classes.dex。则得到一个classes_dex2jar.jar，然后运行jd-gui打开该jar包，可以查看源码。现在很多apk都会防止被反编译，主要是工程下proguard.cfg起的作用，具体可以google。<br /><br /><div><div></div></div></div><img src ="http://www.blogjava.net/ZircoN/aggbug/363576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2011-11-12 13:20 <a href="http://www.blogjava.net/ZircoN/archive/2011/11/12/363576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NDK安装小结</title><link>http://www.blogjava.net/ZircoN/archive/2011/10/17/361472.html</link><dc:creator>ZircoN</dc:creator><author>ZircoN</author><pubDate>Mon, 17 Oct 2011 12:45:00 GMT</pubDate><guid>http://www.blogjava.net/ZircoN/archive/2011/10/17/361472.html</guid><wfw:comment>http://www.blogjava.net/ZircoN/comments/361472.html</wfw:comment><comments>http://www.blogjava.net/ZircoN/archive/2011/10/17/361472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZircoN/comments/commentRss/361472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZircoN/services/trackbacks/361472.html</trackback:ping><description><![CDATA[<p><span style="font-family: Courier;">一、</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">介绍</span></p>
<p><span style="font-family: Courier;">NDK </span><span style="font-family: Courier;">提供了一系列的工具，帮助开发者快速开发</span><span style="font-family: Courier;">C</span><span style="font-family: Courier;">（或</span><span style="font-family: Courier;">C++</span><span style="font-family: Courier;">）的动态库，并能自动将</span><span style="font-family: Courier;">so</span><span style="font-family: Courier;">和</span><span style="font-family: Courier;">java</span><span style="font-family: Courier;">应用一起打包成</span><span style="font-family: Courier;">apk</span><span style="font-family: Courier;">。这些工具对开发者的帮助是巨大的。</span><span style="font-family: Courier;">NDK </span><span style="font-family: Courier;">集成了交叉编译器，并提供了相应的</span><span style="font-family: Courier;">mk</span><span style="font-family: Courier;">文件隔离</span><span style="font-family: Courier;">CPU</span><span style="font-family: Courier;">、平台、</span><span style="font-family: Courier;">ABI</span><span style="font-family: Courier;">等差异，开发人员只需要简单修改</span><span style="font-family: Courier;">mk </span><span style="font-family: Courier;">文件（指出</span><span style="font-family: Courier;">&#8220;</span><span style="font-family: Courier;">哪些文件需要编译</span><span style="font-family: Courier;">&#8221;</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">&#8220;</span><span style="font-family: Courier;">编译特性要求</span><span style="font-family: Courier;">&#8221;</span><span style="font-family: Courier;">等），就可以创建出</span><span style="font-family: Courier;">so</span><span style="font-family: Courier;">。</span><span style="font-family: Courier;">NDK </span><span style="font-family: Courier;">可以自动地将</span><span style="font-family: Courier;">so</span><span style="font-family: Courier;">和</span><span style="font-family: Courier;">Java \</span><span style="font-family: Courier;">应用一起打包，极大地减轻了开发人员的打包工作。比较简单的说，</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">是一套交叉编译工具，它可以帮你把你用</span><span style="font-family: Courier;">C</span><span style="font-family: Courier;">或</span><span style="font-family: Courier;">C++</span><span style="font-family: Courier;">书写的代码，编译为</span><span style="font-family: Courier;">.so</span><span style="font-family: Courier;">（类似与</span><span style="font-family: Courier;"> win</span><span style="font-family: Courier;">下的</span><span style="font-family: Courier;">.dll</span><span style="font-family: Courier;">）格式的文件，使你可以在你的</span><span style="font-family: Courier;">Android</span><span style="font-family: Courier;">程序当中用</span><span style="font-family: Courier;">Java</span><span style="font-family: Courier;">语言（</span><span style="font-family: Courier;">JNI</span><span style="font-family: Courier;">）调用这些代码。</span></p>
<p><span style="font-family: Courier;">二、安装</span><span style="font-family: Courier;">cygwin</span></p>
<p><span style="font-family: Courier;">由于</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">编译代码时必须要用到</span><span style="font-family: Courier;">make</span><span style="font-family: Courier;">和</span><span style="font-family: Courier;">gcc</span><span style="font-family: Courier;">，所以你必须先搭建一个</span><span style="font-family: Courier;">linux</span><span style="font-family: Courier;">环境，</span><span style="font-family: Courier;"> cygwin</span><span style="font-family: Courier;">是一个在</span><span style="font-family: Courier;">windows</span><span style="font-family: Courier;">平台上运行的</span><span style="font-family: Courier;">unix</span><span style="font-family: Courier;">模拟环境</span><span style="font-family: Courier;">,</span><span style="font-family: Courier;">它对于学习</span><span style="font-family: Courier;">unix/linux</span><span style="font-family: Courier;">操作环境，或者从</span><span style="font-family: Courier;">unix</span><span style="font-family: Courier;">到</span><span style="font-family: Courier;">windows</span><span style="font-family: Courier;">的应用程序</span> <span style="font-family: Courier;">移植，非常有用。通过它，你就可以在不安装</span><span style="font-family: Courier;">linux</span><span style="font-family: Courier;">的情况下使用</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">来编译</span><span style="font-family: Courier;">C</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">C++</span><span style="font-family: Courier;">代码了。下面我们一步一步的安装</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">吧。</span></p>
<p><span style="font-family: Courier;">首先到</span><a href="http://www.cygwin.xn--com%20setup-iq8qk029d.exe/"><span style="font-family: Courier;">www.cygwin.com</span></a><span style="font-family: Courier;">下载</span><span style="font-family: Courier;">setup.exe</span><span style="font-family: Courier;">。</span></p>
<p><span style="font-family: Courier;">然后默认配置</span><span style="font-family: Courier;">next</span><span style="font-family: Courier;">，选择离自己较近的镜像站点准备下载安装包列表。</span></p>
<p><span style="font-family: Courier;">这里列出后面开发</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">用得着的包：</span><span style="font-family: Courier;">autoconf2.1</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">automake1.10</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">binutils</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">gcc-core</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">g++</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">gcc4-core</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">gcc4-g++</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">gdb</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">pcre</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">pcre-devel</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">gawk</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">make(</span><span style="font-family: Courier;">宁可多选</span><span style="font-family: Courier;">,</span><span style="font-family: Courier;">不能少选</span><span style="font-family: Courier;">)</span><span style="font-family: Courier;">，最好再装个</span><span style="font-family: Courier;">vim</span><span style="font-family: Courier;">。</span><span style="font-family: Courier;">search</span><span style="font-family: Courier;">需要安装的包，点</span><span style="font-family: Courier;">skip</span><span style="font-family: Courier;">，把它变成数字版本格式，要确保</span><span style="font-family: Courier;">Bin</span><span style="font-family: Courier;">项变成叉号，而</span><span style="font-family: Courier;">Src</span><span style="font-family: Courier;">项是源码，这个就没必要选了。就可以进行安装了。如下图举例：</span></p>
<p><span style="font-family:宋体;"></span></p>
<div>
<p><img src="data:image/png;base64,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" alt="" /></p>
</div>
<p><br />
</p>
<p> </p>
<p><span style="font-family: Courier;">下面测试一下</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">是不是已经安装好了。</span></p>
<p><span style="font-family: Courier;">运行</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">，在弹出的命令行窗口输入：</span><span style="font-family: Courier;">cygcheck -c cygwin</span><span style="font-family: Courier;">命令，会打印出当前</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">的版本和运行状态，如果</span><span style="font-family: Courier;">status</span><span style="font-family: Courier;">是</span><span style="font-family: Courier;">ok</span><span style="font-family: Courier;">的话，则</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">运行正常。</span></p>
<p><span style="font-family: Courier;">然后依次输入</span><span style="font-family: Courier;">gcc &#8211;v</span><span style="font-family: Courier;">，</span><span style="font-family: Courier;">g++ &nbsp;--version</span><span style="font-family: Courier;">，</span><span style="font-family: Courier;">make &#8211;version</span><span style="font-family: Courier;">，</span><span style="font-family: Courier;">gdb &#8211;version</span><span style="font-family: Courier;">进行测试，</span><span style="font-family: Courier;">(</span><span style="font-family: Courier;">注意空格和</span><span style="font-family: Courier;">-)</span><span style="font-family: Courier;">如果都打印出版本信息和一些描述信息，非常高兴的告诉你，你的</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">安装完成了！</span></p>
<p><span style="font-family: Courier;">三、配置</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">环境变量</span></p>
<p><span style="font-family: Courier;">1</span><span style="font-family: Courier;">、下载</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">，我下的最新的</span><a href="http://dl.google.com/android/ndk/android-ndk-r6-windows.zip"><span style="font-family: Courier;">android-ndk-r6-windows.zip</span></a><span style="font-family: Courier;">，直接解压</span></p>
<p><span style="font-family: Courier;">2</span><span style="font-family: Courier;">、首先找到</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">的安装目录，找到一个</span><span style="font-family: Courier;">home\&lt;</span><span style="font-family: Courier;">你的用户名</span><span style="font-family: Courier;">&gt;\.bash_profile</span><span style="font-family: Courier;">文件。</span></p>
<p><span style="font-family: Courier;">3</span><span style="font-family: Courier;">、可以直接用记事本打开</span><span style="font-family: Courier;">.bash_profile</span><span style="font-family: Courier;">文件，添加</span><span style="font-family: Courier;">NDKROOT=/cygdrive/&lt;</span><span style="font-family: Courier;">你的盘符</span><span style="font-family: Courier;">&gt;/&lt;android ndk </span><span style="font-family: Courier;">目录</span><span style="font-family: Courier;">&gt; </span><span style="font-family: Courier;">例如：</span><span style="font-family: Courier;">NDK=/cygdrive/e/software/android-ndk-r6,</span><span style="font-family: Courier;">然后</span><span style="font-family: Courier;">export NDKROOT</span><span style="font-family: Courier;">。</span><span style="font-family: Courier;">NDKROOT</span><span style="font-family: Courier;">这个名字随意取。</span></p>
<p><span style="font-family: Courier;">4</span><span style="font-family: Courier;">、打开</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">，输入</span><span style="font-family: Courier;">env | grep NDKROOT</span><span style="font-family: Courier;">，若显示你刚才键入的值，则表明配置成功。说明一下，在</span><span style="font-family: Courier;">r4</span><span style="font-family: Courier;">版本之前，需要输入</span><span style="font-family: Courier;">build/host-setup.sh</span><span style="font-family: Courier;">配置环境，这个在</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">目录中的</span><span style="font-family: Courier;">doc</span><span style="font-family: Courier;">目录下的</span><span style="font-family: Courier;">OVERVIEW.TXT</span><span style="font-family: Courier;">有说明：</span><span style="font-family: Courier;">Previous releases required that you run the 'build/host-setup.sh'script to configure your NDK. This step has been removed completely in release 4</span></p>
<p><span style="font-family: Courier;">四、编译</span><span style="font-family: Courier;">NDK</span><span style="font-family: Courier;">自带的例子</span></p>
<p><span style="font-family: Courier;">1</span><span style="font-family: Courier;">、运行</span><span style="font-family: Courier;">cygwin</span><span style="font-family: Courier;">，输入</span><span style="font-family: Courier;">cd /cygdrive/&lt;android ndk</span><span style="font-family: Courier;">目录</span><span style="font-family: Courier;">&gt;/samples/hello-jni</span></p>
<p><span style="font-family: Courier;">2</span><span style="font-family: Courier;">、输入</span><span style="font-family: Courier;">$NDK/ndk-build</span><span style="font-family: Courier;">，执行成功后，它会自动生成一个</span><span style="font-family: Courier;">libs</span><span style="font-family: Courier;">目录，把编译生成的</span><span style="font-family: Courier;">.so</span><span style="font-family: Courier;">文件放在里面。</span><span style="font-family: Courier;">($NDK</span><span style="font-family: Courier;">是调用我们之前配置好的环境变量，</span><span style="font-family: Courier;">ndk-build</span><span style="font-family: Courier;">是调用</span><span style="font-family: Courier;">ndk</span><span style="font-family: Courier;">的编译程序</span><span style="font-family: Courier;">)</span><span style="font-family: Courier;">。</span></p>
<p><span style="font-family: Courier;">3</span><span style="font-family: Courier;">、此时去</span><span style="font-family: Courier;">hello-jni</span><span style="font-family: Courier;">的</span><span style="font-family: Courier;">libs</span><span style="font-family: Courier;">目录下看有没有生成的</span><span style="font-family: Courier;">.so</span><span style="font-family: Courier;">文件，如果有，你的</span><span style="font-family: Courier;">ndk</span><span style="font-family: Courier;">就运行正常。</span></p>
<p><span style="font-family: Courier;">4</span><span style="font-family: Courier;">、</span><span style="font-family: Courier;">eclipse</span><span style="font-family: Courier;">中新建</span><span style="font-family: Courier;">android</span><span style="font-family: Courier;">工程，选择第二项，如下图，就可以跑起来了，然后可以研究下其他例子。</span></p>
<p><span style="font-family:宋体;"></span></p>
<div>
<p><img src="data:image/png;base64,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" alt="" /></p>
</div>
<p>&nbsp;</p><p> </p>
<p><span style="font-family: Courier;">五、</span><span style="font-family: Courier;">eclipse</span><span style="font-family: Courier;">中集成</span><span style="font-family: Courier;">CDT</span></p>
<p><span style="font-family: Courier;">在</span><span style="font-family: Courier;">eclipse</span><span style="font-family: Courier;">中集成</span><span style="font-family: Courier;">c/c++</span><span style="font-family: Courier;">开发环境。首先登录</span><span style="font-family: Courier;">http://www.eclipse.org/cdt/downloads.php</span><span style="font-family: Courier;">，找到对应你</span><span style="font-family: Courier;">Eclipse</span><span style="font-family: Courier;">版本的</span><span style="font-family: Courier;">CDT</span><span style="font-family: Courier;">插件的在线安装地址。</span>&nbsp;<span style="font-family: Courier;">然后</span><span style="font-family: Courier;">eclipse</span><span style="font-family: Courier;">里点</span><span style="font-family: Courier;">Help</span><span style="font-family: Courier;">菜单，找到</span><span style="font-family: Courier;">Install New Software</span><span style="font-family: Courier;">菜单，下面就不说了，你可能会遇到</span><span style="font-family: Courier;">Duplicate location</span><span style="font-family: Courier;">重复路径的错误，这时你可以选择</span><span style="font-family: Courier;">Available Software Sites,</span><span style="font-family: Courier;">找到那个</span><span style="font-family: Courier;">CDT</span><span style="font-family: Courier;">安装的地址，把其状态设置成</span><span style="font-family: Courier;">Enable</span><span style="font-family: Courier;">就行了。</span></p>
<p><span style="font-family: Courier;">六、配置</span><span style="font-family: Courier;">c/c++</span><span style="font-family: Courier;">编译器下次说</span></p><img src ="http://www.blogjava.net/ZircoN/aggbug/361472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZircoN/" target="_blank">ZircoN</a> 2011-10-17 20:45 <a href="http://www.blogjava.net/ZircoN/archive/2011/10/17/361472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>