目前Android开发路线图是什么呢?下一步Google会有什么动作,一起来看下吧: 实现本地化 目前所有的用户界面程序框架Android 1.0平台都在英语地区覆盖,目前有美国和英国是发售计划中在本月,同时2008年第四季度将会有德语版本上市,2009年第一季度会包含法语、意大利语、西班牙语、中国台湾繁体中文、荷兰、捷克。这些包含字符串、菜单以及新的日期和数字格式。 支持多个APN接入点 目前特性在访问网络时接入点APN(Access Point Nodes )比较单一,Android开发网感觉可能最终会自动判断,比如浏览器使用Internet APN,而发送彩信使用MMS APN。 SIM卡程序工具包 STK 新的功能将允许SIM卡初始动作的各种操作和增值服务。 以上均为2008Q4的计划,下面是2009年Q1的计划表: IMF输入法框架 Input method framework 这个特性将会提供对文本输入加入虚拟键盘,用户无需物理QWERTY键盘通过屏幕也可以输入,IMF将允许开发人员设计IME输入法程序基于IMF框架。相关特性我们在Android虚拟键盘功能2009年出现也看见过。 IME输入法引擎 Input method engines 这将会允许软键盘、字典、一些感知算法。Android平台可能会包含一些参考IME开发者可以提供IME输入法程序通过Android Market。
图160S

巧用Logcat调试程序 Android开发技术
许多初次接触Android开发的朋友会遇到调试的问题,如何能够根据错误提示迅速的找到“出事地点呢”?在Eclipse+ADT的开发环境中没有好的直接跟踪对象内容的方法,通过使用android.util.Log类可以帮助你自己查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。 android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。当我们在DDMS进行调试时他们的区别并不大,只是显示的颜色不同,但通过Logcat的过滤器我们可以过滤显示某类的,一般对于执行错误的断点,下在Log.e比较合适。但是Android开发网根据规范建议VERBOSE,DEBUG信息应当只存在于开发中,最终版本只可以包含INFO, WARN,ERROR这三种日志信息。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易 区分不同的类的日志。例如: private static final String TAG = "MyActivity"; 接下来我们就可以用Log随心所欲的观察Android代码中的每个细节:Log.e(TAG, "android123.com.cn"); 但是要记住这个Log类的参数都是String类型的。下面是DDMS中的Logcat截图:
Android开源但Java限制仍然很大 Android开发技术
如果刚入Android开发的网友不知道发现一个奇怪的问题:虽然Android开源了但是Java限制还是很大的,同时Google提供给我的SDK和厂商的还存在一定的差距,所以在编译apk的时候仍然存在不小的问题。如果不做山寨机开源了似乎借鉴的code还不是很多,但是能开的这么彻底还是比较少见的,过去看看ReactOS的时候竟然发现是一个18岁的孩子写的类似Windows NT 4或Win2000的开源系统。 Google能推个Java版也不错了,效率高简单易学等特点,但是Android平台的细节问题等到成熟还是需要时间的,程序生命周期由系统管理感觉控制的还是不好,可以想象耗电量还是很大的。
Android开发中硬编码的好处和坏处 Android开发技术
在Android开发中有时后代码为了方便直接硬编码,其实这是一种不好的习惯,在PC平台写代码可能直接使用的比较多。在移动平台上有时要考虑多国语言问题,Android设计了getString()方法从资源Res文件夹中读取String字符串,这些字符串以xml形式保存在Values.xml文件中。 Android平台在一定程度上更面向对象,除了Java本身,在构架上仍然使用MVC这样的UI和代码逻辑分离,UI可以专心的设计用户界面,代码可以通过类似Jar或MIDL文件来再发行应用,大大提高了代码复用和维护性。 上面都是硬编码的坏处,其实好处也是有的,从单独语言和简单程序来说具有运行效率高和设计简单等方法,但是对于复杂的工程还是建议MVC方式设计比较合理。Android对于资源文件进行了缓存机制,在R类中进行全局注册,也就是说findViewById之后会对这个xml文件做缓存,比如Layout或String。
Android开发板需要购买吗? Android开发技术
很多初入嵌入式开发的网友问到Android开发板需要购买吗? 提起开发板过去主要是用于测试嵌入式Linux或Windows Embedded CE驱动、如USB驱动,工控设备时需要用到。谷歌在设计Android平台时仍然采用了源代码全部开放的方式并提供了完整的编译方法,在Mac OS或Linux PC上就可以编译出自己的Android操作系统,烧录到开发板中。 如果过去是硬件相关的或有山寨机生产方向的可以购买一块,只要CPU核心正确就没有问题,注意硬件的配置,如LCD屏、内存大小、COM口接触,有关这方面内容可以查看合作站点ARM926和ARM1136有什么区别一文了解。其本身成本价格很便宜,主要有Intel xScale、FreeScale的CPU众多,部分知名品牌或富士康代工厂可以提供测试的TI或Qualcomm解决方案,喜欢内核方面文章可以在Google Android官方论坛讨论。

