任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

分析你的Android ANR错误 Android开发技术

  Android ANR这个错误大家并不陌生,但是从Android 2.2开始出错的ANR信息会自动上传给Google进行系统分析改进,当然了你的应用ANR错误其实保存在一个文件中,在/data/anr/traces.txt文件中,如果你的Android设备没有Root越狱过,可以将你的软件装在模拟器上分析,模拟器可以直接使用Eclipse中的DDMS里的File Explorer来打开,如下图:    虽然traces.txt是一个文本文件,不过使用windows上的记事本打开可能无法正常处理linux的换行符,这里Android123建议你使用ultra edit查看,当然了使用Windows自带的写字板也是不错的。下面一起来分析下错误吧,第一行为出错的时间,第二行都会写上发生ANR的package Name,下文是com.android.systemui这个包,里面的部分线程出了问题,通过下面的的xxx方法以及对应的java文件,后面的数字为xxx.java文件的第几行,是不是很方便呢? —– pid 125 at 2011-02-22 05:18:01 —–Cmd line: com.android.systemui DALVIK THREADS:(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1 NATIVE  | group="main" sCount=1 dsCount=0 obj=0x4001f1a8 self=0xce48  | sysTid=125 nice=0 sched=0/0 cgrp=default handle=-1345006528  | schedstat=( 981213067 8042604425 151 )  at android.os.BinderProxy.transact(Native Method)  at android.os.storage.IMountService$Stub$Proxy.isUsbMassStorageConnected(IMountService.java:95)  at android.os.storage.StorageManager.isUsbMassStorageConnected(StorageManager.java:385)  at […]

Android 2.2开始resources.arsc有改变 Android开发技术

   从Android 2.2 API Level8开始APK文件的资源resources.arsc的编码有了小幅的改变,过去使用的是UTF-16LE编码方式被转换成了UTF-8编码,这样的好处就是处理纯英文等直接通过ascii存储语言的国家资源文件将会更小,而对于中文、日文这些国家的资源文件反而会变大。    UTF-16LE对于编码中文、英文均使用2个字节,但是Google可能考虑各个国家主要还是基于类似英文这样的语言存储,使用UTF-8可以减少文件体积,UTF-8是可变长度的,存储英文占1个字节,存储中文占3个字节。总而言之resources.arsc对于汉化Android应用程序十分关键,结构使用了索引表的方式存储,不过Google经常的更改Android API或部分文件的结构并不是一种好的方法,比如在Android 2.3上OpenCore又被换掉了。

Android高手应该精通哪些内容? Android开发技术

   很多Android开发者已经度过了初级、中级,如何成为一个Android高手呢? Android123就各个级别的程序员应该掌握哪些内容作为下面分类。    一、初级    1. 拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要懂得。     2. 掌握Android UI控件、Android Java层API相关使用。     迈向中级,最好再次更新下Java技术,掌握Java concurrent库、nio库,精通xml、json解析,做过socket c/s端的程序。   二、中级    1. 熟练掌握NDK JNI方式的开发,对Android framework十分了解。    2. 移植一些开源项目,比如FFmpeg、Mplayer到Android上运行。    迈向高级,熟悉android开源代码的结构,中间件下层的库,比如webkit、opencore、opengl。   三、高级   1. 熟练的Linux驱动开发,精通Linux内核结构。   2. 掌握Android移植,比如常见的TI OMAP、Qualcomm MSM的硬件移植。   迈向顶级,发现Android系统中的0day漏洞,可以轻松的找出Root系统的10种方法,帮助Google改进Android操作系统。 

通过Linux Shell实现Android横竖屏切换 Android开发技术

  平时在开发过程中如何切换Android横屏或竖屏显示方式呢? Android123今天分别给出两种方法分别为快捷键兼容模拟器和Linux Shell在真机成功处理。   方法一、   在模拟器调试中通过Ctrl+F11可以切换到横屏即landscape方式显示,而通过Ctrl+F12则emulator将会变为标准的竖屏显示,对于调试Android 3.0平板来说控制模拟器的横竖屏还是很重要的。   方法二、   这种方法通过Linux Shell的方式,我们将一个Android设备通过USB连接到PC上,执行adb shell命令执行真机上的Linux Shell比如   1. 切换为横屏执行 adb shell service call window 2013 i32 0   2. 切换为竖屏执行  adb shell service call window 2013 i32 1     这种方法可以看到其实对windows这个service执行相应的指令和参数,不过Android开发网没有经过测试,可能在模拟器或Root过的真机上有效。

Fragment API将兼容Android 1.6到3.0 Android开发技术

  很多网友都知道Android开发网曾经介绍的 Fragment对比Activity – Android碎片介绍 将用于3.0平板的多窗口管理,而Google将决定Fragment API兼容Android 1.6到3.0之间的版本,Fragment API可以很好的解决Android分辨率众多的问题,Fragment由于是Android Honeycomb的新特性,如果向下兼容必须发布相应的静态库,使其支持。   目前Google的技术解决方法可能就是降低Fragment的效果来使其增加更多平台的版本支持,可能在下一次的SDK升级中Google将会以静态库的方式让你的应用兼容Android手机和平板设计,目前最让Google头疼的兼容性问题除了OS版本众多外,还有很多分辨率问题,早点统一Android平台可能是Google目前需要头等考虑的问题之一。

帮助ADT改进DDMS中的Logcat中文乱码问题 Android开发技术

  有的时候我们调试Android应用可能涉及中文内容,但是在DDMS的Logcat下显示中文时为乱码,这里大家可以通过自己编译SDK来解决,有关编译Android SDK方法可以参考如何编译Windows平台的Android SDK 下面一起看下哪个代码存在问题吧。  在Android源码DDMS中我们找到 MultiLineReceiver 这个类,对应GIT开源在development/tools/ddms/libs/ddmuilib/src/com/android/ddmuilib/,最主要的就是有关String实例化时最后一个参数,看到ISO-8859-1了吧,我们将这个换成gb2312就可以很好的显示简体中文了,繁体嘛可以考虑big5这种编码等等了,当然了Android123推荐大家使用UTF-8这种兼容性最好的。  public abstract class MultiLineReceiver implements IShellOutputReceiver {      public final void addOutput(byte[] data, int offset, int length) {         if (isCancelled() == false) {             String s = null;             try {                 s = new String(data, offset, length, "ISO-8859-1"); //问题在这里,ISO-8859-1就是Latin-1我们俗称西欧语言             } catch (UnsupportedEncodingException e) {                 // normal encoding didn’t work, […]

LoaderManager – Android 3.0新特性 Android开发技术

   在Android 3.0中提供了一个新概念Loaders,通过LoaderManager类可以很轻松的异步加载数据从Fragment或Activity中,Loaders提供了回调机制通知最终的运行结果,有点类似AsyncTask类,但由于Loader对于并发可以用过Loader管理器统一管理,所以更适合批量处理多个异步任务的处理(当然内部仍然是多线程)。下面就让Android123一起和大家看下honeycomb中的新特性吧,对于解决多重异步I/O加快Android平板应用的运行是十分有效的。   一、LoaderManager   LoaderManager类位于android.app.LoaderManager,提供了以下几个方法 abstract void  destroyLoader(int id) //停止并移除loader通过IDabstract void  dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args)  //打印LoaderManager的状态到一个流中static void  enableDebugLogging(boolean enabled) //启用debug记录abstract <D> Loader<D>  getLoader(int id) //返回找到的ID或没有匹配的在Loader中abstract <D> Loader<D>  initLoader(int id, Bundle args, LoaderCallbacks<D> callback)  //初始化Loader使其成为活动状态abstract <D> Loader<D>  restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)  //启动一个新的或重启一个存在的Loader在管理器中 同时LoaderManager还有一个回调接口android.app.LoaderManager.LoaderCallbacks<D> 用于和LoaderManager交互 abstract Loader<D>  onCreateLoader(int id, […]

Loader和Fragment使用示例代码 Android开发技术

  Loader和Fragment都是Android 3.0的新特性,有关Fragment相关的内容Android开发网已经用了多个篇幅介绍,而Loader相关的大家可以通过 LoaderManager – Android 3.0新特性 一文了解Loader的作用和结构,下面就以一个简单的工程示例代码了解下Loader。 public class FragmentListCursorLoader extends Activity {     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         FragmentManager fm = getFragmentManager(); //获取FragmentManager这个服务实例         if (fm.findFragmentById(android.R.id.content) == null) { //这个资源是android内部的布局,注意是android.R            CursorLoaderListFragment list = new CursorLoaderListFragment();            fm.beginTransaction().add(android.R.id.content, list).commit();        }    }     public static class CursorLoaderListFragment extends ListFragment            implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {         […]

Android移植到HTC6900(Dopod S1) Android开发技术

  HTC6900是一款使用CDMA网络的手机,在国内名为HTC Touch或Dopod S1,但这款使用CDMA2000的版本使用了Windows Mobile  TouchFLO 3D操作系统,与GSM版本的TI OMAP 850 201MHz相比它采用了Qualcomm MSM7500 400MHz处理器,在性能上有了大幅提高,这和Android G1使用的Qualcomm MSM7201A 528MHz相比虽然有些差距,但仍然很强大,Android移植到了S1上变得很轻松,再不用考虑硬件驱动等问题时几乎可以完美显示使用。   详细的演示视频 参见 HTC Touch Vogue上运行Android操作系统

Android第三方软件也开源 Android开发技术

  谷歌在Android平台上开源了,第三方软件也应该开源走普及道路。目前Android开发网将在时机成熟时开放各种应用的工程源代码,让大家买手机,零价格使用软件,谁想用自己编译就ok的精神。最终收费的仅在于手机游戏、网游运营方面。   感谢各位开发人员的支持,我们会提供高质量的软件源代码给大家一起发展学习,首先提供GIT和SVN服务器作为更新平台。

Android截图方法之DDMS篇 Android开发技术

  提起Android截图,这里虽然Google在Android操作系统中提供了帧缓存的权限许可,但是没有Root权限仍然无法很好的截图,现在安装好Android SDK和Eclipse,在DDMS中可以看到连接Devices标签中找到可用的唯一个图标,如图下图所示:     最终在Device Screen Capture窗口中就是Android屏幕截图效果,直接单击Save按钮即可保存图片为PNG格式。如图

Android受更多厂商支持,开放手机联盟不断壮大 Android开发技术

  Android平台受到了更多厂商的支持,过去观望的索尼爱立信看见韩系手机三星、LG的加入让日本企业逐渐感兴趣,日本目前已经有3家运营商加入,NTT DoCoMo、KDDI、Softbank都决定运营,最终索爱生产Android智能手机是理所当然的事情,沃达丰和美国Vierzion Wireless虽然关系紧密,Verzione一直表示对Android没有丝毫兴趣,但是目前英国市场逐渐被T-Mobile UK蚕食,为了保证最终的客户Vodafone也加入OHA联盟,Google开放手机联盟阵营不断壮大起来。    目前Open Handset Alliance成员有CMCC、KDDI 、HTC、LG、NTT DoCoMo、Sprint、Motorola、Samsung、T-Mobile 、Ascender、Telecom Italia、eBay、Esmertec、Google 、Telefonica、LivingImage、LiveWire、Nuance 、Broadcom、PacketVideo、Intel、SkyPop、Marvell、SONiVOX、NVIDIA 、Aplix、Qualcomm、Noser、SiRF、TAT、Synaptics、Wind River、Texas Instruments、AKM Semiconductor Inc、ARM、ASUSTek Computer Inc、Atheros Communications、Borqs、Ericsson、Garmin International Inc、Huawei Technologies、Omron Software Co. Ltd、Softbank Mobile Corporation、Sony Ericsson、Teleca AB、Toshiba Corporation、Vodafone.

Java文件类RandomAccessFile性能低下 Android开发技术

  提起I/O读取在Android中几乎全部使用了Sun的文件读取类,其中由一个不同于其他的文件类RandomAccessFile在各方面操作上比较简单,附带了比如Seek等查找方式,但作为一个不自带缓冲区的类性能还是十分低的,这里建议在使用过的过程中配合BufferedReader读取方式达到一个简单的缓冲处理,但默认的缓冲区仍然比较小为8KB,在处理比如Android来电归属地数据库方面显得有些吃力。经过优化改进后的Java文件读取类性能基本达到常规需要。相关内容查看Android SDK中有关 java.io.BufferedReader和java.io.RandomAccessFile的介绍。

Android来电号码获取代码 Android开发技术

  Android来电号码获取的方法很简单,虽然Dalvik上的程序都是Java写的,但是仍然可以处理系统事物,使用PhoneStateListener;类可以监测话机状态,而TelephonyManager可以获取电话服务的实例,写代码时不要忘了在androidmanifest.xml中加入权限。  需要引入两个Packageimport android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;   MyPhoneStateListener phoneListener=new MyPhoneStateListener(); //我们派生的类       TelephonyManager telephonyManager        =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);        telephonyManager.listen(phoneListener,        PhoneStateListener.LISTEN_CALL_STATE);  这里做下简单的调试,直接使用Logcat查看来电号码: import android.content.Context;import android.telephony.PhoneStateListener;import android.util.Log; public class MyPhoneStateListener extends PhoneStateListener {    Context context;     @Override     public void onCallStateChanged(int state,String incomingNumber){              Log.e("PhoneCallState", "Incoming number "+incomingNumber); //incomingNumber就是来电号码    }   整个来电软件制作十分简单,Android平台在各方面都比较智能,加上一个BOOT_COMPLETED获取,保证开机自动运行,一个来电通就很容易的制作完成了,稍后Android开发网会提供完整工程的源代码下载。

Android天气预报程序开发实例与定位信息 Android开发技术

  昨天我们大概描述了下Android中的XML解析,其实整个实现方式比较简单,可以参考anddev.org的例子和com.commonsware.android.internet例子,Google Weather API还包含了另一种方式根据经度、纬度方式获取天气信息。在T-Mobile G1中可以通过基于移动网络和GPS方式定位,粗略获取当前定位坐标可以下面代码获取。   LocationManager myLocationManager=null;  myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);  Location l = myLocationManager.getLastKnownLocation("network"); //这里使用myLocation方式获取。   String url = l.getLatitude() + "," + l.getLongitude(); //这里获取到了精度和维度,即使不用GPS我们基本上可以获取粗略的城市位置。这里获取的l.getLatitude()返回的是浮点型,我们需要处理下,比如获取的为31.174165,需要过滤掉“.”保留31174165即可,维度同理:我们提交下面的   http://www.google.com/ig/api?weather=,,,31174165,121433841 数据即可获取,这里我们使用了Google Weather API的精度维度方式获取,根据城市拼音名可以参考昨天的Android与XML解析一文,获取的内容如下:   <?xml version="1.0" ?> – <xml_api_reply version="1"> – <weather module_id="0" tab_id="0"> – <forecast_information>   <city data="" />   <postal_code data="" />   <latitude_e6 data="31174165" />   <longitude_e6 data="121433841" […]

写给初学者,Android AIDL必看内容 Android开发技术

  更好的设计Android软件应该熟悉掌握AIDL IPC机制,可以让你编写的组件类似Windows ActiveX COM一样更好的复用,提供类似像Symbian那样的服务器机制。服务可以很好的解决在后台运行无UI的窗口。我们创建一个aidl文件名为android123.aidl下面是示例代码,修改于Android SDK文档。 一、创建AIDL文件 package cn.com.android123; 引入声明 import cn.com.android123.IAtmService; // 声明一个接口,这里演示的是银行ATM程序interface IBankAccountService {        int getAccountBalance(); //返回整数,无参数    void setOwnerNames(in List<String> names); //不返回,包含一个传入List参数    BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService); //返回一个自定义类型    int getCustomerList(in String branch, out String[] customerList); //返回整形,输入一个分支,输出一个客户列表} 二、实现一个接口 显示的提供一个导出接口,为客户端提供绑定。 public class RemoteService extends Service { @Override public IBinder onBind(Intent intent) { […]

如何实现Android程序国际化 Android开发技术

  如何让你的Android程序自适应国际化,比如说多国语言等问题呢? 这点Google在设计Android框架时就考虑到该问题,平时在设计资源相关的采用了MVC模式,代码逻辑和UI界面分离更容易维护管理,这里平时在写代码时尽量使用资源文件,不要使用硬编码。下面的文件夹目录为: Android123/res/values-en为英语、Android123/res/values-fr为法语,以Eclipse的Package Explorer树形显示为:   Android123/   程序根目录    res/  资源文件夹        values-en/   英文            strings.xml        values-fr/  法文            strings.xml   如果需要添加其他国家语言以此类推,这里我们看到了en、fr这样所写。Android开发网提醒网友可以参考ISO 639-1 ,这里中文分简体和繁体两种版本。

Android与XML解析 Android开发技术

  XML是一种常用的存储数据方式,在Android平台中内部很多地方使用了XML存储,比如轻量级的SharedPreferences类的存储其实保存在Data/data/[package name]/db。如果你使用的不是Android Dev Phone或没有Root权限,可以通过Android模拟器来查看。   XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。   XML解析实例:-天气预报程序的开发:   Google为我们提供了很多利用天气预报的程序开发,比如MyLocation API和Google Weather API,这里我们就以中国上海来举例,查询上海天气我们执行http://www.google.com/ig/api?weather=Shanghai,China 可以看到,最后的weather=后面就是城市的拼音名称。   完整的XML文件结构为:   <?xml version="1.0" ?> – <xml_api_reply version="1"> – <weather module_id="0" tab_id="0"> – <forecast_information>   <city data="Shanghai,China" />   <postal_code data="Shanghai,China" />   <latitude_e6 data="" />   <longitude_e6 data="" />   <forecast_date data="2008-12-17" />   <current_date_time data="2008-12-17 16:00:00 +0000" /> […]

Android中文短信开发终结篇 Android开发技术

  本次Android开发网将直接公开所有中文短信终结篇方法,整个分析过程很简单。   1.分析开源的platform/frameworks/base.git该文件可以查看详细的Telephony.gsm底层构架,可以查看telephony/java/com/android/internal/telephony/gsm这个文件,当然Google未来解决多国问题已经在Cupcake更新逐渐的改进了,比如台湾繁体中文的实现。我们直接打开ISms.aidl文件可以看到     2.使用Android 0.9 SDK的android.jar文件编译包含internal库。最新的Android SDK 1.0r1和r2反而越来越不开放了对于开发人员,网友可以在Android SDK 0.9 beta测试版发布和下载 中找到下载链接。     3.因为作为一个aidl的接口,这里我们直接使用方法来发送就可以了,这里的sendRawPdu第一个参数为短信服务中心,使用默认的null即可,第二个为我们自己构造的ucs2编码的pdu字节数组就可以解决unicode问题,不要忘了调用远程服务需要捕获RemoteException异常。简写的Java代码如下:      try{       ISms.Stub.asInterface(ServiceManager.getService("isms")).sendRawPdu(null,unicodes,null,null);     }     catch(RemoteException e)     {       e.printStackTrace();     }   4.加入必要的短信发送权限,可以查看Android权限列表permission说明一文。   最终完整的工程源代码www.android123.com.cn稍后提供下载(包含中文输入法).

Android中文短息相关问题解答 Android开发技术

  最近很多网友来信反馈有关Android中文短信的实现原理,其实了解中文短信应该从最基本的GSM通讯协议开始看起,这里找到了Android平台的短信类库android.telephony.gsm的相关实现看完就可以很好解决。然而平时分送时使用sendMultipartTextMessage方法比较好,该方式可以自动计算文本长度,然后使用divideMessage()方法分段,最终均使用sendTextMessage来发送,但底层的实现都需要经过sendRawPdu方法。   其中实现中文短信的核心就是编码,常规的SMS使用的是7bit的压缩处理方式,然后MMS或Push短信使用的8bit非压缩方式,但发送中文、日文都需要使用16bit的unicodes编码方式,这里需要说明的是这类宽字节的编码仅能存储70个字节,而gsm标准的的7位是压缩的可以存放160个字节内容。标准的8位是256个字符,对应ascii正好够用,最终中文短信使用java内部的utf-16be编码方式,通过getBytes方式直接转换即可,其实Android在实现短信内部上已经实现了正确的ucs2编码,但在调用时使用了一个try和catch先尝试7bit的gsm编码,但发送常规中文短信时并没有失败,造成catch中的ucs2编码方式尚未执行。   如果仍然有疑问可以仍然来函到 android123@163.com

Android平台视频解码器问题 Android开发技术

  如果你购买了Android Dev Phone 1或T-Mobile G1一定不会错过它强大的视频播放功能,Google在设计Android平台时考虑到自家的Youtube问题所以在视频解码器方面并没有做过多开发,直接使用OHA联盟中的OpenCore库来做解码器,但播放时我们发现了仅仅兼容WMV、3GP和H264编码或者说AVC编码的MP4文件。这里在播放视频时只有修改底层的C类库才能改进,从最终发布的版本来看平时的播放方法都不是很奏效,但是使用 视频转换王 可以很好的解决这个问题,视频转换王VCK可以将各种视频格式转换成G1支持的视频格式,这点希望对大家建立流媒体服务器时压片有很大的帮助,这款软件是免费绿色的。

Android输入法开发实例解析 Android开发技术

  这里我们建立表1为BiHua,同时构建两个字段,字段1为“input”来存放输入的,字段2为“value”为匹配出来的值,这里不难实现比如我们输入“111211”就可以匹配出两个这样笔画的字,分别是“彗”和“慧”,而1笔就可以输入好的字有“一不在有来大地到要可而于下过事”,这里我们可以把常用字优先排到前面。   2.五笔输入法   这里我们建立表名为CN,这里常规的字、词组、五笔都可以使用同一张表,这样对应查找更方便些,平时使用王码的打字员输入“ep”可以匹配出“爱”字,输入“jqb”匹配出“昂”字。这里ep就是input字段,而昂就是value字段在表CN中,依次类推。   3.英文输入法   这个就更简单了,把常用的单词表全部放入到数据库中,输入a自动匹配apple、arm这样的单词,类似autocomplete是把,其实就是包含关系的,这里找个词典直接导入即可。  4.联想输入法   平时一个字一个字的输入老慢,同样我们不用很负责的算法,直接加入类似“zhongguo”对应“中国”这样的词组就OK了,经过Android123的初步测试SQLite数据库在Android上还是蛮快的,但是还是不推荐这样制作输入法,至少商用产品不能这样开发的。  5. 9宫格输入法   平时不用G1附带的QWERTY键盘打字时可以尝试下新的9宫格输入法,比如在传统手机键盘上,我们可以发现1键对应的是符号,2键上刻有 a b c这三个字母,而9键上刻有 w x y z 这个四个字母,正常不用遍历算法一样可以直接记录下按键顺序,比如输入“ding”这个拼音就是3464,而输入“chen”就是2436,最后再使用方法4中的直接查翻译过来就是中文字了,呵呵是不是很简单呢?  三、选字设计   这里我们充分发挥Android平台的触摸优势,通过Gallery控件可以直接实现触摸滚动,每个字我们可以当作一个TextView对待,因为都是派生于View类我们直接使用listener来拦截按下事件,就达到了触摸选字,如果是QWERTY布局的话按键排列比较紧密,可以使用Android平台提供的View类的长按listener来获取长按事件,显示一个放大的按下按钮信息,这点可以参考iPhone手机的输入法。   四、如果你仍然对Android输入法或中文发短信有疑问,由于时间问题,发送到android123@163.com邮箱回复可能不会很及时,大家可以在Android开发网的论坛,Android论坛进行讨论。

开发Android学习Eclipse调试技巧 Android开发技术

  在Android程序开发中除了需要注意Logcat查看调试信息外,对于部分复杂而又庞大的工程可能错误十分不明显,这样就需要通过设置断点(breakpoint)的方式进行跟踪调试,Android使用Java语言开发所以今天就说下Google ADT插件制定的Eclipse IDE做为示例,如果过去习惯了NetBean相信你都理解。在创建好工程后,在Eclipse菜单中的Run下面可以找到  Toggle Breakpoint(断点打开或关闭),Toggle Line Breakpoint(行断点开关)Toggle Method Breakpoint(方法函数的断点)、Toggle Watchpoint(观察窗的断点)Skip All Breakpoints(跳过所有断点)、Remove All Breakpoints(移除所有断点)等内容来设置。这里我们就以Android123这个工程来测试,在某行代码下执行下Toggle Breakpoint这个命令就可以看到航标左边有个点,这里就是我们的断点,程序运行到这里会自动停下来,Java作为一种解释型语言主要是和运行时库或者说Dalvik虚拟机中进出,下一次我们讲下DDMS中如何去观察断点,刚才的操作如图所示:

Android开发之Eclipse调试技巧 Android开发技术

  使用Google提供的ADT插件可以在Eclipse上很轻松的调试Android程序,我们切换到DDMS标签,选择“Devices”标签,我们可以看到会出现类似下面的Debug Process(调试进程)、Update Threads(更新线程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止进程)、Screen Capture(屏幕截图)、Reset adb(重启Android Debug Bridge)   这里我们就可以很好的观察Android程序运行时的各种状态,比如进程信息、线程分析、堆内存的占用,结束一个进程,当然这些操作都是在DDMS框架下进行的,日程开发的程序是无法执行调用的。如果遇到adb调试桥运行不稳定时可以选择reset adb来重新启动adb.exe进程,整个界面如图:

Android示例程序Snake贪食蛇代码分析 Android开发技术

  通过Android SDK中的Sample文件夹中的Snake示例这个简单的贪食蛇游戏让我们好好了解一下Android平台窗口View显示类开发中的相关问题。   1. 我们直接在Eclipse中导入这个工程,可以看到在Snake.java的入口onCreate方法中第一句requestWindowFeature(Window.FEATURE_NO_TITLE);通过这句窗口特性请求,我们使用Window.FEATURE_NO_TITLE就可以轻松的让窗口做到了无标题显示。   2.setContentView(R.layout.snake_layout);设置窗口的布局文件,这里Android123给大家说明的是,这里的snake_layout使用了自定义资源标签的方式,大家注意学习:这里我们可以看到来自SnakeView这个派生类的名称,由于Android内部的R.资源不包含SnakeView类,所以我们必须写清楚Package,比如com.exmple.android.snake.SnakeView 然后和其他控件使用一样,都是一个id然后宽度、高度、以及自定义的标签tileSize(尾巴长度),如下:   <com.example.android.snake.SnakeView  android:id="@+id/snake"  android:layout_width="fill_parent"                android:layout_height="fill_parent"                tileSize="12"                />   3.这里Snake作为主游戏窗口,包含了重载的暂停Activity,通过Avtivites类的生命周期我们可以了解到,当窗口切换到后台时会自动调用这个重写的方法,类似C++的纯虚函数,如下:  @Override    protected void onPause() { super.onPause();}  4.同时在游戏退出时重写了onSaveInstanceState方法来保存窗口实例,就是游戏的进度。 @Override    public void onSaveInstanceState(Bundle outState) {}   这里我们就简单说明下简单游戏的框架设计,明天我们继续讲解下TileView和SnakeView的设计,这个例子相信大家都能看懂,不过Android很多新的绘图方法希望大家了解,Android平台的View设计,如果有什么疑问可以发送到android123@163.com或访问bbs.android123.com,我们会作回复。

Android示例程序Snake贪食蛇代码分析(二) Android开发技术

  上一次我们大概讲解了下Android SDK中的演示程序Snake游戏的主框架,今天我看来看下实现的基础类TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。TileView使用了Android平台的显示基类View,View类是直接从java.lang.Object派生出来的,是各种控件比如TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比较清楚。   这里定义了5个int型全局的变量,分别是方砖的数量mTileSize;方砖水平x防线的数量mXTileCount;以及竖直y方向上的方砖数量mYTileCount,下面是一个相对偏移位置mXOffset和mYOffset;这里android123主让要大家了解如何自定义View在Android开发中,在一个View类中主要是重写onSizeChanged方法来控制改变部分,以及onDraw实现画布的修改,实现的简写如下: @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {} @Override    public void onDraw(Canvas canvas) { super.onDraw(canvas);}   我们自定义的TileView类需要自己添加一个构造方法,根据需要,我们还重载了一种包含样式的方法,这里大家可以多看下Gallery控件的实现,就好理解了,下面是基本框架。public TileView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);} public TileView(Context context, AttributeSet attrs) { super(context, attrs);}   在贪食蛇游戏中我们知道Snake是移动的,所以加入了一个清除显示的clearTiles方法,通过一个二维数组保存一个gird网格型的运动轨迹,下一次我们将会讲解android贪食蛇的游戏逻辑和完整的关联拼接实现。如果有疑问可以在bbs.android123.com讨论。

Android示例程序Snake贪食蛇代码分析(三) Android开发技术

  今天我们分析下最复杂的SnakeView的设计,它是派生于TileView方砖类,TileView构建是基于Android直接的显示类View,如果不明白的可以查看Android示例程序Snake贪食蛇代码分析(二)一文有关TileView类的实现, 首先我们看到整个游戏分 READY、PAUSE 、RUNNING 、LOSE四种mMode状态模式,分别对应准备、暂停、运行中、结束(死亡),毕竟贪食蛇没有胜利这个结果。   整个Snake的运行分4个方向,NORTH、SOUTH 、EAST、WEST分别对应了北、南、东、西四个方向,其中变量mDirection对应当前的方向,而mNextDirection对应下个运行时的位置。这里星星分3种,使用的是一个Drawable图片,分RED_STAR、YELLOW_STAR和GREEN_STAR三种颜色,游戏的星星出现位置由Random随机数生成器来决定,这里Random一般和Timer系统时钟来随机生成更真实一些,通过一个Handler对象来控制画面的更新,使用了this.update();和this.invalidate();这两个本地方法,Update和invaildate均为android.view.View类的本地方法。这里资源的使用通过Resources r = this.getContext().getResources();获取了r对象的实例,通过r.getDrawable(R.drawable.redstar)获取资源名为redstar的资源,返回的是一个Drawable对象。   对于按键信息,直接重写View类的onKeyDown方法,这里KeyEvent传递的是按键的映射,比如KEYCODE_DPAD_UP向上,KeyEvent.KEYCODE_DPAD_DOWN向下等等,详细的查看SDK中的onKeyDown   @Override    public boolean onKeyDown(int keyCode, KeyEvent msg) {         if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {}   }   整个游戏的控制流程就是上面这些,对于游戏的逻辑而言比较简单,这个贪食蛇并没有包含3D设计和类似Nokia的能量走廊、6边形轨迹,有空了我们一起来完善一个3D的贪食蛇游戏。

Android窗口编程(无标题,全屏) Android开发技术

  很多时候我们设计的Android程序需要全屏显示或无标题,通过编程的方法控制窗口信息,这里在Activity中的onCreate方法执行时requestWindowFeature(Window.FEATURE_NO_TITLE);可以实现无标题,而全屏可以加入getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 这句实现整个窗口的水平和垂直都处于全屏状态,更多Android开发技巧可以关注android123.com.cn的FAQ栏目。

Android后台程序运行一段时间不工作了? Android开发技术

  可能部分Android程序长期运行的后台程序过一段会不工作或自动消失,这主要是因为Android平台生命周期造成的,使用过G1的网友都不难发现一个道理,每个软件似乎都没有设计退出按钮,谷歌在设计时为Android设计了一个HistoryStack历史栈,这里系统会自动管理整个程序的生命周期,但当系统运行的程序不断增多时系统开始有选择性的结束部分程度的进程,首先后台Service服务可能会被先结束,而前台的窗口Activity会有更高的优先级。如果保证自己的程序不被过早的Kill,其实只需要运行一个线程不断的维护处理常规的事情,比如开个Timer都是可以解决问题的。

Android开发环境搭建图文教程 Android开发技术

Android开发首先需要搭建完整的开发环境,由于软件均是基于Dalvik Java Virtual Machine运行的所以Google官方推荐使用主流的Java开发IDE Eclipse。我们需要下载必要的开发组件。   1)Java运行时库(JRE),由于Eclipse使用Java开发,所以需要它才可以正常运行IDE。   2)Eclipse集成开发环境,官方提供的Android开发插件ADT Plugin是基于Eclipse编写的,当然用户可以使用NetBean、JBuilder当作代码编辑器使用,但目前没有完整的调试集成。   3)Eclipse ADT Plugin插件是Android Develop Tool Kit的插件,用户需要安装它才能在Eclipse中建立和调试Android程序。   4)Android SDK,它包含了完整的Android模拟器 、Android开发文档和调试工具,Google官方也会定时更新,最新的公开版本为2008-3-3 m5-rc15   以上提到的4个必备工具需要在下面页面中下载安装 Android开发包下载   首先我们将下载的JRE安装,然后解压缩Eclipse和Android SDK。运行Eclipse开发环境。

