很多Android开发者可能会发现部分资源字符串在/res/values/string.xml中包含有类似xliff的节点,Xliff是XML Localization Interchange File Format 的缩写,中文名为XML本地化数据交换格式,对于在Android的资源字符串中,可能会有类似下面的 <xliff:g id="cwj">%1$s</xliff:g> 这里,id我们可以随便定义,后面的%1$s有点像C#中的字符串格式化标志,这里1%表示这是第一个可替换量,如果一个String中有多个需要替换的变量,可以为 <string name="info">开发者<xliff:g id="name">%1$s</xliff:g> 来自 <xliff:g id="company">%2$s</xliff:g> 公司</string> 对于上面的字符串,在工程中我们可以使用String strInfo=getResources().getString(R.string.info,"cwj","android123"); 来拼接,返回一个新的字符串strInfo中。
图160S
Android Canvas绘图抗锯齿解决方法 Android开发技术
对于Android来说Canvas一般大量用于自定义View和游戏开发中,对于图形的基础绘制类,提供的drawText、drawBitmap以及drawCircle都需要抗锯齿处理才能让人满意,下面Android123将他们分为两大种情况。 一、包含Paint参数情况时,对于drawText、drawBitmap这样的方法,一般最后一个参数为Paint对象,Paint对象一般用于设置笔刷颜色和大小,同时包含了抗锯齿的方法,比如说objPaint.setAntiAlias(true); 这个方法执行后即可有比较明显的改善。 二、部分方法没有Paint参数,比如说setDrawFilter这个方法,它的参数只有 PaintFlagsDrawFilter对象,我们自己构造一个新的对象,比如说new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)这样就过滤器可以让文本和位图经过圆滑处理。