Android签名用keytool和jarsigner制作apk文件 Android开发技术
Android程序的签名和Symbian类似都可以自签名(Self-signed),但是在Android平台中证书初期还显得形同虚设,平时开发时通过ADB接口上传的程序会自动被签有Debug权限的程序。需要签名验证在上传程序到Android Market上时大家都已经发现这个问题了。Android signed制作方法 首先在Android开发时没有安装JDK的网友在Sun官方网站下载JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,其实仅需要中的Keytool和Jarsigner。 详细的签名步骤: 第一步 C:\Program Files\Java\jdk1.6.0_10\bin>keytool -genkey -alias android123.keystore -keyalg RSA -validity 20000 -keystore android123.keystore输入keystore密码:[密码不回显]再次输入新密码:[密码不回显]您的名字与姓氏是什么? [Unknown]: android123您的组织单位名称是什么? [Unknown]: www.android123.com.cn您的组织名称是什么? [Unknown]: www.android123.com.cn您的组织名称是什么? [Unknown]: www.android123.com.cn您所在的城市或区域名称是什么? [Unknown]: New York您所在的州或省份名称是什么? [Unknown]: New York该单位的两字母国家代码是什么 [Unknown]: CNCN=android123, OU=www.android123.com.cn, O=www.android123.com.cn, L=New York, ST=New York, C=CN 正确吗? [否]: Y 输入<android123.keystore>的主密码 (如果和 keystore 密码相同,按回车): 其中参数-validity为证书有效天数,这里我们写的大些20000天。还有在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,最后需要记下来后面还要用,整个过程如图: 接下来我们开始为apk文件签名了。 第二步 执行下面这句jarsigner -verbose […]
谈谈Android中文短信的实现 Android开发技术
似乎Google在推出G1时就没有考虑多国问题,Android在发送短信时在编码上处理不是很妥当,在收发一些unicode来实现的国家文字上存在很大的漏洞,比如中文、日文、俄文等等。对于分析短信发送可以直接dump出PDU Header来解决这个问题。两个G1手机只要在截取短信时,比如获取收到短信时判断PDU的原始内容,比较后就不难得出解决方法。 我们在构造时直接通过一个二进制的字节数组来发送UCS2即可,而英文使用7位的编码可以减少字节占用,在一条短信中发送更多的字符内容,稍后我们提供Android中文短信发送的所有源代码。 下面引用过去的分析内容: 发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。 A:短信息中心地址长度,2位十六进制数(1字节)。B:短信息中心号码类型,2位十六进制数。C:短信息中心号码,B+C的长度将由A中的数据决定。D:文件头字节,2位十六进制数。 E:信息类型,2位十六进制数。F:被叫号码长度,2位十六进制数。G:被叫号码类型,2位十六进制数,取值同B。H:被叫号码,长度由F中的数据决定。I:协议标识,2位十六进制数。J:数据编码方案,2位十六进制数。K:有效期,2位十六进制数。L:用户数据长度,2位十六进制数。M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。 PDU编码协议简单说明 例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E […]
Android服务Serivce机制介绍 Android开发技术
Android操作系统提供了服务机制(Service),提起服务似乎大家并不陌生,Windows操作系统中就包含了大量的后台服务,而谷歌Android平台使用了Linux内核,Linux大多用于服务器提供服务是再正常不过了。 Android开发过程中什么时候需要用到服务(Serivce)呢? 一个后台的程序,比如提供音乐播放,这里服务就像服务器一样,可以支持多个应用程序绑定。比如使用Activity类来播放音乐,当窗口Activity切换到后台时音乐就会停止播放,而使用服务机制就不会存在这个问题,音乐会持续播放。 Android Serivce服务的特点是什么? 资源占用一般较小,长期驻留后台运行,不可视的界面,仅仅实现逻辑和UI层的通讯。但服务的生命周期需要大家理解,相比Activity而言Service优先级更低,按照系统的任务调度来看,当系统内存缺乏时会先结束后台服务,然后是窗口,所有显示在最顶端的程序优先级最高,不会被结束。
Dalvik虚拟机让山寨和Mozilla很郁闷 Android开发技术
谷歌Android平台强制使用Dalvik虚拟机提供第三方软件运行层让山寨和Mozilla或者说更多的开发人员对Android操作系统很不“爽”,Java虚拟机的出现让山寨机不得不提高成本失去了竞争优势,而让Mozilla这样的竞争对手知道它们的本地引擎在Java层是无法和Android内置的Native语言写的Webkit相提并论,我们已经看到OperaMini在谷歌移动平台已经渐渐消失了。不提供本地语言可以让Google充分的控制自己平台的软件能力,最终真的需要的公司可以和Google协商来解决这些问题。Dalvik让C++开发人员感到很郁闷,代码效率一直是Java比价难受的地方,涉及运算等性能敏感的问题Android在第三方开发上还是显得力不从心,比如说Voip的编码、视频解码器这些用Java来实现很难想像运行的效率。 不管怎么说Google自己的软件在UI层也是使用Java来可以底层框架交互,所以web浏览器、3D引擎、视频解码器、Voip都是自己垄断的,可以保证竞争公司的出现,比如Adobe的Flash产品和Google公司软件没有直接冲突,所以未来他将以Native形式入驻Android平台是正常的,但是微软的Sliverlight或者说Mozilla的Prism显得很有问题了。
JNI调用Native C++的so动态库仍然可以 Android开发技术
目前Android 1.0上仍然可以调用本地的程序,我们发现telnetd、shell这样的程序就是通过JNI调用的Native C++原始的so动态库实现的功能。但是我们自己写的Native C程序在上面执行需要Root权限,上传到系统的System/bin下面也是需要权限的。似乎这些只有在G1的Home+Reject(菜单+挂机)键来实现进入工程模式,通过adb调试接口来替换文件的方式来解决。 考虑了许久这仍然需要漏洞去跳入Root权限用户,目前按照Google的策略是对于Android平台发现漏洞后就会执行强制的更新,最终通过Kill Switch服务器来自动结束恶意程序还是等于白费功夫。否则用户在不更新下会产生安全漏洞,经过特殊构造的攻击程序可以直接威胁Android手机的安全。Android开发网分析后发现JNI调用可以使用Linux系统中现成的命令,比如logcat,获取shell还是可行的。自己做Native应用除非不在Google官方的系统中使用,否则正常用户是不会用这么多步骤或冒风险去安装的,对于最终的部署存在很多问题。同时正常的Native通过res/raw方式部署到market可能会被Google移除。