Android平台View的按键事件KeyDown用法 Android开发技术

  我们继续讨论下Android游戏开发的一些前置知识,平时设计自己的显示类View时需要捕获按键事件,比如KeyEvent、首先引入android.view.KeyEvent类,直接重写onKeyDown方法,同样在键盘上每个按钮都对应一个Scancode扫描吗,详细的定义在KeyEvent类中有,直接查看Android SDK中的定义,实现的方法如下: public boolean onKeyDown(int keyCode, KeyEvent msg) {     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {           // 按下中键时触发的事件,这里android123.com.cn提醒网友G1或ADP1使用的是轨迹球,这个Trackball仍然可以按下的,不仅仅是方向的导航。             return (true);     }        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {         //向左            return (true);        }        if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {         //向右            return (true);        }        if(keyCode == KeyEvent.KEYCODE_DPAD_UP){         //向上            return (true);        }        if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){         //向下            return (true);        }        return super.onKeyDown(keyCode, msg);    } […]

Android屏幕自动旋转-Sensor属性 Android开发技术

   使用Eclipse+ADT插件开发Android程序的网友可以通过,ADT Plugin来很好的处理相关的layoutxml布局以及android开发环境的细节设置,今天我们让Android屏幕自动旋转,使用G1或ADP1的网友会发现均内置了加速感应器,可以感知方向。这点提醒网友不要贪图便宜购买山寨机而缺失这一重要特性。   如何让程序自动随屏幕而旋转,今天我们不要写一行有关SensorListener代码,直接在Package Explorer中,这里以android123.com.cn这个Demo程序为例,首先选择androidmanifest.xml文件,在右边选择Application属性,这点仔细看图中的标号,然后单击我们的Activity窗口类的名称,这里我们使用的是android123,demo创建的程序,选择.Demo,如图1:   接下来后滚动条往下拖,可以看到Screen orientation这个屏幕方向选项,我们选择sensor即可使用加速感应器自动识别调整程序的显示方向,效果在真机中测试你就发现了,但感应器的电能消耗还是比较大的 相关的代码可以直接加入,在activity中加入下面加粗部分即可,<activity android:name=".demo"  android:label="@string/app_name" android:screenOrientation="sensor" >

100% Secure Checkout

PayPal / MasterCard / Visa