Android 3.1 USB配件开发之介绍篇 Android开发技术
从Android 3.1开始将支持USB配件连接到Android设备,通过附件通讯协议,同时在Android 2.3.4中通过附加库也可以兼容这些功能,目前可以在Nexus S、Nexus One上进行开发测试,可以实现两种工作模式,分别为Host Mode和Accessory Mode,前者Android设备将作为宿主为USB设备供电,比如连接一个键盘,而Accessory Mode将作为附件模式,这时可能Android设备变成一个辅助的设备,比如作为PC上的手写板,这时PC为Android设备供电,如下图所示: 无论何种模式,Android设备都和连接的USB设备进行类似串口的通讯,对于调试,我们仍然可以使用adb来实现,比如说连接Android设备到PC上,输入 adb tcpip 5555 接着输入 adb connect <device-ip-address>:5555 其中device-ip-address为android设备的ip地址, 如果你的设备是监听USB连接,可以输入 adb usb
Intent调用大全,史上最全的 Android开发技术
//调用浏览器 Uri uri = Uri.parse("");Intent it = new Intent(Intent.ACTION_VIEW,uri);startActivity(it); //显示某个坐标在地图上 Uri uri = Uri.parse("geo:38.899533,-77.036476");Intent it = new Intent(Intent.Action_VIEW,uri);startActivity(it); //显示路径 Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");Intent it = new Intent(Intent.ACTION_VIEW,URI);startActivity(it); //拨打电话 Uri uri = Uri.parse("tel:10086");Intent it = new Intent(Intent.ACTION_DIAL, uri); startActivity(it); Uri uri = Uri.parse("tel.10086");Intent it =new Intent(Intent.ACTION_CALL,uri);需要添加 <uses-permission id="android.permission.CALL_PHONE" /> 这个权限到androidmanifest.xml //发送短信或彩信 Intent it = new Intent(Intent.ACTION_VIEW); […]
Android驱动大全 Android开发技术
对于开发者来说SDK自带的驱动可以兼容比较基础的设备,比如说HTC Dream、Nexus系列的手机,找到合适的Android驱动并不难,下面Android123列出OEM厂商的官方驱动下载链接, Acer http://www.acer.com/worldwide/support/mobile.html Asus http://support.asus.com/download/ Dell http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml Foxconn http://drivers.cmcs.com.tw/ Fujitsu Toshiba http://www.fmworld.net/product/phone/sp/android/develop/ Garmin-Asus https://www.garminasus.com/en_US/support/pcsync/ HTC http://www.htc.com Click on the support tab to select your products/device. Different regions will have different links. Huawei http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0 KT Tech http://www.kttech.co.kr/cscenter/download05.asp for EV-S100(Take) Kyocera http://www.kyocera-wireless.com/support/phone_drivers.htm LGE http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp Motorola http://developer.motorola.com/docstools/USB_Drivers/ Pantech http://www.isky.co.kr/cs/software/software.sky?fromUrl=index Samsung http://www.samsung.com/us/support/downloads Sharp http://k-tai.sharp.co.jp/support/ SK Telesys http://www.sk-w.com/service/wDownload/wDownload.jsp Sony Ericsson […]
ViewGroup代码示例 Android开发技术
有关Android的ViewGroup的使用例子比较少,早期的Android Home中使用到了这个ViewGroup相对于GridView来说ViewGroup更为灵活,下面是Android中一段经典的示例代码 public class FitCenterFrameLayout extends ViewGroup { public FitCenterFrameLayout(Context context) { super(context); } public FitCenterFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //修改尺寸 final int width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); final int height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(width, height); int childWidthSpec = MeasureSpec.makeMeasureSpec(width, […]

Android 3.x屏幕兼容性设计 Android开发技术
对于Android 3.x honeycomb系统来说屏幕的兼容性很重要,这里目前我们就主流的Android 1.5~2.3.4的软件如何兼容Android 3.0有关屏幕分辨率和资源的兼容设计方法如下: 首先设置选择主流的Android 2.2 SDK,API Level为8,如果需要兼容 <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8"/> ,有关layout仍然仅为两种横屏和竖屏,这里Android123再次提醒,大多数的平板在横屏操作上的时间大幅超越竖屏,这点测试时需要注意,设置drawable版本,注意-v6如图所示: 有关其他的细节可以参考 让你的应用兼容Android 3.0系统
Android开发易错点总结 Android开发技术
对于Android程序员来说平时开发Android应用很多地方需要我们注意,下面是Android123通过浏览大部分源码易的地方。 一、数据库的Cursor 对于Android SQLite数据库封装的查询返回对象Cursor来说比较容易出错的有 1. Cursor返回可能为null 如果query返回的Cursor对象为空,执行cursor的任何方法肯定有空指针异常了,这点Android的代码有40%都没有注意到。 2. Cursor返回为0 我们仅仅判断不为空还不行,如果Cursor的对象为0,执行了moveToFirst(); 这样的方法就比较尴尬了,这点Android开发网格外提示大家注意。 3. 遍历Cursor时没有执行moveToFirst(),这样游标的位置就不确定了。 4. Cursor使用完后要手动关闭,cursor.close()这个方法不要忘记了。 5. Cursor的类型获取,比如说getInt和getLong,由于在SQLite中boolean和long型均为SQLite的Integer所以,读取时一定记住转换。 二、新建的service、activity没有在androidmanifest.xml中注册,对于activity还好说,如果是service同时service使用的package name和主程序的package name有出入还记得手动写上相对的包名 三、Parcelable使用时内部类的异常处理,比如内部存储Bitmap对象时,如果Bitmap对象为空就会出现问题了。 有关更多的常见Android开发易错点,Android123会不断完善和总结。
Unknown URL content://这类Uri错误解析 Android开发技术
有时候在Android数据库操作Uri时可能遇到类似Caused by: java.lang.IllegalArgumentException: Unknown URL content://xxx 这样的错误,出现 Unknown URL content 这样的关键词主要是,Uri前部分存在,而后面部分的数据不存在造成的,而出现类似 ActivityThread: Failed to find provider info for xxx 这样的是这个Uri根本就不存在,由于Android系统上系统的内置provider的content名称经常改变在不同版本的固件上可能出现这些问题,希望大家注意。
CursorWindow查询大数据方法 Android开发技术
对于Android SQLite的Cursor出错,Android123在 SQLite出错提示CursorWindow need to grow: mSize 一文中介绍过,从Android源码可以看到framework中限制大小为#define MAX_WINDOW_SIZE (1024 * 1024) 即1MB的数据量,一般的数据库类型Integer和Text相对好些,遇到单个较大的二进制Blob类型可能会显得比较吃力。解决方法Android开发网建议大家从源头分析 Cursor c=getContentResolver.query(null,null,null,null) ,如果这四个参数都为空的话,限制较少,内存占用较大,这里我们可以通过第二个参数限制查询部分字段即可,当然分段查询,比如第一次从记录0-500,第二次查询从501-1000,对于计算数量,SQLite支持rawQuery方法,select count(*) form cwj_tables 这样的SQL语句,可以直接获取出某个表的记录数量,都比较方便。
Android开发做哪方面好? Android开发技术
很多网友转型Android开发或准备做一个Android开发者,到底做哪方面的好呢? 下面是Android123给大家的一些建议: 1. 过去是J2EE、J2SE的开发者,这类传统的Java开发者可以考虑继续做Android应用开发,如果会SSH,可以做更好的服务性客户端等等。 2. 过去时J2ME的开发者,大部分可能都是做游戏出身的,考虑Android游戏开发相对比较理想。 3. 过去是C\C++程序员或有些基础,可以考虑Android应用开发,熟悉后可以做一些更深入的应用通过NDK,Android NDKr5还对STL部分特性做了支持,比较实用。 4. 过去是WinCE、Maemo或硬件相关的,可以考虑ROM定制,移植方面的,对于Android Framework层的学习是主要的。 5. 过去搞硬件的、单片机的可以试试Android ADK,有关ADK是什么Android开发网在以前的文章中介绍过,可以做出一些硬件配件来。 到底是做应用薪水高还是底层呢? 这里Android123就形势而言应用挂广告,尤其是游戏效果会远比做底层和内核的好,国内较著名的愤怒的小鸟就是一个比较典型的例子,相对而言用户看到的是应用,做底层的只能比较低调了,但做一款内核级的应用还是不错的。

Android Market排名算法及规则 (转) Android开发技术
很多国内的Android开发者可能在Market上有软件发布,对于Market的SEO今天Android123从国内翻译较好和分析较仔细的一片文章中整理得来的,原文为 众所周知,做搜索出身的Google,旗下的Market的排名肯定是依据一个形同( A×a% + B×b% + C×c%)的公式计算出来的数值,进行排名的。开发者可根据其排名规则,对自己的产品设计和研发以及推广进行指导。 1. 排名公式里有哪些指标? 指标A、B、C到底是什么?权重a、b、c究竟是多少?这些问题的答案,应该是每个App开发者和运营者都渴望了解的。知道了这个答案之后,有些“聪明”的人就会像当年SP的从业者一样,去刷那些权重大的指标、从而拉升产品的排名了。网上关于此问题的讨论很多都是不了了之、无疾而终。相对较深入的一篇文章《Android Market App Rankings》,也只是在猜想是基于“安装量”的增长和留存。可惜,该作者离正确答案就差一步了…… 也许你已经等得不耐烦了,哈哈。现在就说说我的结论吧。指标A=“总安装/总下载”,即下载转安装的转换率;B=“评分/5”,即产品得分比上Market的满分;C=“留存安装/总安装”,即安装的留存率。不要急着问我a、b、c等于多少,准确数值只有Google知道、而且可以调,我只能告诉你它们加起来等于100,还有就是b>max(a,c)(为什么?下面耐心看)。 依据这个推断公式,就是说如果每个下载的用户都安装了、而且都给了5分、并且一直都没有卸载——OK.不论a、b、c是多少,你的产品得了满分,它就是No.1! 2. 为什么是它们? 在告诉你为什么是A、B、C之前,我先告诉你为什么不是D、E、F…… 先看个数据,Android Market-通信-免费-TOP25: 去掉了产品名称,我们可以看到更纯的数据。 首先,我们可以肯定的排除排名是按“下载次数”排序的,下载次数1万+的产品(第9位)居然排到了下载次数500万+(第11位)的前面。试想第11位的产品在喊:“这是为什么?它哪点比我好???”——答案:请看“评分”。啊?它是5分!没错,第9位的产品评分得了满分。哦,排除了D的同时,我们收获了B。 其次,我们可以排除“评分人数”。原因就是,在“下载次数”和“评分”都同等量级的情况下,比对了若干样本,都无章可循——实在跟“评分人数”不相干。E被干掉了。 再次,要排除的是“加速度”。很多人在猜测会有一个“加速度”指标,或者新增下载的、或是新增安装的。大家的这种猜测是源自于“鼓励新产品”,但是这是一种过于激进的想法。Market这么大盘子是要鼓励推陈出新的,但“保护”新产品的同时也得“爱护”那些确实有实力的老产品。过大的用户基数,肯定会拖慢老牛产品的“加速度”,如果这么做的话每天的TOP10都是面目全非的(App Store的排名规则里就有“加速度”,所以TOP榜天天易容)。所以,“加速度”也不是真正的公平。 排除了D、E、F,收获了B。那A和C是从哪来的? 休息一下,问个题外话?我们一般是怎么评判一个物品的“好”“坏”的?是不是有以下部分组成?有一样东西摆在你面前,勾起了你试用的欲望。试用之后,你可能爱不释手,继续用吧。路遥知马力,又用了一段时间,你又有了新的评判。如果这个东西实在是太好了,那你就会与它形影不离……回归到我们判断一个物品的标准的本质,无非就是是否“接受它”、是否“肯定它”、是否“留着它”。 言归正传,用户是否“接受”一个App——下载只是“抬头”,安装才是“点头”。如果单以“安装”为指标,又会让老产品滚雪球,有失公平。所以,A(下载转安装的转化率)浮出水面了。“安装”做分母,“下载”做分子。一方面,排名在前的产品下载量越高、安装量就有可能越高的同时,如果产品不够好“下载量”越高就可能成了拖后腿的那个分母,上面举例的第11位产品就是个例子(庞大的下载量下,安装量无法保持同步增长,所以让其难堪重负,排名下落——剧透下,第11位是曾经“通信”下排名第1的产品KakaoTalk)。另一方面,只要A(还有B、C)足够好,也让一些新产品可以冒出头来。 B(评分)刚才已经分析到了,这里需要补充一点的是:评分不是一次性的。我们会发现在Market里“评分”是可以多次修改的,这样的目的就是鞭策产品要持续的“好”,用户一直掌握着产品的“生杀大权”。另外,就是为什么前文说到b大于a和c,原因就是纵观TOP100,评分低于4分的只有两个;TOP25,评分低于4的是零个;TOP10,评分低于4.5的只有一个(避免出现App Store里《小姐日记》这样低分却长期占据高排位的现象)——一言以蔽之:要想在前排就坐,产品首先得让用户觉得“好”。 该说说C(安装留存率)的出处。说白了就是控制流失率,如果“总安装”很高、但是“留存安装”很少,那也不能称之为“好”产品。所以,安装留存率就是另一个全面衡量产品优劣的指标。 3. 它们到底是多少? 前文已经说到b比a和c都大,那a和c孰大孰小呢?这个取决于Android Market的策略,如果“a比c大”意味着“更看重新增”(任何一个店铺先开张的时候,都会最看重这个)、如果“c比a大”意味着“更看重留存”(对于一个已经把客流吃透的老店,会更看重这个)——所以,这个真是可以调的,取决于Android Market发展到哪个阶段和运营管理者的自我认识。 4. 感言 Android Market如果真是我想象的这样排名,可谓新老兼顾,攻防兼备。 说它新老兼顾,是因为它让新鲜的好的新产品既能快速冒出来、也能让它经得起时间的推敲,或昙花一现或源远流长。说它攻守兼备,是因为这样会把盘子越做越大,而且也防止了“刷”(能刷上去,但是刷上去之后如果产品不够好,会让产品跌得更惨),把盘子越做越牢。这样公平的规则,也为Android Market的应用量新增速度已超过App Store提供了另一个有力的支持。高!实在是高! Android Market排名规则这个隐形的裁判告诉我们:持续地把产品做好,才是正道!
Android 3.1和iOS 5以及WP7.1 Mango对比 Android开发技术
很多开发者对Android 3.1、iOS 5和Windows Phone 7.1 Mango之间新特性的对比还不是很清楚。下面Android123就三大平台的最新版开发特性作对比: 目前就发布时间来看 Android 3.1已经发布,iOS 5还要过几个月等iPhone 4S上市,而WP7的芒果估计要到9月份了 1. NFC移动支付,目前Android 2.3开始就支持NFC,而iOS 5仍然没有动作,而可怜的Windows Phone 7.1 Mango似乎还不知道NFC是何物。 2. ADK开发,对于周边硬件的开发,Google Android提供了ADK开发包,我们可以当做是一个USB的扩展辅助,帮助Android识别其他设备的USB通讯协议,如果哪天Google整出个类似DDK那就更有意思了,而iOS似乎只对知名厂商提供支持和授权,WP7.1这些还看不到任何迹象,最终应该还是只有OEM能开发吧。 3. 多任务支持,Android与生俱来就支持多任务,这似乎也是Linux的优势,而iOS从4开始支持伪多任务,就是让当前线程挂起处于休眠状态,处理完其他任务后再唤醒,这样iPhone一直无法挂QQ,不过Windows Phone 7.1开始支持多任务和Android一样,可以挂QQ了。 4. 来电控制,Android提供了开放的API,可以开发来电防火墙,显示归属地,或者是处理自己的应用当来电时保存状态,挂断电话后的状态做处理,而iOS必须越狱并使用非官方SDK方式实现,目前Windows Phone Mango对电话方面没有任何支持,而早期的Windows Mobile我们可以方便的处理RIL层,似乎微软现在封闭了。 5. 高性能计算,Android从1.5开始支持NDK,可以使用C/C++开发性能敏感的算法或3D GL图像相关的显示,从NDKr5开始支持精简的C++ STL标准库,iOS使用的Objective-C也可以很好的支持ISO C和C++,不过目前WP7只能用C#或VB.NET这样托管语言编写,而早期的Windows Mobile是支持Dot Net Framework和Native C开发的,似乎高端的体验度要大打折扣了。 6. 界面定制,Android可以很轻松灵活的更换界面主题,而iOS的封闭官方是不允许的,WP7由于界面比较简洁功能较单一,并不是很有竞争力,至少Android变身iOS和WP7的界面来说很轻松,而桌面的Widget小插件的趋势和优势已经显现出来。微软作为小插件的领跑者早在Windows Vista推出了Gadget的侧边栏小插件开发接口,但这一概念似乎在Windows Phone上荡然无存。 7. 固件升级,Android目前的固件升级是比较头疼的,由于厂商较多,改变的更多,硬件的限制不是很严格导致固件不统一,目前Google不开放Android honeycomb的代码也是防止山寨厂商推出低配的平板降低Android […]
微软推出Android转WP7白皮书和API对照表 Android开发技术
很多国内网友看好微软下一代Windows Phone开发,同时微软也将PC、游戏机和移动设备的Metro UI应用于下一代的Windows 8系统,再推出了iPhone转WP7的白皮书后,目前Android转Windows Phone 7开发的白皮书以及API映射对照表目前已经可以浏览,不过从对照来看WP7 Mango的API完善度只有Android 1.0的十分之一不到是可以替代的,目前都3.1了,等Mango发布时估计IceCream Sandwich都发布了,也就是说微软Windows Phone 7 Mango的能开发的调用的API十分少,大大限制了开发者的设计功能,不过用WP7做一些RSS阅读器,写点玩具类的应用还是可以的。 PDF格式Windows Phone 7 Guide for Android Application Developers 下载 (4MB) Android API和Windows Phone 7的API对照表,目前显示的是Android 2.3姜饼版的API,在线阅读 http://wp7mapping.interoperabilitybridges.com/Home/Library?source=Android 目前总体来看微软似乎在Windows Phone 7上的两宗罪,归结为不支持Native开发,API十分不完善或者说就是封闭,相对于iOS和Android来说威胁甚微。
Android框架层学习指导 Android开发技术
很多Android开发者可能觉得仅仅了解Java层还不够,这里Android123结合源码帮助大家如何了解Android Framework层。 首先Android开发网提示大家需要了解哪些前置知识,首先要有C++基础,如果你只会C,可能对于C++ STL标准库,以及模板和泛型的理解会吃力很多,同时要有OOP的思想否则看Android这样的大工程可能无法很好的组织,这点可以通过h文件画出UML图来快速了解整个结构。 1. 首先我们从Android GIT源码托管站点下载Framework层的源码,在base.git包 2. 对于Android来说,Google内部使用C++有些类似STL,因为部分用到了只是再次封装,这里建议大家直接看base中的include目录下的utils里的文件,比如说String8.h、String16.h、Vector.h、KeyedVector.h以及TypeHelpers.h 这里String8和String16和STL中的String相比,提供了更多的辅助方法,相比标准库更完善些,其中有些类似uint8_t、uint_16t和uint32_t这里我们可以理解为VC中的char、short和int,就是8位、16位和32位的整形,主要是标示的范围不同,使用更小的单位可以更节省内存开销,对于系统来说这是十分重要的,对于Vector和STL中的vector功能上是相同的,而KeyedVector我们当做stl中的map去对待即可,本身就是一个哈希映射类型,下面Android123要强调的就是TypeHelpers这个文件,里面封装的sp模板和wp模板,很多源码中会有类似 static sp<Camera> 这样的定义,就需要深入的了解下Android的SP了,如果你真的会C++这些都是小儿科了,比如 template <typename T> class sp;template <typename T> struct trait_trivial_move< sp<T> >{ enum { value = true }; }; // wp<> can be trivially movedtemplate <typename T> class wp;template <typename T> struct trait_trivial_move< wp<T> >{ enum […]
Android Framework学习指导(二) Android开发技术
对于Android Framework层的学习,在上一次的 Android框架层学习指导 中我们已经讲到了基础的结构和定义,但是对于Framework层的核心还有哪些呢? 1. 在Android源码的base中,我们可以看到每个目录进去,都会有java和jni两个文件夹,后者对于初入android框架的学习十分有帮助,如果你刚开始了解NDK和JNI相关的不妨读读Google的代码,这对于代码风格和质量的提高都很有帮助。 2. 对于NDK和JNI来说,编译我们需要一个好的环境,这里还是推荐基于Unix架构的Linux或Mac OS编译,Android123推荐放弃Windows下的Cygwin和MingWin可以节省不少的时间,对于编译来说先掌握mk文件的结构比较重要,这里可以直接查看base目录中每个jni子目录的android.mk文件即可,在Linux下mk文件这种脚本方式对于过去一些Visual Studio用惯的可能感觉有些原始。 3. 当然学习Android Framework可以帮助改进系统,定制自己的固件,部分核心的库是独立的external包,比如说 SQLite、Webkit、zlib、libpng这些Android使用第三方开源的库都是在platform/external/xxx.git中。xxx代表最终的库名。 4. 对于部分的核心库,上次我们在Android框架层学习指导一文中由于篇幅并没有提到,其实在base目录下面的native中可以看到很多系统结构的定义和实现。Android开发网推荐深入掌握Android这个namespace中的所有结构,这样的基础是十分必要的。 5. 最后我们附上Base目录的结构图,希望对大家有用: ├─api├─build├─cmds│ ├─am│ │ └─src│ │ └─com│ │ └─android│ │ └─commands│ │ └─am│ ├─app_process│ ├─backup│ ├─bmgr│ │ └─src│ │ └─com│ │ └─android│ │ └─commands│ │ └─bmgr│ ├─bootanimation│ ├─bugreport│ ├─dumpstate│ ├─dumpsys│ ├─ime│ │ └─src│ │ └─com│ │ […]
Android开发用的平板电脑推荐 Android开发技术
随着Android honeycomb的普及,对于Android开发用的平板电脑购买也是十分必要的,到底哪款平板适合开发使用呢? 一、硬件方面 CPU最好是主流的NVIDIA Tegra2 A9双核1GHz,RAM为1GB,分辨率为WXGA即1280×800,运行的系统至少为Android 3.0。对于非谷歌官方的Android 2.x系统可以忽略,毕竟很多API是3.0才开始有的。 二、选购品牌 品牌过硬,最好是一线的大厂,由于和Google合作紧密,得到Android最新版代码和研发效率等因素要好很多,知名品牌的固件升级有保障。 目前摩托罗拉的Xoom已经有Android 3.1固件了,三星Galaxy Tab 10.1也将会在近期上市,而Acer A500和ASUS TF101由于存在国行升级固件相对较慢,建议购买台版、港行或欧美的这两个厂商表示本月推出Android 3.1固件。 三、经济问题 目前Android 3.0平板价格分为两个档次,比较有意思的是这两个档次是不同领域的制造商 1. 5000元左右的 手机制造商: 摩托罗拉Xoom、三星Galaxy Tab 10.1和LG Optimus Pad 2. 3500元左右的 笔记本制造商 华硕Eee Pad Transformer、宏碁Iconia Tab A500 从上面来看台湾的厂商价格比较亲民,由于华硕和宏碁拥有多年的笔记本电脑和PC制造工艺,设计平板走线拥有丰富的经验,同时硬件配置上丝毫不逊色于欧美厂商。
Android JNI学习指导 Android开发技术
很多网友对Android JNI和C++开发相关的技术很感兴趣,由于JNI大部分技术都是针对Windows PC的,对于Android的JNI学习除了SDK中的一些例子外,其实大家完全可以通过Android源码中的base.git中根目录下的/core/jni文件夹下的cpp和h文件进行学习,这里是Google Android开发团队进行编码,在代码质量和稳定性方面都有保障,这里Android123推荐大家通过这些代码了解底层相关实现细节,虽然是C++的代码不过编码风格还是C的实现,对于基础学习,Android开发来说,开源方面的优势大幅超越封闭的iPhone和Windows Phone,同时对于间接使用Android Dalvik的Ophone OS 3、WebOS来说还是相当好的,当然有兴趣的网友可以移植Dalvik到Meego。
Nokia确认放弃Meego,可能考虑Android Android开发技术
诺基亚确认将会放弃Meego,虽然N9和N950的发布可能让我们看到Nokia的Linux战略,但是近期诺基亚CEO埃洛普确认将放弃MeeGo系统,这无疑让我们想到N9或N950将成为N900,目前来看市场上似乎单独的手机厂商推出操作系统竞争力不是很大,比如三星Bada,早期时间摩托罗拉推出过Linux内核的智能机但最终还是失败了,不过让我们意外的是有一个未确认真实性的是Nokia正在测试一款代号为 NB72 的Android手机,使用了Android 2.2内核,虽然外观有些像N9但是摄像头的位置并不是在右下方,从运行界面来看可能是 运行下Android的恶作剧,当然也不排除Nokia不考虑Android,毕竟作为硬件厂商跑更多的操作系统,对于各个系统的发展有相关的制衡作用,目前Nokia维护着Symbian、Meego以及Windows Phone 7,最终加入Android的设计,看来Nokia的产品线还是不少的。 目前Nokia对Meego的态度是这样的,虽然N9运行的是Meego,但是应用使用了Qt去编写,除了Windows Phone 7无法支持Qt运行库外,Symbian和Meego还是能够跑Qt的,至于Meego上加个Android的Dalvik,目前来看由于Google的对于底层框架的在Android版本上 越来越紧密,即使Meego跑了Dalvik虚拟机,兼容性将会打打折扣,所以不要对Meego抱有太大的期望。
Android隐私问题可通过Hook技术解决 Android开发技术
越来越多的Android隐私问题,使得我们考虑如何保护系统安全,对于Android平台的防火墙,可以考虑Rootkit惯用的Hook技术来实现一个简单的防火墙,这样我们可以对敏感的服务,比如说LocationManager、TelephonyManager和SmsManager以及CameraManager等可能产生隐私泄露的行为进行拦截,目前来看在Android上实现这些技术已经不是问题,但Root权限的请求是必须的。由于Android的API相对于其他平台更开放,如果Google推出一套权限的反病毒框架,安全和功能开放上可以做的更有竞争力。
URL编码问题 Android开发技术
在Android平台上做Web上传等操可以考虑对于URL编码尽量做UTF-8的处理,这样空格和中文字符将会被转换,比如空格处理为20%,Android应用可以直接使用Java的URLEncoder.encode(strUrl , "utf-8"); 来处理,比如说 String sUrl="http://www.android123.com.cn/中文/";String sDest=URLEncoder.encode(sUrl , "utf-8"); 执行完后sDest将会返回编码好的URL,同时上传图片可以考虑先处理为Base64编码。
Android文件下载方式选择 Android开发技术
对于Android应用中涉及到文件下载来说,我们可以使用Java运行库的URL库或Apache的HttpXXX的处理。经过长期的测试JRE中的 URLConnection 的稳定性不是很好,这主要是封装问题底层仍然使用的是Apache的库,而从Android 2.2开始引入的AndroidHttpClient使用的是Apache库的方式下载,在整体稳定性和可靠性方面有了很大的提升,这里Android123推荐大家使用Apache。 一个完善的文件下载类需要更多的HTTP协议通讯,Apache库对于Web提交(上传)或Web下载有着强大的功能,比如说断点需要主要是获取Server上文件的大小,通过Http的Header查找Content-Length即可设置需要获取的文件块。同时Android对于InputStream流有个小bug在慢速网络的情况下可能产生中断,可以考虑重写FilterInputStream处理skip方法来解决这个bug。
山寨平板的480×800远比手机的480×800大 Android开发技术
很多网友不明白很多Android山寨平板均使用了480×800的分辨率,但是相对于手机来说明显比手机的480×800的WVGA显示的内容要多和大,这点Android123提示大家还是要从DPI这样的问题入手了,在系统中存在DPI这个概念是依赖于设备的,同时显示系统的density也决定了分辨率,所以一般的7英寸平板电脑显示的480×800分辨率,完全可以放心,远大于你的手机。最简单的方法可以观察山寨平板的桌面图标显示数量或开个浏览器便可知晓。
Android Dock底座应用开发 Android开发技术
很多网友可能发现部分Android手机或平板支持底座,目前比较主流的有摩托罗拉系列,中低端的Milestone和Milestone 2代均可以使用充电底座或多媒体底座,网购大概50元左右。而中高端的Atrix 4G则支持HD或物理键盘底座,在我们连接底座后,一般使用官方固件的Android手机会自动切换到底座的桌钟模式,会显示提前、时间或闹铃等信息,如果通过代码获取底座插拔状态呢? 下面Android123给大家一个简单的思路。 在Androidmanifest.xml文件中,我们在自己应用的主activity中,加入下面的代码 <meta-data android:name="android.dock_home" android:value="true" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DESK_DOCK" /> </intent-filter> 大家可以看到,上面的 <action android:name="android.intent.action.MAIN" /> 和 <category android:name="android.intent.category.DEFAULT" /> 以及 <category android:name="android.intent.category.LAUNCHER" /> 均已经有了在默认创建的工程中。 不过对于底座应用的支持还有几个action,这些是从API Level 8开始支持的,对应Android 2.2的SDK,大家可以在android.app.UiModeManager类中找到比较重要的4个广播事件,ACTION_ENTER_CAR_MODE 进入行车模式,ACTION_EXIT_CAR_MODE 退出行车模式,其中 ACTION_ENTER_DESK_MODE 就是连接底座的广播,ACTION_EXIT_DESK_MODE 则是断开底座。
Android多线程断点续传下载文件类设计 Android开发技术
对于Android平台,很多网友可能考虑开发一个软件商店,对于Android平台上如何实现断点续传操作呢? 这里Android123给大家一些思路和原理的介绍,同时在Android手机上要考虑的一些事情。 1. 流量控制,获取运营商的接入方式,比如说使用移动网络接入,尽可能的提示用户切换WiFi或提示,限制下载的流量以节省话费。 2. 屏幕锁控制,屏幕锁屏后导致应用会被挂起,当然Android提供了PowerManager.WakeLock来控制。 3. 对于断点续传,这要追溯到Http 1.1的特性了,主要是获取文件大小,如果这个无法读取的话,那么就无法断点续传了只能使用chunked模式了,当然获取远程服务器上文件的大小可以通过Http的响应头查找Content-Length。 4. 获取上次文件的更改时间,对于断点续传来说比较有风险的就是 继续下载的文件和早期下载的在server上有变动,这将会导致续传时下载的文件版本和原始的不同,一般有两种解决方法,早期我们配置服务器时通过Last-Modified这个http header获取文件上次修改时间,不过本次Android开发网推荐使用更为强大的ETag,ETag一般用于解决同一个URL处理不同返回相应,比如Session认证,多国语言,以及部分黑帽的SEO中。具体的实现大家可以参考RFC文档。 5. 考虑服务器的3xx的返回,对于专业的下载文件服务器会考虑到负载平衡问题,这就涉及到重定向问题,处理重定向使用Android的Apache库处理比较好。 6. 至于多线程,这里CWJ提示大家可能存在独立的线程下载一个文件,和多个线程分块下载单个文件之分,其中后者需要考虑上次下载数据是否存在问题,同时如果服务器不支持文件大小获取,则无法通过分段下载数据,因为不知道如何分段,所以在chunked模式中,只能使用一个线程下载一个文件,而不是多个线程下载一个文件。 7. 下载后的数据效验,可以考虑CRC等方式,当然对于一般的传输只要逻辑不出现问题,基本上不会有偏差。 8. 考虑DRM问题,这个问题在国内用的比较少,而国外的受数字保护的音乐和视频,需要额外的获取证书等。 9. 重试次数,对于一个文件可能在本次网络传输中受到问题,尤其是移动网络,所以可以设置一定的重试次数,让任务单独的走下去。 10. 线程开发方式,这里如果你的Java基础比较好,推荐直接使用Java并发库API比较好,如果过去只做过Java开发使用Thread即可,如果Java技术不过关可以Android封装的AsyncTask。 有关完善的多点续传的示例,Android123将在近期提供源码。
Android AIDL远程服务使用示例 Android开发技术
很多网友来函表示对Android AIDL不是很理解,这里Android123准备了一个简单的例子,帮助大家了解Android上比较强大的远程服务设计吧。 一、为什么要使用AIDL,他的优势有哪些呢? AIDL服务更像是 一个Server,可以为多个应用提供服务。由于使用了IDL这样类似COM组件或者说中间语言的设计,可以让后续的开发者无需了解内部,根据暴漏的接口实现相关的操作,AIDL可以工作在独立的进程中。 二、学习AIDL服务需要有哪些前置知识? 作为Android上服务的扩展,首先你要了解Android Service模型,Android Serivice我们可以分为两种模式,三个类型,1.最简单的Service就是无需处理onBind方法,一般使用广播通讯,效率比较低。2. 使用Binder模式处理Service和其他组件比如Activity通讯,Android开发网提示对于了解了Binder模式的服务后,开发AIDL远程服务就轻松容易的多。 三、具体实例,我们以com.android123.cwj.demo为工程名,首先在工程目录的com.android123.cwj目录下创建一个ICWJ.aidl文件,内容为 package com.android123.cwj; interface ICWJ { String getName(); } 如果格式AIDL格式没有问题,在Eclipse中ADT插件会在工程的gen目录下会自动生成一个Java实现文件。 在Service中代码如下: public class CWJService extends Service { public static final String BIND = "com.android123.cwj.CWJService.BIND"; public String mName="android123"; private final ICWJ.Stub mBinder = new ICWJ.Stub() { @Override […]
Android ADK开发包示例开源代码 Android开发技术
对于Android来说除了SDK和NDK外,ADK被称为第三大革命型,Android ADK通过USB为传输方式可以和外设进行通讯,基于Google的Open Accessory Protocol(开放式附件协议) 可以让你的Android设备和车载系统、家电进行通讯,当然ADK还可以让Android设备支持各种常用USB设备,比如扫描仪、打印机、键盘、鼠标等。在Android开源项目GIT官网上已经开设了 device/google/accessory/arduino.gitdevice/google/accessory/demokit.git 这两个分支,其中demokit为演示包,可以让你轻松的掌握Android外设的开发技术,Android123提示整体的开发十分方便,Google已经封装的十分到位,整个操作类似串口通讯,还是基于字节数组的协议传输,如果你找到相关的硬件协议,USB无线网卡等设备都可以很好的和Android设备进行通讯。这里要提示的是目前仅在Android 2.3.4和Android 3.1或更高的系统支持。
Android NDK C++开发注意事项总结 Android开发技术
相信Android开发者都喜欢用C++编写一些高效的应用,有关Android NDK的C++开发相关知识Android123总结如下: 1. 从Android NDK r5开始支持了STL Port,在这个版本开始就可以使用部分STL库的功能了,比如说vector、string摆脱c下面容易出现的数组未初始化、越界,增强应用的健壮性。 2. 很多网友包含了include <vector> 这样头,但仍然无法编译,这里你首先要检查当前文件是否为.cpp后缀,同时为了使用标准库必须加入 APP_STL := stlport_static 在Application.mk文件中。相关对应还有 system 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持 stlport_static 使用STLport作为静态库,这项是Android开发网极力推荐的 stlport_shared STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。 gnustl_static 使用 GNU libstdc++ 作为静态库 默认情况下STLPORT是不支持C++异常处理和RTTI,所以不要出现 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static来支持标准C++的特性,但生成的文件体积会偏大,运行效率会低一些。 3. 支持C++异常处理,在Application.mk中加入 LOCAL_CPPFLAGS += -fexceptions这句,同理支持RTTI,则加入LOCAL_CPPFLAGS += -frtti,这里Android123再次提醒大家,第二条说的使用gnustl静态库,而不是stlport 4. 强制重新编译 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以强制重新编译STLPort源码,由于一些原因可能自己需要修改下STLPort库,一般普通的开发者无需使用此项。 5 Android目前最新的NDK版本为r6,相关的学习可以查看NDK中的Samples整体和在PC上开发没有太大的不同。
Android开始开放C/C++编写的应用 Android开发技术
对于Android平台来说已经有迹象表明开放纯C/C++编写的应用,过去我们也介绍过今天就说下具体的吧,在NDK的Samples中名为native-activity的例子已经证实了这点,不过目前Android123提示大家,显示系统Android上提供的C++接口只有OpenGL了,一起来看看AndroidManifest.xml中的定义吧。不过必须在Android 2.2或更高的固件上才能运行。注意下面的minSDK设置的为8,同时application的android:hasCode=false表示了这个应用将没有Java代码。 <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.native_activity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:label="@string/app_name" android:hasCode="false"> <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden"> <meta-data android:name="android.app.lib_name" android:value="native-activity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 从上面来看activity对应的name必须是android.app.NativeActivity,这点和AIDL中Service的name也写全package name是一个道理,否则无法找到。下面是纯C++的JNI代码了 #include <jni.h>#include <errno.h> #include <EGL/egl.h> //这里JNI目前提供的支持,不是很多,只有GL家族作为显示系统了#include <GLES/gl.h> #include <android/sensor.h> //感应器的支持#include <android/log.h> #include <android_native_app_glue.h> //这里Android123提示大家,c程序必须从main开始,这里必须包含这个,经过改进的伪入口点了。 #define […]
Android JNI开发疑点总结 Android开发技术
很多Android新手对于JNI开发过程中的疑问不是很清楚,根据android123@163.com邮箱中反馈的内容我们整理如下: 1. JNI中,什么情况才处理jstring、jint、jobject这样的类型,其实通过NDK开发Android C++应用,大部分仍然是常规的cpp和h的标准写法,只有需要和Java层通讯的方法才包含了类似JNIEXPORT void JNICALL XXX这样的函数,大多数的逻辑和标准C/C++没有什么区别。 2. 我有一个在Windows上开发好的dll能否在Android上使用呢? 这里Android开发网提醒大家,对于dll这样的PE文件只能在Windows平台下使用,而Linux上的动态库so文件如果是PC上的也无法通过JNI在Android上调用,由于CPU的指令不同,手机上必须使用ARM交叉编译器生成才可以使用,而PC上的为x86或64位,即使是Hello World这样代码兼容性很强,也必须在NDK中重新编译才能在Android上使用。 3. 学习JNI的基础是什么,或者说什么顺序学习? 这点Android123推荐大家先了解Java的类型,和内部编码,然后学习C/C++语言,对于NDK r5开始支持的C++语言,这里Android开发网要和大家说下了,如果需要在JNI中调用Java的类,你可以学习下反射机制,同时C++ STL在NDK r5开始支持,这样开发应用维护起来更方便些。最后看下NDK的Samples下载Android源码Framework层基本上就没有什么大问题了。 4. 学习NDK最大的困难是什么? 这里Android123认为,国内网友大多数都在Windows下做开发工作,整个NDK环境需要Cygwin,同时mk这样的makefile编译脚本的手动编写可能不是很友好,这点Android开发网已经准备了一整套的Android开发工具,将在近期公开,帮助大家在PC辅助开发Android应用,同时常见问题提供了相应的链接。 5. 在Android JNI用处大吗? 对于大多数开发者来说可能主要用于OpenGL游戏设计上,不过对于纯运算,算法上C语言比Java有着很多天生的优势,这点不容置疑,多一门技术多一个出路嘛,整个Android源代码十分庞大,开源的力量最终还是能打败更封闭的Windows Phone和iOS的。
Android NDK开发相关问题汇总 Android开发技术
有关Android NDK开发的相关问题,仍然有不少网友存在问题,下面就常见的问题Android123总结如下: 1. Android 1.5如果调用C++库,都支持哪些方法? 由于Android 1.5 API Level为3,当初提供的类和函数可以在NDK下查看include目录中找到<cstddef>、 <new>、 <utility> 和 <stl_pair.h> 可以看到都是语言运行库和基本的数据类型。 2. NDK下的log支持,这里大家可以包含<android/log.h>这个头文件,同时在mk文件中加入LOCAL_LDLIBS := -llog 这个库文件即可。 3. NDK下处理Zip文件的压缩、解压处理通过zlib库来解决,Android内置了zlib库可以通过包含<zlib.h> 和 <zconf.h>两个头文件解决,LOCAL_LDLIBS := -lz。 以上的都可以在Android 1.5或更高的固件上运行,而对于Android 2.0到2.1之间的三个版本主要是OpenGL ES的支持。
Android应用开发趋势之HTML篇 Android开发技术
对于很多新手Android应用程序开发出一些不错的UI可能有些难度,这里Android123推荐大家不妨试试更灵活的HTML作为UI,通过html+css+javascript方式,可以灵活开发出各种吸引人的UI,你甚至可以考虑JQuery这样的组件,老外已经写了本名为 《Building Android Apps with HTML, CSS, and JavaScript 》的图书,目前简体中文版仅售28元,可以通过搜索 《使用HTML、CSS和JavaScript开发Android程序》购买到。 如果你是刚入门Android开发,做一些简单有趣的应用,可以尝试下html方式,最大的特点就是高效快捷。网上有很多实用的Javascript代码段,直接引用就可以做出不少应用来。
Android开发知识点总结 Android开发技术
1. 如何让你的应用优先安装到SD卡上? 从Android 2.2 SDK开始多出了一个属性在AndroidManifest.xml中,在manifest节点加入android:installLocation="preferExternal"即可,当然要想让你的应用真正的安装到SD卡上,用户最终的固件为2.2,同时用户选择安装时在SD卡上。一般只有大型游戏或非重要的系统级应用选择安装在SD卡上,SD卡的读写要慢于ROM且更费电,所以重要的应用,比如闹铃提醒是不能设置安装到SD卡的。 2. 如何防止Service被系统回收? 对于Service被系统回收,一般做法是通过提高优先级可以解决,在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时实用于广播,而Android123推荐大家如果你的应用很重要,可以考虑通过系统常用intent action来触发。 3. Android NDK本地应用效率提升方法 对于C/C++的应用,这里Android开发网提示按照C++的习惯,简单反复调用的函数可以声明为inline,尽量少用虚函数,C++ STL的Stream效率不是很高,vector的内存管理要考虑仅分配不释放问题,如果需要涉及和Java通讯,则JNI的执行开销比较大,同时IPC通讯方法在本地端使用IBinder比较高效,当然如果你的技术不是很过关,Socket也是可以的,也更规范些吧。