Android中文短信开发技巧 Android开发技术
提起Android中文短信发送其实实现原理过去我们已经在 谈谈Android中文短信的实现一文讲述了,这里不再赘述。主要是构造PDU header,使用16bit的编码方式即可。 开发过程中需要实现: 1.使用Android 0.9 SDK,该版本的andrid.jar文件实现比较完善,文件大小在11MB左右比最终的Android 1.0 SDK的9MB大了不少。直接引入一个外部的Jar即可。其中0.9版SDK下载地址可以在 Android SDK 0.9 beta测试版发布和下载 该页找到。 2.主要实现就是通过 android.telephony.gsm.SmsMessage.SubmitPduandroid.internal.telephony.gsm.SmsRawData 3. 最终发送时使用 sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 或着是 sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) 不要忘了加入<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>权限,查看内容如图:

Android自带Drawable图片资源库使用方法 Android开发技术
如何减小APK文件的体积呢?有效的方法就是少用图片等多媒体资源文件,当然今天Android开发网介绍的是Android自带的Drawable图片资源库。平时我们调用资源直接使用R.drawable.xxx。而是用系统内置的资源就需要加入android.R.drawable.xxx。比如我们使用启动时的机器人,就写成android.R.drawable.boot_robot,预览图如下: 系统内置了近百张资源,我们会做一个列表供大家参考使用。

