<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; Android 开发</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/category/android-%e5%bc%80%e5%8f%91/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Android开发Service小研究</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/09/androidservice/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/09/androidservice/#comments</comments>
		<pubDate>Wed, 09 May 2012 06:41:42 +0000</pubDate>
		<dc:creator>houyewei</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[全国博客大奖赛]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/09/androidservice/</guid>
		<description><![CDATA[最近同学搞起了Android开发，自己也捡起来这个玩意来看看。这里先研究一下service Service是安卓系统提供的四种组件之一，功能与activity类似，只不过没有activity 的使用频率高。顾名思义Service就是运行在后台的一种服务程序一般很少与用户交互，没有可视化界面。 定义一个service非常简单，只要继承就可以了，实现其中的那些方法就可以了。service必须在AndroidManifest.xml配置文件中定义 intent-filter制定如何访问该service onBind(Intent intent)：是必须实现的一个方法返回接口 onCreate():当service第一次被创建有系统调用 onStart(Intent intent ,int startid):当通过startservice()方法启动service是该方法被调用 onDestory():当service不再使用，系统调用该方法 创建一个service代码 Java代码 public classs Myservice extends Service { public IBinder onBind(Intent intent) { return null; } public void onCreate() { super.onCreate(); } public void onStart(Intent intent ,int startId) { super.onStart(intent,startId); } public void onDestory() { super.onDestory(); } } 欢迎访问我的博客进行交流]]></description>
			<content:encoded><![CDATA[<p>最近同学搞起了Android开发，自己也捡起来这个玩意来看看。这里先研究一下service </p>
<p>      Service是安卓系统提供的四种组件之一，功能与activity类似，只不过没有activity 的使用频率高。顾名思义Service就是运行在后台的一种服务程序一般很少与用户交互，没有可视化界面。 </p>
<p>      定义一个service非常简单，只要继承就可以了，实现其中的那些方法就可以了。service必须在AndroidManifest.xml配置文件中定义 </p>
</p>
</p>
</p>
<p>intent-filter制定如何访问该service </p>
<p>onBind(Intent intent)：是必须实现的一个方法返回接口 </p>
<p>onCreate():当service第一次被创建有系统调用 </p>
<p>onStart(Intent intent ,int startid):当通过startservice()方法启动service是该方法被调用 </p>
<p>onDestory():当service不再使用，系统调用该方法 </p>
<p>创建一个service代码 </p>
<p>Java代码<br />
<code>public classs Myservice extends Service  </p>
<p>{  </p>
<p>   public IBinder onBind(Intent intent)  </p>
<p>{  </p>
<p>    return null;  </p>
<p>}  </p>
<p>  public void onCreate()  </p>
<p>    {  </p>
<p>      super.onCreate();  </p>
<p>    }  </p>
<p>  public void onStart(Intent intent ,int startId)  </p>
<p>   {  </p>
<p>     super.onStart(intent,startId);  </p>
<p>   }  </p>
<p>   public void onDestory()  </p>
<p>   {  </p>
<p>      super.onDestory();  </p>
<p>   }  </p>
<p>}<br />
</code><br />
欢迎访问<a href="http://houyewei.com">我的博客</a>进行交流</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/09/androidservice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 多线程编程</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/07/android-8/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/07/android-8/#comments</comments>
		<pubDate>Mon, 07 May 2012 10:21:36 +0000</pubDate>
		<dc:creator>blogercn</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[开放源代码]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/07/android-8/</guid>
		<description><![CDATA[android的应用程序支持多线程，多线程编程为我们充分利用系统资源提供了便利，同时也为设计复杂UI和耗时操作提供了途径，提升了安卓用户的使用体验。Android的多线程和JAVA没有多大变化，唯一的变化大概在于无法直接使用CANVAS修改屏幕元素，当然安卓为我们提供了surfaceview类来实现多线程中通过画布canvas修改屏幕。这为设计UI和开发游戏带来了方便。因此，研究和使用多线程编程，对我们深入学习安卓编程有着十分重要的作用。 线程的方法比较多，常用的有： start()； run()； sleep()； stop()； destroy()； join(); suspend()； resume()； yield()； wait()； notify()； 线程启动一定要使用start方法,线程操作使用run方法，线程休眠使用sleep方法，线程停止使用stop,线程销毁使用destroy方法,线程同步使用JOIN方法，前面三种最常用，一般来说这三种就可以满足大部分线程使用需求，run结束时线程自动死亡，stop,destroy虽然也能停止线程，但不推荐使用，,前者会产生异常，后者是强制终止，不会释放锁，一般会在RUN里设置一个状态信号来等其自动结束，这里使用volatile boolean bThreadRun。后面是暂停，继续，挂起，由于会产生死锁问题，很少使用。大部分情况会使用wait和notify替代； 这里我使用一个线程来计算变量并更新窗口标题。主要代码如下：使用eclipse创建一个项目。为Activity添加onStart，onPause, onStop等方法，Activity是我们最常使用的一个类，也是android的核心类，为应用程序管理并显示一个屏幕，开发的人不应该对其陌生。Activity活动主要的方法有，onCreate，onStart，onStop，onPause，onResume， onRestart，onDestroy，onRestoreInstanceState，onSaveInstanceState，一般的执行顺序是，onCreate，onStart，onResume，当窗口不是最顶层时，执行onPause，onstop,为顶层时，执行onRestart，onResume，一直循环，直到onDestroy.如果保存窗口，重载onSaveInstanceState，并在进入时重载onRestoreInstanceState。这里我在Activity的方法onStart里创建线程： 01.MyThread myThread = new MyThread(); 02. myThread.start(); 在下面添加MyThread的实现代码： 01.public class MyThread extends Thread { 02. // 声明字符串变量 03. public MyThread() { 04. } 05. 06. @Override 07. public void start() { 08. super.start(); 09. } 10. [...]]]></description>
			<content:encoded><![CDATA[<p>android的应用程序支持多线程，多线程编程为我们充分利用系统资源提供了便利，同时也为设计复杂UI和耗时操作提供了途径，提升了安卓用户的使用体验。Android的多线程和JAVA没有多大变化，唯一的变化大概在于无法直接使用CANVAS修改屏幕元素，当然安卓为我们提供了surfaceview类来实现多线程中通过画布canvas修改屏幕。这为设计UI和开发游戏带来了方便。因此，研究和使用多线程编程，对我们深入学习安卓编程有着十分重要的作用。</p>
<p>线程的方法比较多，常用的有：</p>
<p>start()；</p>
<p>run()；</p>
<p>sleep()；</p>
<p>stop()；</p>
<p>destroy()；</p>
<p>join();</p>
<p>suspend()；</p>
<p>resume()；</p>
<p>yield()；<br />
wait()；<br />
notify()；</p>
<p>线程启动一定要使用start方法,线程操作使用run方法，线程休眠使用sleep方法，线程停止使用stop,线程销毁使用destroy方法,线程同步使用JOIN方法，前面三种最常用，一般来说这三种就可以满足大部分线程使用需求，run结束时线程自动死亡，stop,destroy虽然也能停止线程，但不推荐使用，,前者会产生异常，后者是强制终止，不会释放锁，一般会在RUN里设置一个状态信号来等其自动结束，这里使用volatile boolean bThreadRun。后面是暂停，继续，挂起，由于会产生死锁问题，很少使用。大部分情况会使用wait和notify替代；</p>
<p>这里我使用一个线程来计算变量并更新窗口标题。主要代码如下：使用eclipse创建一个项目。为Activity添加onStart，onPause, onStop等方法，Activity是我们最常使用的一个类，也是android的核心类，为应用程序管理并显示一个屏幕，开发的人不应该对其陌生。Activity活动主要的方法有，onCreate，onStart，onStop，onPause，onResume， onRestart，onDestroy，onRestoreInstanceState，onSaveInstanceState，一般的执行顺序是，onCreate，onStart，onResume，当窗口不是最顶层时，执行onPause，onstop,为顶层时，执行onRestart，onResume，一直循环，直到onDestroy.如果保存窗口，重载onSaveInstanceState，并在进入时重载onRestoreInstanceState。这里我在Activity的方法onStart里创建线程：</p>
<p>01.MyThread myThread = new MyThread();<br />
02. myThread.start();</p>
<p>在下面添加MyThread的实现代码：</p>
<p>01.public class MyThread extends Thread {<br />
02. // 声明字符串变量<br />
03. public MyThread() {<br />
04. }<br />
05.<br />
06. @Override<br />
07. public void start() {<br />
08. super.start();<br />
09. }<br />
10.<br />
11. // 线程的主要工作方法<br />
12. @Override<br />
13. public void run() {<br />
14. while (true) {<br />
15. try {<br />
16. sleep(5000);<br />
17. if (c &gt; ((1 &lt;&lt; 31) - 1)) {<br />
18. c = 0;<br />
19. } else {<br />
20. c++;<br />
21. }<br />
22. Message message = new Message();<br />
23. message.what = 1;<br />
24. mHandler.sendMessage(message);<br />
25. } catch (InterruptedException ex) {<br />
26. }<br />
27. }<br />
28. }<br />
29.<br />
30. }</p>
<p>实现updatetitle方法：</p>
<p>01.public void updateTitle() {<br />
02. setTitle("test thread " + c);<br />
03. }</p>
<p>这里没有使用updatetitle直接更新窗口，而是使用handler,这是因为直接使用是不安全的，会造成线程重启等问题。Android 引进了Handler 这个特殊的类，用它作为Runnable和Activity交互的桥梁，所以我们只能在run方法中发送Message,而在Handler里，通过不同的Message执行不同的任务。为程序添加handler；</p>
<p>01.private Handler mHandler = new Handler() {<br />
02. public void handleMessage(Message msg) {<br />
03. switch (msg.what) {<br />
04. case 1:<br />
05. updateTitle();<br />
06. break;<br />
07. }<br />
08. };<br />
09. };</p>
<p>最后完整的代码如下，使用线程处理数据，并把数据显示在窗口上：</p>
<p>01.package com.test;<br />
02.<br />
03.import android.app.Activity;<br />
04.import android.os.Bundle;<br />
05.import java.lang.Thread;<br />
06.import android.os.Message;<br />
07.import android.os.Handler;<br />
08.import android.graphics.Color;<br />
09.<br />
10.public class TestThreadActivity extends Activity {<br />
11. int c = Color.BLUE;<br />
12. MyThread myThread;<br />
13. volatile boolean bThreadRun = false;<br />
14.<br />
15. /** Called when the activity is first created. */<br />
16. @Override<br />
17. public void onCreate(Bundle savedInstanceState) {<br />
18. super.onCreate(savedInstanceState);<br />
19. setContentView(R.layout.main);<br />
20. }<br />
21.<br />
22. @Override<br />
23. protected void onRestoreInstanceState(android.os.Bundle savedInstanceState) {<br />
24. super.onRestoreInstanceState(savedInstanceState);<br />
25. }<br />
26.<br />
27. @Override<br />
28. protected void onSaveInstanceState(android.os.Bundle outState) {<br />
29. super.onSaveInstanceState(outState);<br />
30. }<br />
31.<br />
32. @Override<br />
33. protected void onStart() {<br />
34. super.onStart();<br />
35. myThread = new MyThread();<br />
36. myThread.start();<br />
37. bThreadRun = true;<br />
38. }<br />
39.<br />
40. @Override<br />
41. protected void onRestart() {<br />
42. super.onRestart();<br />
43. }<br />
44.<br />
45. @Override<br />
46. protected void onResume() {<br />
47. super.onResume();<br />
48. }<br />
49.<br />
50. @Override<br />
51. protected void onPause() {<br />
52. super.onPause();<br />
53. bThreadRun = false;<br />
54. // myThread.stop();<br />
55. }<br />
56.<br />
57. @Override<br />
58. protected void onStop() {<br />
59. super.onStop();<br />
60. onPause();<br />
61. }<br />
62.<br />
63. @Override<br />
64. protected void onDestroy() {<br />
65. super.onDestroy();<br />
66. // myThread.destroy();<br />
67. }<br />
68.<br />
69. private Handler mHandler = new Handler() {<br />
70. public void handleMessage(Message msg) {<br />
71. switch (msg.what) {<br />
72. case 1:<br />
73. updateTitle();<br />
74. break;<br />
75. }<br />
76. };<br />
77. };<br />
78.<br />
79. public void updateTitle() {<br />
80. setTitle("test thread " + c);<br />
81. setTitleColor(c);<br />
82. }<br />
83.<br />
84. public class MyThread extends Thread {<br />
85. // 声明字符串变量<br />
86. public MyThread() {<br />
87. }<br />
88.<br />
89. @Override<br />
90. public void start() {<br />
91. super.start();<br />
92. }<br />
93.<br />
94. // 线程的主要工作方法<br />
95. @Override<br />
96. public void run() {<br />
97. while (bThreadRun) {<br />
98. try {<br />
99. sleep(100);<br />
100. if (c &gt; ((1 &lt;&lt; 16) - 1)) {<br />
101. c = 0;<br />
102. } else {<br />
103. c += 100;<br />
104. }<br />
105. Message message = new Message();<br />
106. message.what = 1;<br />
107. mHandler.sendMessage(message);<br />
108. } catch (InterruptedException ex) {<br />
109. }<br />
110. }<br />
111. }<br />
112.<br />
113. }<br />
114.<br />
115.}</p>
<p>线程还有另外一种常用的方法是编写Runnable接口，这里对代码做一些修改，使用线程实现对主窗口重绘，全部代码如下：</p>
<p>01.package com.test;<br />
02.<br />
03.import android.app.Activity;<br />
04.import android.content.Context;<br />
05.import android.os.Bundle;<br />
06.import java.lang.Thread;<br />
07.import android.view.View;<br />
08.import android.graphics.Canvas;<br />
09.import android.graphics.Color;<br />
10.import android.graphics.Paint;<br />
11.import android.graphics.Paint.Style;<br />
12.import android.graphics.Rect;<br />
13.<br />
14.public class TestThreadActivity extends Activity {<br />
15. int c = Color.BLUE;<br />
16. MyThread myThread;<br />
17. volatile boolean bThreadRun = false;<br />
18. MyView mv;<br />
19.<br />
20. /** Called when the activity is first created. */<br />
21. @Override<br />
22. public void onCreate(Bundle savedInstanceState) {<br />
23. super.onCreate(savedInstanceState);<br />
24. // setContentView(R.layout.main);<br />
25. mv = new MyView(this);<br />
26. setContentView(mv);<br />
27. }<br />
28.<br />
29. public class MyView extends View {<br />
30. MyView(Context context) {<br />
31. super(context);<br />
32. }<br />
33.<br />
34. @Override<br />
35. protected void onDraw(Canvas canvas) {<br />
36. // TODO Auto-generated method stub<br />
37. super.onDraw(canvas);<br />
38.<br />
39. // 首先定义一个paint<br />
40. Paint paint = new Paint();<br />
41.<br />
42. // 绘制矩形区域-实心矩形<br />
43. // 设置颜色<br />
44. paint.setColor(c);<br />
45. // 设置样式-填充<br />
46. paint.setStyle(Style.FILL);<br />
47. // 绘制一个矩形<br />
48. canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);<br />
49. }<br />
50.<br />
51. }<br />
52.<br />
53. @Override<br />
54. protected void onRestoreInstanceState(android.os.Bundle savedInstanceState) {<br />
55. super.onRestoreInstanceState(savedInstanceState);<br />
56. }<br />
57.<br />
58. @Override<br />
59. protected void onSaveInstanceState(android.os.Bundle outState) {<br />
60. super.onSaveInstanceState(outState);<br />
61. }<br />
62.<br />
63. @Override<br />
64. protected void onStart() {<br />
65. super.onStart();<br />
66. //myThread = new MyThread();<br />
67. //myThread.start();<br />
68. new Thread (new MyThread()).start();<br />
69. bThreadRun = true;<br />
70. }<br />
71.<br />
72. @Override<br />
73. protected void onRestart() {<br />
74. super.onRestart();<br />
75. }<br />
76.<br />
77. @Override<br />
78. protected void onResume() {<br />
79. super.onResume();<br />
80. }<br />
81.<br />
82. @Override<br />
83. protected void onPause() {<br />
84. super.onPause();<br />
85. bThreadRun = false;<br />
86. // myThread.stop();<br />
87. }<br />
88.<br />
89. @Override<br />
90. protected void onStop() {<br />
91. super.onStop();<br />
92. onPause();<br />
93. }<br />
94.<br />
95. @Override<br />
96. protected void onDestroy() {<br />
97. super.onDestroy();<br />
98. // myThread.destroy();<br />
99. }<br />
100.<br />
101. public class MyThread implements Runnable{<br />
102. // 线程的主要工作方法<br />
103. @Override<br />
104. public void run() {<br />
105. while (bThreadRun) {<br />
106. try {<br />
107. Thread.sleep(500);<br />
108. if (c &gt; ((1 &lt;&lt; 31) - 1)) {<br />
109. c = 0;<br />
110. } else {<br />
111. c += 100;<br />
112. }<br />
113. mv.postInvalidate();<br />
114. } catch(InterruptedException e){<br />
115. }<br />
116. }<br />
117. }<br />
118.<br />
119. }<br />
120.<br />
121.}</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/07/android-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐两款特色手机应用 Mobile Alert &amp; Pocket</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/04/mobile-alert-amp-pocket/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/04/mobile-alert-amp-pocket/#comments</comments>
		<pubDate>Fri, 04 May 2012 02:54:02 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[移动应用]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/04/mobile-alert-amp-pocket/</guid>
		<description><![CDATA[推荐两款特色手机应用： 1、 Mobile Alert月黑风高独自走夜路时身后突然窜出一个黑影？荒郊野地里突然胸口一紧心脏不舒服？世事难料，人们总会碰到各种突发情况。这时候最重要的是保持冷静，其次才是用各种方式求救或者自救，比如拨打110或者120，通知你的亲人或好友，大声呼救。或者，你可以掏出手机点下这个神奇的红色按钮。 一家名为Avanquest Mobile Technologies的公司设计了这样一款为突发紧急事件服务的移动应用，打开这款应用，屏幕上会出现一个大大的红色按钮，点击它，软件开始倒数读秒，归零时，应用会启动一系列由用户设定的紧急措施。比如自动拨打当地的急救热线，通过GPS获取用户位置然后将其发送给指定的亲朋好友。对了，这款应用还会让手机发出刺耳的警报声，省的你求救把嗓子喊哑了。 市场上还有一些类似的紧急服务类应用，但是提供的服务不如Avanquest Mobile Technologies全面。值得一提的是，这家公司的盈利模式也不太一样。这款应用并不直接面向消费者，而是卖给便携设备的平台运营商，他们可以将这项应用集成到自己的服务中去，比如保险公司、旅行社。 2、 Pocket（原 read it later） 上网浏览，看见有意思的网页，但是又没有时间或者现在不想看怎么办？添加到收藏夹？不行，里面的收藏已经够多的了。从"历史"里面访问？太麻烦了吧！那还能怎么办？让Read It Later来帮你。碰到喜欢的网页，点一下下图所示的"以后再看"图标，这个网页就被放到Read it later的阅读列表中： 关掉浏览器。随时随地打开手机 Read it later 客户端，直接从列表里面选择，你牵挂着的网页就打开了。目前该程序已经支持很多和平台，Android，iOS。 但是随着用户量的增多，发现很多用户并非read it later, 而是保存在线视频留着“watch it later”，于是，"稍后阅读"工具Read it Later 最近迎来了华丽的变身，宣布正式更名为Pocket，同时发布新版应用Pocket并将整个服务免费。 相比之前黄黑主色调的"稳重"Read it Later，粉白双色搭配的Pocket显得素雅精致。Read It Later重新设计了应用的用户界面和操作方式，尝试打造新一个轻量、干净又富于美感的稍后阅读工具。在Pocket中，图片和视频内容的稍后看功能得到加强，用户不必再保存包含图片或视频内容的网址到阅读列表，专门的图片和视频保存项将为用户代劳这项工作。这项重要更新也是Read it Later上存储内容变化趋势的直接反映。据Read it Later之前发布的数据，YouTube已经成为其第一内容来源，越来越多的用户喜欢稍后看视频。内容类型扩展后，稍后阅读工具的搜索和标签功能就显得更加重要了。Pocket对原有的阅读条目组织方式进行了改进，并加强了内容的编辑和搜索功能。 需要注意的是，从Read it Later升级到Pocket的方式将有少许变化。如果你是Read it Later的付费用户，Pocket的更新将自动推送并安装；如果你是Read it Later的免费用户，则需要重新下载应用。因为，Pocket和原Read it Later是两个完全独立的应用。当然，原有的Read it Later帐户不会受到应用升级的影响，上面保存的内容会直接同步到新应用Pocket中。 Read [...]]]></description>
			<content:encoded><![CDATA[<p>推荐两款特色手机应用：</p>
<p>1、 Mobile Alert<br />月黑风高独自走夜路时身后突然窜出一个黑影？荒郊野地里突然胸口一紧心脏不舒服？世事难料，人们总会碰到各种突发情况。这时候最重要的是保持冷静，其次才是用各种方式求救或者自救，比如拨打110或者120，通知你的亲人或好友，大声呼救。或者，你可以掏出手机点下这个神奇的红色按钮。</p>
<p>一家名为<a target="_blank" rel="external nofollow" href="http://www.avanquest.com/USA/corporate/oem/">Avanquest Mobile Technologies</a>的公司设计了这样一款为突发紧急事件服务的<a target="_blank" rel="external nofollow" href="http://gigaom.com/mobile/help-avanquest-builds-a-panic-button-for-your-phone/">移动应用</a>，打开这款应用，屏幕上会出现一个大大的红色按钮，点击它，软件开始倒数读秒，归零时，应用会启动一系列由用户设定的紧急措施。比如自动拨打当地的急救热线，通过GPS获取用户位置然后将其发送给指定的亲朋好友。对了，这款应用还会让手机发出刺耳的警报声，省的你求救把嗓子喊哑了。</p>
<p><img height="602" width="307" src="http://img01.36krcnd.com/resize/w_678/h_1000/wp-content/uploads/2012/05/7a-alertscreen_normal.png" class="aligncenter size-full wp-image-105549" /></p>
<p>市场上还有一些类似的紧急服务类<a target="_blank" href="https://play.google.com/store/apps/details?id=com.smartphone2b.panicbutton&amp;feature=related_apps#?t=W251bGwsMSwxLDEwOSwiY29tLnNtYXJ0cGhvbmUyYi5wYW5pY2J1dHRvbiJd">应用</a>，但是提供的服务不如Avanquest Mobile Technologies全面。值得一提的是，这家公司的盈利模式也不太一样。这款应用并不直接面向消费者，而是卖给便携设备的平台运营商，他们可以将这项应用集成到自己的服务中去，比如保险公司、旅行社。</p>
<p>2、 Pocket（原 read it later）</p>
<p>上网浏览，看见有意思的网页，但是又没有时间或者现在不想看怎么办？添加到收藏夹？不行，里面的收藏已经够多的了。从"历史"里面访问？太麻烦了吧！那还能怎么办？让Read It Later来帮你。碰到喜欢的网页，点一下下图所示的"以后再看"图标，这个网页就被放到Read it later的阅读列表中： 关掉浏览器。随时随地打开手机 Read it later 客户端，直接从列表里面选择，你牵挂着的网页就打开了。目前该程序已经支持很多和平台，Android，iOS。</p>
<p>但是随着用户量的增多，发现很多用户并非read it later, 而是保存在线视频留着“watch it later”，于是，"稍后阅读"工具Read it Later 最近迎来了华丽的变身，宣布正式更名为<a target="_blank" rel="external nofollow" href="http://www.getpocket.com/">Pocket</a>，同时发布新版应用Pocket并将整个服务免费。</p>
<p>相比之前黄黑主色调的"稳重"Read it Later，粉白双色搭配的Pocket显得素雅精致。Read It Later重新设计了应用的用户界面和操作方式，尝试打造新一个轻量、干净又富于美感的稍后阅读工具。在Pocket中，图片和视频内容的稍后看功能得到加强，用户不必再保存包含图片或视频内容的网址到阅读列表，专门的图片和视频保存项将为用户代劳这项工作。这项重要更新也是Read it  Later上存储内容变化趋势的直接反映。据Read it Later<a href="http://www.36kr.com/p/96627.html">之前发布的数据</a>，YouTube已经成为其第一内容来源，越来越多的用户喜欢稍后看视频。内容类型扩展后，稍后阅读工具的搜索和标签功能就显得更加重要了。Pocket对原有的阅读条目组织方式进行了改进，并加强了内容的编辑和搜索功能。</p>
<p><img height="250" width="660" src="http://img02.36krcnd.com/resize/w_678/h_1000/wp-content/uploads/2012/04/PKTBlog_Graphics_0002_Content-Type.png" class="aligncenter size-full wp-image-100735" /></p>
<p>需要注意的是，从Read it Later升级到Pocket的方式将有少许变化。如果你是Read it Later的付费用户，Pocket的更新将自动推送并安装；如果你是Read it Later的免费用户，则需要重新下载应用。因为，Pocket和原Read it Later是两个完全独立的应用。当然，原有的Read it Later帐户不会受到应用升级的影响，上面保存的内容会直接同步到新应用Pocket中。</p>
<p>Read it Later创立于2007年，用户数超过450万，支持的设备覆盖iPhone, iPad, Android和Kindle Fire。新应用Pocket的下载地址：<a target="_blank" rel="external nofollow" href="http://getpocket.com/android">Android </a>| <a target="_blank" rel="external nofollow" href="http://getpocket.com/ios">iOS</a></p>
<p>参考来源：36氪， 巴士数码</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/04/mobile-alert-amp-pocket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我的Android游戏引擎 — Cyclone 第2章 Android开发环境与真机调试</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/22/android-cyclone-2-android/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/22/android-cyclone-2-android/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 09:28:46 +0000</pubDate>
		<dc:creator>andrewfan123</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/22/android-cyclone-2-android/</guid>
		<description><![CDATA[本章概要： 1、JDK、AndroidSDK、Eclipse以及相关插件的安装。 2、Android常用开发工具的使用方法介绍 3、第一个Android应用程序Hello World 2.1 开发环境搭建 Android应用程序程序框架是基于Java的，因此，我们首先需要Java的环境，也就是JDK，然后是开发Java的IDE（集成开发工具），我们选择Eclipse，这也是众多Android开发者所常用的开发工具。有了JDK和Eclipse，我们可以使用Eclipse来编写Java代码，并通过JDK来执行Java应用程序了。但是我们需要开发Android，还需要Android SDK，Android SDK可以用来模拟Android终端的运行环境，让我们在个人电脑上执行Android应用程序。一般来说，我们也不需要直接操作Android SDK，而是通过Google提供的一个Eclipse插件ADT(AndroidDevelopment Tools)来间接跟Android SDK打交道，我们只要告诉ADT我们Android SDK在本机上的存放目录即可。 2.1.1 JDK配置 1、开发Android需要JDK1.5以上，最好使用1.6版本，不要使用最新的1.7版本，JDK不是越新越好，SDK的开发人员也不太可能针对最新的JDK立刻进行兼容性测试和推出新的版本，因此尽量使用官方建议使用的版本，在这里，我们使用1.6。下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html 注意下载“Java SE Development Kit 6u**”中的任意一个SDK即可，下面的包含“Runtime Environment ”字样的链接是Java的运行环境，不过因为SDK都已经包含了Runtime Environment，因此你可以不需要下载他们。 如果Oracle的Java页面有更新，注意一点，进入主页之后，找寻“Previous Releases”，然后进去找“JavaSE 6”下载链接。 2、安装和配置JDK。下载之后双击安装包安装，结束之后。在桌面“我的电脑”图标上右键点击“属性”，在其“高级”标签下面找到“环境变量”，打开之后，在“系统变量”中的“Path”下添加你所安装的JDK路径的bin目录，比如默认安装在C盘，一般为“C:\Program Files\Java\jdk1.6.0_18\bin”，可能由于jdk版本不同，“jdk1.6.0_18”字段也相应不同。 配置好Path路径之后，你可以在“开始菜单”下的“运行”里键入“cmd”，打开命令，然后使用它来检查我们的安装是否完好。先键入“java”后回车，如果正常显示，结果会呈现“Usage: java [-options] class [args...]”等字样。再键入“javac”后回车，如果正常显示，结果会呈现“用法：javac ”等字样。如果键入“java -version”，则会出现与版本相关的讯息。当以上讯息显示正常，则表示我们现在可以使用“Javac”命令来编译我们的代码,可以使用“Java”命令来运行我们的程序，实际上这些执行命令均是我们上述Path所指定的bin目录下的相应可执行文件提供的。]]></description>
			<content:encoded><![CDATA[<p>本章概要：</p>
<p>1、JDK、AndroidSDK、Eclipse以及相关插件的安装。</p>
<p>2、Android常用开发工具的使用方法介绍</p>
<p>3、第一个Android应用程序Hello World</p>
<p>2.1 开发环境搭建</p>
<p>Android应用程序程序框架是基于Java的，因此，我们首先需要Java的环境，也就是JDK，然后是开发Java的IDE（集成开发工具），我们选择Eclipse，这也是众多Android开发者所常用的开发工具。有了JDK和Eclipse，我们可以使用Eclipse来编写Java代码，并通过JDK来执行Java应用程序了。但是我们需要开发Android，还需要Android SDK，Android SDK可以用来模拟Android终端的运行环境，让我们在个人电脑上执行Android应用程序。一般来说，我们也不需要直接操作Android SDK，而是通过Google提供的一个Eclipse插件ADT(AndroidDevelopment Tools)来间接跟Android SDK打交道，我们只要告诉ADT我们Android SDK在本机上的存放目录即可。</p>
<p>2.1.1 JDK配置</p>
<p>1、开发Android需要JDK1.5以上，最好使用1.6版本，不要使用最新的1.7版本，JDK不是越新越好，SDK的开发人员也不太可能针对最新的JDK立刻进行兼容性测试和推出新的版本，因此尽量使用官方建议使用的版本，在这里，我们使用1.6。下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html</p>
<p>注意下载“Java SE Development Kit 6u**”中的任意一个SDK即可，下面的包含“Runtime Environment ”字样的链接是Java的运行环境，不过因为SDK都已经包含了Runtime Environment，因此你可以不需要下载他们。<br />
如果Oracle的Java页面有更新，注意一点，进入主页之后，找寻“Previous Releases”，然后进去找“JavaSE 6”下载链接。</p>
<p><img src="http://images.csdn.net/20120322/88.jpg" alt="null" /></p>
<p>2、安装和配置JDK。下载之后双击安装包安装，结束之后。在桌面“我的电脑”图标上右键点击“属性”，在其“高级”标签下面找到“环境变量”，打开之后，在“系统变量”中的“Path”下添加你所安装的JDK路径的bin目录，比如默认安装在C盘，一般为“C:\Program Files\Java\jdk1.6.0_18\bin”，可能由于jdk版本不同，“jdk1.6.0_18”字段也相应不同。</p>
<p>配置好Path路径之后，你可以在“开始菜单”下的“运行”里键入“cmd”，打开命令，然后使用它来检查我们的安装是否完好。先键入“java”后回车，如果正常显示，结果会呈现“Usage: java [-options] class [args...]”等字样。再键入“javac”后回车，如果正常显示，结果会呈现“用法：javac ”等字样。如果键入“java -version”，则会出现与版本相关的讯息。当以上讯息显示正常，则表示我们现在可以使用“Javac”命令来编译我们的代码,可以使用“Java”命令来运行我们的程序，实际上这些执行命令均是我们上述Path所指定的bin目录下的相应可执行文件提供的。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/22/android-cyclone-2-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>android 3D 游戏实现之再谈碰撞</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/22/android-3d/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/22/android-3d/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 04:31:03 +0000</pubDate>
		<dc:creator>simdanfeg</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/22/android-3d/</guid>
		<description><![CDATA[接着上一篇jpct-ae，发现已经过去半年，现在都2012了。笔者在这过去的半年里大部分是为了生计奔波，大四真是一个令人难忘的学期。几经辗转，终于在自己喜欢的岗位上尽职尽责了。既然已定了饭碗，就也不自量力学着别人著书立说，或也能青史留下一笔。现在就一起去看看怎么个“深入”法。 1,深入碰撞原理 jpct-ae引擎的碰撞分为：线碰撞、球体碰撞、随圆碰撞 三种，今天的代码原为jse版本，笔者将其转为android版并详加注释，希望对大家有帮助。 2,代码解析 01.package com.threed.jpct.example; 02. 03.import java.lang.reflect.Field; 04. 05.import javax.microedition.khronos.egl.EGL10; 06.import javax.microedition.khronos.egl.EGLConfig; 07.import javax.microedition.khronos.egl.EGLDisplay; 08.import javax.microedition.khronos.opengles.GL10; 09. 10.import android.app.Activity; 11.import android.opengl.GLSurfaceView; 12.import android.os.Bundle; 13.import android.view.KeyEvent; 14. 15.import com.threed.jpct.Camera; 16.import com.threed.jpct.Config; 17.import com.threed.jpct.FrameBuffer; 18.import com.threed.jpct.Light; 19.import com.threed.jpct.Logger; 20.import com.threed.jpct.Object3D; 21.import com.threed.jpct.Primitives; 22.import com.threed.jpct.RGBColor; 23.import com.threed.jpct.SimpleVector; 24.import com.threed.jpct.Texture; 25.import com.threed.jpct.World; 26.import com.threed.jpct.util.MemoryHelper; 27. 28./** [...]]]></description>
			<content:encoded><![CDATA[<p>接着上一篇jpct-ae，发现已经过去半年，现在都2012了。笔者在这过去的半年里大部分是为了生计奔波，大四真是一个令人难忘的学期。几经辗转，终于在自己喜欢的岗位上尽职尽责了。既然已定了饭碗，就也不自量力学着别人著书立说，或也能青史留下一笔。现在就一起去看看怎么个“深入”法。</p>
<p>1,深入碰撞原理</p>
<p>jpct-ae引擎的碰撞分为：线碰撞、球体碰撞、随圆碰撞 三种，今天的代码原为jse版本，笔者将其转为android版并详加注释，希望对大家有帮助。</p>
<p>2,代码解析<br />
01.package com.threed.jpct.example;<br />
02.<br />
03.import java.lang.reflect.Field;<br />
04.<br />
05.import javax.microedition.khronos.egl.EGL10;<br />
06.import javax.microedition.khronos.egl.EGLConfig;<br />
07.import javax.microedition.khronos.egl.EGLDisplay;<br />
08.import javax.microedition.khronos.opengles.GL10;<br />
09.<br />
10.import android.app.Activity;<br />
11.import android.opengl.GLSurfaceView;<br />
12.import android.os.Bundle;<br />
13.import android.view.KeyEvent;<br />
14.<br />
15.import com.threed.jpct.Camera;<br />
16.import com.threed.jpct.Config;<br />
17.import com.threed.jpct.FrameBuffer;<br />
18.import com.threed.jpct.Light;<br />
19.import com.threed.jpct.Logger;<br />
20.import com.threed.jpct.Object3D;<br />
21.import com.threed.jpct.Primitives;<br />
22.import com.threed.jpct.RGBColor;<br />
23.import com.threed.jpct.SimpleVector;<br />
24.import com.threed.jpct.Texture;<br />
25.import com.threed.jpct.World;<br />
26.import com.threed.jpct.util.MemoryHelper;<br />
27.<br />
28./**<br />
29. * 此示例展示了jpct-ae工作在android版本的碰撞检测<br />
30. *<br />
31. * @author ibm<br />
32. *<br />
33. */<br />
34.public class Collision extends Activity {<br />
35. private static Collision master = null; // activity对象<br />
36. private GLSurfaceView mGLView; // SurfaceView的实现，它使用专用表面显示OpenGL渲染。<br />
37. private MyRenderer renderer = null;// 自定义渲染<br />
38.<br />
39. private static final float DAMPING = 0.1f; // 重力<br />
40. private static final float SPEED = 1f; // 速度<br />
41. private static final float MAXSPEED = 1f; // 最大速度<br />
42.<br />
43. private FrameBuffer fb = null; // FrameBuffer对象<br />
44. private World world = null; // World对象<br />
45.<br />
46. private Object3D plane = null; // 平面<br />
47. private Object3D ramp = null; // 斜面<br />
48. private Object3D cube = null; // 立方体<br />
49. private Object3D cube2 = null; // 立方体<br />
50. private Object3D sphere = null; // 球体<br />
51.<br />
52. private boolean up = false; // 方向上下左右<br />
53. private boolean down = false;<br />
54. private boolean left = false;<br />
55. private boolean right = false;<br />
56.<br />
57. private SimpleVector moveRes = new SimpleVector(0, 0, 0);// 三维矢量<br />
58. private SimpleVector ellipsoid = new SimpleVector(2, 2, 2);// 椭球<br />
59.<br />
60. private RGBColor back = new RGBColor(50, 50, 100); // 颜色<br />
61.<br />
62. private Camera cam; // 记录视野、位置及方向<br />
63.<br />
64. private long time = System.currentTimeMillis(); // 当前毫秒数<br />
65. private long fps = 0; // 帧/秒<br />
66.<br />
67. protected void onCreate(Bundle savedInstanceState) {<br />
68.<br />
69. Logger.log("onCreate");<br />
70.<br />
71. if (master != null) {<br />
72. copy(master);<br />
73. }<br />
74.<br />
75. super.onCreate(savedInstanceState);<br />
76. // 实例化GLSurfaceView<br />
77. mGLView = new GLSurfaceView(getApplication());<br />
78. // 使用自己实现的 EGLConfigChooser,该实现必须在setRenderer(renderer)之前<br />
79. // 如果没有setEGLConfigChooser方法被调用，则默认情况下，视图将选择一个与当前android.view.Surface兼容至少16位深度缓冲深度EGLConfig。<br />
80. mGLView.setEGLConfigChooser(new GLSurfaceView.EGLConfigChooser() {<br />
81. public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {<br />
82. int[] attributes = new int[] { EGL10.EGL_DEPTH_SIZE, 16,<br />
83. EGL10.EGL_NONE };<br />
84. EGLConfig[] configs = new EGLConfig[1];<br />
85. int[] result = new int[1];<br />
86. egl.eglChooseConfig(display, attributes, configs, 1, result);<br />
87. return configs[0];<br />
88. }<br />
89. });<br />
90.<br />
91. // 实例化MyRenderer<br />
92. renderer = new MyRenderer();<br />
93. // 设置View的渲染器，同时启动线程调用渲染，以至启动渲染<br />
94. mGLView.setRenderer(renderer);<br />
95. // 设置一个明确的视图<br />
96. setContentView(mGLView);<br />
97.<br />
98. }<br />
99.<br />
100. @Override<br />
101. protected void onPause() { // puase<br />
102. super.onPause();<br />
103. mGLView.onPause();<br />
104. }<br />
105.<br />
106. @Override<br />
107. protected void onResume() { // resume<br />
108. super.onResume();<br />
109. mGLView.onResume();<br />
110. }<br />
111.<br />
112. @Override<br />
113. protected void onStop() {// stop<br />
114. super.onStop();<br />
115. }<br />
116.<br />
117. @Override<br />
118. public boolean onKeyDown(int keyCode, KeyEvent event) { // 按键处理，当上下左右中的一个按下时，则将相应的变量置true<br />
119. switch (keyCode) {<br />
120. case KeyEvent.KEYCODE_DPAD_UP:<br />
121. up = true;<br />
122. break;<br />
123. case KeyEvent.KEYCODE_DPAD_DOWN:<br />
124. down = true;<br />
125. break;<br />
126. case KeyEvent.KEYCODE_DPAD_LEFT:<br />
127. left = true;<br />
128. break;<br />
129. case KeyEvent.KEYCODE_DPAD_RIGHT:<br />
130. right = true;<br />
131. break;<br />
132. }<br />
133. return super.onKeyDown(keyCode, event);<br />
134. }<br />
135.<br />
136. @Override<br />
137. public boolean onKeyUp(int keyCode, KeyEvent event) { // 当松开按键时，才会<br />
138. up = false;<br />
139. down = false;<br />
140. left = false;<br />
141. right = false;<br />
142. return super.onKeyUp(keyCode, event);<br />
143. }<br />
144.<br />
145. private void copy(Object src) {<br />
146. try {<br />
147. // 打印日志<br />
148. Logger.log("Copying data from master Activity!");<br />
149. // 返回一个数组，其中包含目前这个类的的所有字段的Filed对象<br />
150. Field[] fs = src.getClass().getDeclaredFields();<br />
151. // 遍历fs数组<br />
152. for (Field f : fs) {<br />
153. // 尝试设置无障碍标志的值。标志设置为false将使访问检查，设置为true，将其禁用。<br />
154. f.setAccessible(true);<br />
155. // 将取到的值全部装入当前类中<br />
156. f.set(this, f.get(src));<br />
157. }<br />
158. } catch (Exception e) {<br />
159. // 抛出运行时异常<br />
160. throw new RuntimeException(e);<br />
161. }<br />
162.<br />
163. }<br />
164.<br />
165. protected boolean isFullscreenOpaque() {<br />
166. return true;<br />
167. }<br />
168.<br />
169. class MyRenderer implements GLSurfaceView.Renderer {<br />
170.<br />
171. public MyRenderer() {<br />
172. Config.maxPolysVisible = 500; // 最多绘制500个多边形<br />
173. Config.farPlane = 1500; // 最远的合适平面为1500<br />
174. Config.glTransparencyMul = 0.1f;// 在jpct-ae中修改参数计算透明度，公式为trans=offset+objTrans*mul,默认的偏移量为0.1f<br />
175. Config.glTransparencyOffset = 0.1f;// 偏移量,默认为0.1f<br />
176. Config.useVBO = true;// 使用顶点缓冲区代替普通的顶点数组，在某些机器上会变快，默认为true(新版本改为true,原为false)<br />
177. Texture.defaultTo4bpp(true);// ??<br />
178. Texture.defaultToMipmapping(true);// 所有的纹理默认使用mipmaps，默认设置是false<br />
179. }<br />
180.<br />
181. public void onSurfaceChanged(GL10 gl, int w, int h) {<br />
182. if (fb != null) {// 如果fb不为null<br />
183. fb.dispose(); // 销毁清理<br />
184. }<br />
185. fb = new FrameBuffer(gl, w, h); // 在使用前创建一个宽w,高h,内容为支持opengl<br />
186. // 1.0/1.1的FrameBuffer<br />
187. world = new World();// 创建一个新的"世界"。world就像充满对象与光线空的房间<br />
188. if (master == null) { // 如果master对象为空<br />
189. plane = Primitives.getPlane(20, 10); // 得到平面<br />
190. plane.rotateX((float) Math.PI / 2); // 从jpct-ae的坐标旋转到正常坐标系<br />
191. ramp = Primitives.getCube(20); // 得到立方体<br />
192. ramp.rotateX((float) Math.PI / 2);<br />
193. sphere = Primitives.getSphere(30); // 得到球体<br />
194. sphere.translate(-50, 10, 50);<br />
195. cube2 = Primitives.getCube(20);// 立方体<br />
196. cube2.translate(60, -20, 60);<br />
197. cube = Primitives.getCube(2); // 我们可操作的cube,参数表示立方体的缩放<br />
198. cube.translate(-50, -10, -50);<br />
199.<br />
200. plane.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS); // 设置碰撞模式为被碰撞<br />
201. ramp.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);<br />
202. sphere.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);<br />
203. cube2.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);<br />
204. cube.setCollisionMode(Object3D.COLLISION_CHECK_SELF); // 设置碰撞模式为主动碰撞<br />
205.<br />
206. world.addObject(plane); // 将"物体"放到"世界"里<br />
207. world.addObject(ramp);<br />
208. world.addObject(cube);<br />
209. world.addObject(sphere);<br />
210. world.addObject(cube2);<br />
211.<br />
212. Light light = new Light(world); // 为这个"世界"带来光照<br />
213. light.setPosition(new SimpleVector(0, -80, -0)); // 设置光照坐标系<br />
214. light.setIntensity(140, 120, 120); // 设置光照强度<br />
215.<br />
216. cam = world.getCamera(); // 得到当前的Camera<br />
217. cam.moveCamera(Camera.CAMERA_MOVEOUT, 100); // 相对于当前位置向后移动100<br />
218. cam.moveCamera(Camera.CAMERA_MOVEUP, 100); // 向上移动100<br />
219.<br />
220. world.setAmbientLight(20, 20, 20);// 设置环境光<br />
221. MemoryHelper.compact(); // 回收内存<br />
222. if (master == null) { // 实例化Collision对象<br />
223. Logger.log("Saving master Activity!");<br />
224. master = Collision.this;<br />
225. }<br />
226. }<br />
227. }<br />
228.<br />
229. public void onSurfaceCreated(GL10 gl, EGLConfig config) {<br />
230. }<br />
231.<br />
232. public void onDrawFrame(GL10 gl) {<br />
233. move(); // 移动<br />
234.<br />
235. cam.setPositionToCenter(cube);<br />
236. cam.align(cube);<br />
237. cam.rotateCameraX((float) Math.toRadians(30));<br />
238. cam.moveCamera(Camera.CAMERA_MOVEOUT, 100);<br />
239.<br />
240. fb.clear(back);<br />
241. world.renderScene(fb);<br />
242. world.draw(fb);<br />
243. fb.display();<br />
244.<br />
245. if (System.currentTimeMillis() - time &gt;= 1000) {<br />
246. Logger.log(fps + "fps");<br />
247. fps = 0;<br />
248. time = System.currentTimeMillis();<br />
249. }<br />
250. fps++;<br />
251. }<br />
252.<br />
253. public void move() { // 碰撞与移动的设定<br />
254. if (up) { // 按向上方向键<br />
255. SimpleVector t = cube.getZAxis(); // 取得cube的Z轴<br />
256. t.scalarMul(SPEED);// 向里移动<br />
257. moveRes.add(t);<br />
258. }<br />
259. if (down) {<br />
260. SimpleVector t = cube.getZAxis();<br />
261. t.scalarMul(-SPEED); // 向外移动<br />
262. moveRes.add(t);<br />
263. }<br />
264. if (left) {<br />
265. cube.rotateY((float) Math.toRadians(-1));// 向左旋转<br />
266. }<br />
267. if (right) {<br />
268. cube.rotateY((float) Math.toRadians(1)); // 向右旋转<br />
269. }<br />
270.<br />
271. // avoid high speeds;<br />
272. if (moveRes.length() &gt; MAXSPEED) {<br />
273. moveRes.makeEqualLength(new SimpleVector(0, 0, MAXSPEED)); // 设定最大长度为MAXSPEED<br />
274. }<br />
275. cube.translate(0, -0.02f, 0);// 向上移动0.02f<br />
276. moveRes = cube.checkForCollisionEllipsoid(moveRes, ellipsoid, 8); // 设置碰撞<br />
277. cube.translate(moveRes); // 旋转<br />
278.<br />
279. // 重力感应<br />
280. SimpleVector t = new SimpleVector(0, 1, 0);<br />
281. t = cube.checkForCollisionEllipsoid(t, ellipsoid, 1);<br />
282. cube.translate(t);<br />
283.<br />
284. // 阻尼- -#，考虑的还真周到<br />
285. if (moveRes.length() &gt; DAMPING) { // 如果按上方向键或下方向键,产生阻尼<br />
286. moveRes.makeEqualLength(new SimpleVector(0, 0, DAMPING));<br />
287. } else {<br />
288. moveRes = new SimpleVector(0, 0, 0); // 否则不产生<br />
289. }<br />
290. }<br />
291. }<br />
292.}</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/22/android-3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 游戏开发坐标</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/22/android-7/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/22/android-7/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 04:30:54 +0000</pubDate>
		<dc:creator>freestyleboy21</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/22/android-7/</guid>
		<description><![CDATA[1、Android中的坐标系统 在Android系统中，屏幕的左上角是坐标系统的原点（0,0）坐标。原点向右延伸是X轴正方向，原点向下延伸是Y轴正方向。 2、屏幕的宽和高 为了在屏幕中的合适位置绘制图形，我们需要使用屏幕的宽和高作为参考，来确定绘制图形的位置。要获得屏幕的宽和高，首先从Activity对象中获得WindowManager对象，然后从WindowManager对象中获得Display对象，再从Display对象中获得屏幕的宽和高。 // 获得屏幕的宽和高 WindowManager manger = getWindowManager(); Diaplay diaplay = manager.getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); 3、边界的确定 在很多游戏中都需要对绘制在屏幕中格的视图进行边界的确定。例如，在射击类游戏中我们就需要判断玩家、敌人、子弹等视图的边界位置。边界的判断无非是对上、下、左、右屏幕边界的判断。 如果当前视图的X坐标小于零，则当前视图左越界。如果当前视图的X坐标大于屏幕的宽，则右越界。 如果当前视图的Y坐标小于零，则当前视图上越界。如果当前视图的Y坐标大于屏幕的高，则下越界。 4、视图的移动 游戏的实现过程其实很简单，就是不但改变视图的位置坐标，然后重新将他们绘制在屏幕上。不过这种坐标的位置改变和绘制过程是通过一定逻辑来控制实现的。视图的移动就是通过改变视图坐标位置来实现的。改变了坐标再重新绘制，给我们的感觉是视图在移动。 如果视图水平向左移动，X坐标减小；如果视图水平向右移动，X坐标增大。 如果视图垂直向上移动，Y坐标减小；如果视图垂直向下移动，Y坐标增大。 5、Android游戏开发基本框架 Android游戏开发框架基本对象有三个：一是图层对象，该图层对象定义图层的宽和高、图层的位置、图层的移动以及绘制方法等；二是视图对象，视图对象的主要作用是绘制图层对象、相应键盘事件和处理视图线程等；三是一个Activity控制游戏流程，例如启动游戏、暂停游戏、停止游戏等。]]></description>
			<content:encoded><![CDATA[<p>1、Android中的坐标系统<br />
在Android系统中，屏幕的左上角是坐标系统的原点（0,0）坐标。原点向右延伸是X轴正方向，原点向下延伸是Y轴正方向。</p>
<p>2、屏幕的宽和高</p>
<p>为了在屏幕中的合适位置绘制图形，我们需要使用屏幕的宽和高作为参考，来确定绘制图形的位置。要获得屏幕的宽和高，首先从Activity对象中获得WindowManager对象，然后从WindowManager对象中获得Display对象，再从Display对象中获得屏幕的宽和高。</p>
<p>// 获得屏幕的宽和高</p>
<p>WindowManager manger = getWindowManager();</p>
<p>Diaplay diaplay = manager.getDefaultDisplay();</p>
<p>int screenWidth = display.getWidth();</p>
<p>int screenHeight = display.getHeight();</p>
<p>3、边界的确定</p>
<p>在很多游戏中都需要对绘制在屏幕中格的视图进行边界的确定。例如，在射击类游戏中我们就需要判断玩家、敌人、子弹等视图的边界位置。边界的判断无非是对上、下、左、右屏幕边界的判断。</p>
<p>如果当前视图的X坐标小于零，则当前视图左越界。如果当前视图的X坐标大于屏幕的宽，则右越界。</p>
<p>如果当前视图的Y坐标小于零，则当前视图上越界。如果当前视图的Y坐标大于屏幕的高，则下越界。</p>
<p>4、视图的移动</p>
<p>游戏的实现过程其实很简单，就是不但改变视图的位置坐标，然后重新将他们绘制在屏幕上。不过这种坐标的位置改变和绘制过程是通过一定逻辑来控制实现的。视图的移动就是通过改变视图坐标位置来实现的。改变了坐标再重新绘制，给我们的感觉是视图在移动。</p>
<p>如果视图水平向左移动，X坐标减小；如果视图水平向右移动，X坐标增大。</p>
<p>如果视图垂直向上移动，Y坐标减小；如果视图垂直向下移动，Y坐标增大。</p>
<p>5、Android游戏开发基本框架</p>
<p>Android游戏开发框架基本对象有三个：一是图层对象，该图层对象定义图层的宽和高、图层的位置、图层的移动以及绘制方法等；二是视图对象，视图对象的主要作用是绘制图层对象、相应键盘事件和处理视图线程等；三是一个Activity控制游戏流程，例如启动游戏、暂停游戏、停止游戏等。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/22/android-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>android+unity游戏开发基础之场景的切换</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/20/androidunity/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/20/androidunity/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 05:25:54 +0000</pubDate>
		<dc:creator>dlnuchunge</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/20/androidunity/</guid>
		<description><![CDATA[快一个星期没写博客了，主要是我去学C#了，还有就是我发现我最基本的东西没学好，所以稍微补了补，呵呵~~~ 下面我们就来个 基础吧，就是场景的切换，类似于android中activity的切换。下面来看看吧。 切换必须具备的有：1.两个场景或以上， 2.Application.LoadLevel(x)//x可以是场景名或者是场景号。3.那就是一个事件触发。 场景menu 场景yaya 场景yaya1 下面就来贴贴代码了： 01.using UnityEngine; 02.using System.Collections; 03. 04.public class menu : MonoBehaviour { 05. 06. bool flag; 07. void Start () { 08. DontDestroyOnLoad(this);//这个作用是场景切换时，一下代码不撤销 01. flag=true; 02. } 03. 04. void Update () { 05. if(Input.GetKeyDown(KeyCode.Space)){ 06. if(flag){ 07. flag=false; 08. } 09. else{ 10. flag=true; 11. } [...]]]></description>
			<content:encoded><![CDATA[<p>快一个星期没写博客了，主要是我去学C#了，还有就是我发现我最基本的东西没学好，所以稍微补了补，呵呵~~~</p>
<p>下面我们就来个 基础吧，就是场景的切换，类似于android中activity的切换。下面来看看吧。</p>
<p>切换必须具备的有：1.两个场景或以上， 2.Application.LoadLevel(x)//x可以是场景名或者是场景号。3.那就是一个事件触发。</p>
<p><img src="http://images.csdn.net/20120316/1.jpg" alt="null" /></p>
<p>场景menu</p>
<p><img src="http://images.csdn.net/20120316/2.jpg" alt="null" /></p>
<p>场景yaya</p>
<p><img src="http://images.csdn.net/20120316/3.jpg" alt="null" /></p>
<p>场景yaya1</p>
<p><img src="http://images.csdn.net/20120316/4.jpg" alt="null" /><br />
下面就来贴贴代码了：<br />
01.using UnityEngine;<br />
02.using System.Collections;<br />
03.<br />
04.public class menu : MonoBehaviour {<br />
05.<br />
06. bool flag;<br />
07. void Start () {<br />
08. DontDestroyOnLoad(this);//这个作用是场景切换时，一下代码不撤销</p>
<p>01. flag=true;<br />
02. }<br />
03.<br />
04. void Update () {<br />
05. if(Input.GetKeyDown(KeyCode.Space)){<br />
06. if(flag){<br />
07. flag=false;<br />
08. }<br />
09. else{<br />
10. flag=true;<br />
11. }<br />
12. }<br />
13. }<br />
14. void OnGUI(){<br />
15. if(!flag){<br />
16. return;<br />
17. }<br />
18. if(GUI.Button(new Rect(Screen.width/2-50,Screen.height/2-30,40,60),"yaya1")){<br />
19. Application.LoadLevel(1);<br />
20. }<br />
21. if(GUI.Button(new Rect(Screen.width/2,Screen.height/2-30,40,60),"yaya2")){<br />
22. Application.LoadLevel(2);<br />
23. }<br />
24. if(GUI.Button(new Rect(Screen.width/2+50,Screen.height/2-30,40,60),"Quit")){<br />
25. Application.Quit();<br />
26. }<br />
27. }<br />
28.}<br />
把以上代码绑定在第一个场景（menu）里面；<br />
我们解释一下代码</p>
<p>DontDestroyOnLoad(this);//这个作用是场景切换时，一下代码不撤销，而不是场景中的游戏对象不撤销</p>
<p>Application.Quit(); 退出</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/20/androidunity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android 4.0.3 ICS在x86平台上的安装攻略</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/03/11/android-403-icsx86/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/03/11/android-403-icsx86/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 13:03:08 +0000</pubDate>
		<dc:creator>avensue</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[其他]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Android x86]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/03/11/android-403-icsx86/</guid>
		<description><![CDATA[早在去年底，ANDROID X86计划就已经开始了。最初释放的是Android4.0，通过Google group下载。最初的版本不是太好。最近Android4.0.3 也出了，比前作更稳定，而且支持Wifi,INTEL 硬件加速，文件压缩。ext3/ext2/ntfs/fat32 等格式等等。大部分Netbook都可以安装这个。 我们可以通过制作一个U盘启动盘来在NETBOOK上运行安卓ICS 下面我简单介绍下安装部分。 目前供下载的Android 4.0.3 x86版本有以下几个，我建议用ASUS那个，我朋友机器是AMD的，结果安装AMD那个版本跑不起来。安装了ASUS的却没问题。因此建议用ASUS的版本 android-x86-4.0-asus_laptop-20120101.iso android-x86-4.0-eeepc-20120101.iso android-x86-4.0-amd_brazos-20120101.iso 1. U盘启动盘的制作。 由于大部分小本本是没有光驱的，所以只有靠U盘启动，制作U盘启动很容易。 请先到http://unetbootin.sourceforge.net/ 按照你的系统环境下载UNETBOOTIN, 有WIN/MAC/LINUX等等。下载后解压到一个目录 然后将FAT32格式的U盘插入你的电脑，启动UNETBOOTIN软件，选择你放ANDROID IOS的路径，再选择U盘盘符。点OK。一张启动盘就创建好了。 2. U盘启动ANDROID 4.0.3 这个步骤很简单，插上U盘，重启机器，注意你可能需要先进入BIOS里面，将你电脑的启动顺序改成USB启动，如下图 然后再启动电脑。要是一切顺利。就会看到下面几个选项。选择不安装就启动ANDROID好了 然后你就会看到这个图拉。 然后会像真正的安卓机器一样，让你建立GOOGLE帐号等一系列设置。你可以直接忽略。（请注意要是你始终停留在这个界面，那就说明你下的IOS和你的机器不匹配。我的AMD机器就是停在这一步了。 如果一切正常，那么你会看到ANDROID 4.0.3的界面了。其实和ANDROID3差别不大。只是进入关于时候，你能看到4.03这个版本号 注意别在VMWARE里面装。你最好用U盘启动来装。VMWARE里面装很可能失败的 经过一系列基本设置。比如设置WIFI （是的，这个系统支持WIFI)，还有下载好安卓市场等等。你就可以开装软件。大部分软件都能安装的 装了几个小插件和程序。上网也没问题 但是这套系统似乎并不支持触屏。尝试了2台机器都不支持。 这个原版的对VB支持不好。不过有其他开发者的改进版似乎完美支持VB。给出网址在这里 http://www.buildroid.org/blog/]]></description>
			<content:encoded><![CDATA[<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/1.jpg"></a>早在去年底，ANDROID X86计划就已经开始了。最初释放的是Android4.0，通过Google group下载。最初的版本不是太好。最近Android4.0.3 也出了，比前作更稳定，而且支持Wifi,INTEL 硬件加速，文件压缩。ext3/ext2/ntfs/fat32 等格式等等。大部分Netbook都可以安装这个。</p>
<p>我们可以通过制作一个U盘启动盘来在NETBOOK上运行安卓ICS</p>
<p>下面我简单介绍下安装部分。</p>
<p>目前供下载的Android 4.0.3 x86版本有以下几个，我建议用ASUS那个，我朋友机器是AMD的，结果安装AMD那个版本跑不起来。安装了ASUS的却没问题。因此建议用ASUS的版本</p>
<p><a href="http://code.google.com/p/android-x86/downloads/detail?name=android-x86-4.0-asus_laptop-20120101.iso&amp;can=1&amp;q=">android-x86-4.0-asus_laptop-20120101.iso</a></p>
<p><a href="http://code.google.com/p/android-x86/downloads/detail?name=android-x86-4.0-eeepc-20120101.iso&amp;can=1&amp;q=">android-x86-4.0-eeepc-20120101.iso</a></p>
<p><a href="http://code.google.com/p/android-x86/downloads/detail?name=android-x86-4.0-amd_brazos-20120101.iso&amp;can=1&amp;q=">android-x86-4.0-amd_brazos-20120101.iso</a></p>
<p>1. U盘启动盘的制作。</p>
<p>由于大部分小本本是没有光驱的，所以只有靠U盘启动，制作U盘启动很容易。</p>
<p>请先到<a href="http://unetbootin.sourceforge.net/">http://unetbootin.sourceforge.net/</a> 按照你的系统环境下载UNETBOOTIN, 有WIN/MAC/LINUX等等。下载后解压到一个目录</p>
<p>然后将FAT32格式的U盘插入你的电脑，启动UNETBOOTIN软件，选择你放ANDROID IOS的路径，再选择U盘盘符。点OK。一张启动盘就创建好了。</p>
<p>2. U盘启动ANDROID 4.0.3</p>
<p>这个步骤很简单，插上U盘，重启机器，注意你可能需要先进入BIOS里面，将你电脑的启动顺序改成USB启动，如下图</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/1.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/1.jpg" alt="" width="480" height="355" /></a></p>
<p>然后再启动电脑。要是一切顺利。就会看到下面几个选项。选择不安装就启动ANDROID好了</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/2.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/2.jpg" alt="" width="622" height="361" /></a></p>
<p>然后你就会看到这个图拉。</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/11.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/11.jpg" alt="" width="296" height="150" /></a></p>
<p>然后会像真正的安卓机器一样，让你建立GOOGLE帐号等一系列设置。你可以直接忽略。（请注意要是你始终停留在这个界面，那就说明你下的IOS和你的机器不匹配。我的AMD机器就是停在这一步了。</p>
<p>如果一切正常，那么你会看到ANDROID 4.0.3的界面了。其实和ANDROID3差别不大。只是进入关于时候，你能看到4.03这个版本号</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/12.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/12.jpg" alt="" width="622" /></a></p>
<p>注意别在VMWARE里面装。你最好用U盘启动来装。VMWARE里面装很可能失败的</p>
<p>经过一系列基本设置。比如设置WIFI （是的，这个系统支持WIFI)，还有下载好安卓市场等等。你就可以开装软件。大部分软件都能安装的</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/3h.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/3h.jpg" alt="" width="622" /></a></p>
<p>装了几个小插件和程序。上网也没问题</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/13.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/02/13.jpg" alt="" width="622" /></a></p>
<p>但是这套系统似乎并不支持触屏。尝试了2台机器都不支持。</p>
<p>这个原版的对VB支持不好。不过有其他开发者的改进版似乎完美支持VB。给出网址在这里</p>
<p><a href="http://www.buildroid.org/blog/">http://www.buildroid.org/blog/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/03/11/android-403-icsx86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:59:10 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[Android x86]]></category>
		<category><![CDATA[Android开发]]></category>
		<category><![CDATA[英特尔架构]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/</guid>
		<description><![CDATA[如何设置您的NDK应用 本篇主要介绍NDK应用的开发步骤，调试流程已经如何为英特尔架构设置您的NDK应用。 相关文章 •1. 开发兼容英特尔架构的Android应用(一) 应用架构介绍 •2. 开发兼容英特尔架构的Android应用(二) NDK应用介绍 •3. 开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用 •1. NDK应用开发步骤 NDK应用的开发流程主要分为五个步骤： •1、 准备好本地代码 •2、 编写makefile文件，mk文件 •3、 编译本地代码（需要添加X86支持选项）为库文件（so） •4、 从Java端调用本地代码 •5、 用gdb来调试本地代码 通过以上五个步骤后，应用程序调用流程如下图所示：Android App通过Java Framework调用Java SDK API, 通过JNI调用本地库文件。 •2. 创建本地代码和编写makefile文件 在Android工程的jni文件夹下面创建本例中使用的本地代码hello-jni.c 以及Android.mk，代码如下图所示。 注意，在Android.mk文件中要添加X86的支持项。 •3. 编译本地代码（需要添加X86支持选项）为库文件（so） 进入工程所在目录，运行ndk-build来编译本地代码，运行效果如下次，会分别为ARM和X86生成相应的so文件，从java调用本地代码如下图红色标出所示。 •4. 调试流程 调试流程的要求以及调试过程如下图，需要注意的是在manifest文件中需要设置android:debuggable="true"； 然后使用ndk-gdb来调试即可。 本篇完。 相关文章 •1. 开发兼容英特尔架构的Android应用(一) 应用架构介绍 •2. 开发兼容英特尔架构的Android应用(二) NDK应用介绍 •3. 开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用]]></description>
			<content:encoded><![CDATA[<p align="left"><b><br /></b><b></b></p>
<p align="left"><b>如何设置您的</b><b>NDK</b><b>应用</b><b></b></p>
<p align="left">本篇主要介绍NDK应用的开发步骤，调试流程已经如何为英特尔架构设置您的NDK应用。</p>
<p align="left"><b><b>相关文章</b></b></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-5/">•1.     开发兼容英特尔架构的Android应用(一) 应用架构介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/">•2.     开发兼容英特尔架构的Android应用(二) NDK应用介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/">•3.     开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用</a></p>
<p align="left"><b><br />•1.    </b><b>NDK</b><b>应用开发步骤</b><b></b></p>
<p align="left">NDK应用的开发流程主要分为五个步骤：</p>
<p align="left">•1、  准备好本地代码</p>
<p align="left">•2、  编写makefile文件，mk文件</p>
<p align="left">•3、  编译本地代码（需要添加X86支持选项）为库文件（so）</p>
<p align="left">•4、  从Java端调用本地代码</p>
<p align="left">•5、  用gdb来调试本地代码</p>
<p align="left">通过以上五个步骤后，应用程序调用流程如下图所示：Android App通过Java Framework调用Java SDK API, 通过JNI调用本地库文件。</p>
<p align="left"> <img height="254" width="470" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/21.jpg" /></p>
<p align="left"><b>•2.    </b><b>创建本地代码和编写</b><b>makefile</b><b>文件</b><b></b></p>
<p align="left">在Android工程的jni文件夹下面创建本例中使用的本地代码hello-jni.c 以及Android.mk，代码如下图所示。 注意，在Android.mk文件中要添加X86的支持项。</p>
<p align="left"> <img height="273" width="485" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/22.jpg" /></p>
<p align="left"><b>•3.    </b><b>编译本地代码（需要添加</b><b>X86</b><b>支持选项）为库文件（</b><b>so</b><b>）</b><b></b></p>
<p align="left">进入工程所在目录，运行ndk-build来编译本地代码，运行效果如下次，会分别为ARM和X86生成相应的so文件，从java调用本地代码如下图红色标出所示。</p>
<p align="left"> <img height="257" width="507" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/23.jpg" /></p>
<p align="left"><b>•4.    </b><b>调试流程</b><b></b></p>
<p align="left">调试流程的要求以及调试过程如下图，需要注意的是在manifest文件中需要设置android:debuggable="true"； 然后使用ndk-gdb来调试即可。</p>
<p align="left"> <img height="296" width="505" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/24.jpg" /></p>
<p align="left"> 本篇完。</p>
<p>相关文章</p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-5/">•1.     开发兼容英特尔架构的Android应用(一) 应用架构介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/">•2.     开发兼容英特尔架构的Android应用(二) NDK应用介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/">•3.     开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用</a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开发兼容英特尔架构的Android应用(二) NDK应用介绍</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:56:43 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Android 开发]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[Android x86]]></category>
		<category><![CDATA[Android开发]]></category>
		<category><![CDATA[英特尔架构]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/</guid>
		<description><![CDATA[NDK应用介绍 本篇主要介绍NDK应用的架构，运行机制以及代码结构。。 相关文章 •1. 开发兼容英特尔架构的Android应用(一) 应用架构介绍 •2. 开发兼容英特尔架构的Android应用(二) NDK应用介绍 •3. 开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用 •1. NDK 介绍 NDK在安卓官方解释为：NDK(Native Development Kit) is a toolset that lets you embed components that make use of native code in your Android applications。是一个本地代码开发套件，通过JNI（Java Native Interface）Java本地接口机制来供Java代码调用。 •2. NDK 应用结构 一个典型的NDK 应用如下图所示，包含四个部分：Android Manifest，Dalvik Classes（Java代码），资源文件和JNI调用的本地库（so文件）。 •3. NDK 应用调用过程 NDK应用调用过程可以简单地用下面这张从网上摘录的图表示。所有的本地代码（C/C++）等等通过Android Makefile文件编译为动态库文件，Java Classes通过JNI接口去调用动态库。 •4. NDK API Android [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><b>NDK应用介绍</b><b></b></p>
<p align="left">本篇主要介绍NDK应用的架构，运行机制以及代码结构。。</p>
<p><b></p>
<p align="left"><b><br />相关文章</b></p>
<p></b></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-5/">•1.     开发兼容英特尔架构的Android应用(一) 应用架构介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/">•2.     开发兼容英特尔架构的Android应用(二) NDK应用介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/">•3.     开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用</a></p>
<p align="left"> <b><br /></b></p>
<p align="left"><b>•1.    </b><b>NDK </b><b>介绍</b><b></b></p>
<p align="left">NDK在安卓官方解释为：NDK(Native Development Kit) is a toolset that lets you embed components that make use of native code in your Android applications。是一个本地代码开发套件，通过JNI（Java Native Interface）Java本地接口机制来供Java代码调用。</p>
<p align="left"><b>•2.    </b><b>NDK </b><b>应用结构</b><b></b></p>
<p align="left">一个典型的NDK 应用如下图所示，包含四个部分：Android Manifest，Dalvik Classes（Java代码），资源文件和JNI调用的本地库（so文件）。</p>
<p align="left"> <img height="169" width="266" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/11.jpg" /></p>
<p align="left"><b>•3.    </b><b>NDK </b><b>应用调用过程</b><b></b></p>
<p align="left">NDK应用调用过程可以简单地用下面这张从网上摘录的图表示。所有的本地代码（C/C++）等等通过Android Makefile文件编译为动态库文件，Java Classes通过JNI接口去调用动态库。</p>
<p align="left"> <img height="306" width="440" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/01/12.jpg" /></p>
<p align="left"><b>•4.    </b><b>NDK API</b></p>
<p align="left">Android NDK同样提供了一些本地的API供开发者调用，如libc，libm等等，如果你的库是来自于linux项目，那么将相应的库做一些移植工作即可，比如讲glib相应的参数移至libc下面等等。</p>
<p align="left">•l   libc (C library) headers</p>
<p align="left">•l   libm (math library) headers</p>
<p align="left">•l   JNI interface headers</p>
<p align="left">•l   libz (Zlib compression) headers</p>
<p align="left">•l   liblog (Android logging) header</p>
<p align="left">•l   OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</p>
<p align="left">•l   libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</p>
<p align="left">•l   A Minimal set of headers for C++ support</p>
<p align="left">•l   OpenSL ES native audio libraries</p>
<p align="left">•l   Android native application APIS</p>
<p align="left">
<p align="left">
<p>本篇完。</p>
<p>相关文章</p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-5/">•1.     开发兼容英特尔架构的Android应用(一) 应用架构介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/">•2.     开发兼容英特尔架构的Android应用(二) NDK应用介绍</a></p>
<p align="left"><a href="http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk-2/">•3.     开发兼容英特尔架构的Android应用(三) 如何设置您的NDK应用</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/30/android-ndk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

