Android实战技巧
Android应用开发中积累的实战经验和技巧,让理论+实践成就优秀的Android开发者。
全速前行
昵称已经改过三次,每个名称都代表了当时自己的心境。而这个全速前行是让自己更快的行动起来,不能总是光想而不做。也督促自己一定要快速建模,行动起来,才知道程序到底优势和缺陷在哪。我,还是那个快乐的移动开发者
展开
-
Android实战技巧之五十三:dom4j&xstream
Dom4J和XStream是Java平台上使用较广的XML开源包。 Dom4J的特点就是简单易用,而我选择XStream的原因就是XML转换Java类。在Android平台上解析XML的手段有三种,DOM、SAX、PULL。但不论哪一种,解析一个XML都要写大篇的代码, 如果稍有改动,连杀人大心都有。在移动平台上,内存和网络带宽是瓶颈。有些程序是为了追求性能的极致而不则手段,而有些程序繁重的编码原创 2016-06-12 17:49:27 · 4251 阅读 · 4 评论 -
Android实战技巧之五十二:fastjson
1、JSONJSON全称为JavaScript Object Notation,是一种轻量级的数据交换格式。 正因为数据格式简单,所以占用带宽小,网络传输的速度更快些。这一点是老前辈xml的硬伤。JSON的语法也很简单: 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组下面是微信公众帐号开发中获取token的JSON返回值{"access_token":"I73NddJk_1原创 2016-06-10 12:32:10 · 10445 阅读 · 1 评论 -
Android实战技巧之五十一:libjpeg与Android
libjpeg是一个被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现库。 说它使用广泛,是因为它跨了很多平台。比如Linux平台、JDK、Android和其他库如tess-two等等。最近正在研究Android中直接用C/C++将图片的字节数组保存成图片,libjpeg库十分擅长。 官网www.ijg.org下载最新的版本9b,解压后会看到数量众多makefile,足以见得其对多原创 2016-04-07 14:33:45 · 18698 阅读 · 2 评论 -
Android实战技巧之五十:App的系统签名
这件事困扰我们多时了。 我们一直想用非源码编译的方式解决此事,按如下步骤。这种获取系统签名的方法如下: 1、apk中需要使用android:sharedUserId=”android.uid.system” 这个属性。在Manifest文件修改,如下:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://sc原创 2016-03-15 18:18:11 · 8783 阅读 · 4 评论 -
Android实战技巧之四十九:Usb通信之USB Host
零 USB背景知识USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一。 硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。例如,PC上的插座就是母头,USB设备使用公头与PC连接。 目前USB硬件接口分三种,普通PC上使用的叫Type;原来诺基亚功能机时代的接口为Mini USB;目前Android手机使用的Micro USB。Host USB原创 2016-02-25 17:27:55 · 58157 阅读 · 6 评论 -
Android实战技巧之四十八:Android上的Java8和kotlin
Java和Android这对搭档目前也在风雨飘摇中。 技术圈子的事,往往被商业利益牵着鼻子走。 世事莫过于此。Java8目前Android应用开发已经使用到Java7,但对Java8的支持,还遥遥无期。 对新技术体验者来说,Java8提供了很多不错的特性。 其中最引人注目的是lambda表达式,以及Stream API,Date Time API,对并发的增强。Android应用开发完全支持原创 2016-02-03 15:34:11 · 8362 阅读 · 0 评论 -
Android实战技巧之四十七:不用预览拍照与图片缩放剪裁
副标题:Take Picture without preview AndroidGoogle出于对隐私的保护,制定了一条门槛,即在Android应用开发中编写拍照程序是必需要有图像预览的。这会对那些恶意程序比如Android中泛滥的Service在后台偷偷记录手机用户的行为与周边信息。这样的门槛还包括手机厂商自带的相机软件在拍照时必须是有声音,这样要避免一些偷拍的情况。处于技术调研与一些特殊无害场景原创 2015-11-16 23:05:35 · 6162 阅读 · 2 评论 -
Android实战技巧之四十六:用patch更新Android Studio
公司机器上的Android Studio很时髦,每次都会准时接收到官方稳定版的推送。目前最新的稳定版本是1.4.1,增加了很多心动的功能。 可是我的笔记本上的AS还在1.3.1,是时候主动将其更新了。目前来看,主动更新是有困难的。AS提示连接服务器失败。流传在网络上有两个方案: 一、网友通过修改./bin/studio64.vmoptions文件,加入以下内容:-Djava.net.prefer原创 2015-11-06 18:37:24 · 8314 阅读 · 1 评论 -
Android实战技巧之四十五:复用原有C代码的方案
任务描述有一套C写的代号为“Shooter”的核心算法库可以解决我们面临的一些问题,只是这个库一直用在其他平台。 我们现在的任务是将其复用到Android平台上。复用方案描述示意图如下 编译Android下的Shooter.so共享库是不能跨平台的,我们首要的工作就是用交叉编译器将原Shooter库编译成可在Android平台下使用的so。Android下常用cpu架构是ARM,现在X86也多了原创 2015-11-03 16:57:23 · 2736 阅读 · 0 评论 -
Android实战技巧之四十四:Hello,Native!
在Android上运行C程序对于做上层App的童鞋来说有些陌生,因为目前的Android应用开发怎么还是绕不过Java。 但对于底层驱动开发者,这就是家常便饭一样,因为Android是Linux分支,底层是C/C++的世界。有时为了测试一些功能,我们也会编写直接运行在Android终端下的C程序。前提是有Android交叉编译器以及Android系统的root权限。交叉编译工具ndk为我们开发na原创 2015-11-03 10:47:31 · 8288 阅读 · 0 评论 -
Android实战技巧之四十三:终止一个线程引起的
这是一道老牌面试题。通常面试官会问你对Java线程的了解,然后再问此问题。 从理论到实践,这是一条好路子。 线程是操作系统实现多任务的一种方式,可以理解为线程是一个任务的执行单元。比如Android系统中每个App都会有自己的主线程,同时还可以创建worker thread“并行”为我们工作。Java中创建新线程的方法Java对线程(Thread)提供了语言级的支持(依托虚拟机吧)。java.l原创 2015-10-29 17:35:57 · 8968 阅读 · 1 评论 -
Android实战技巧之四十二:加速度传感器
欢迎来到传感器的世界。 传感器字面上的意思就是传递感觉的仪器,哪些感觉呢? 视觉、听觉、味觉、触觉、嗅觉等等。 所以有人说,传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。 当前Android设备中已经集成进数十个传感器,我们比较常见的有加速度传感器、陀螺仪、地磁传感器等。 虽然种类繁多,但在Framework中仅仅提供了几个类和接口就把传感器相关的功能搞定了原创 2015-10-28 17:12:28 · 27543 阅读 · 3 评论 -
Android实战技巧之四十一:制作自己的Android SDK
编译自己的SDK特种设备会有一些额外的功能,这样就需要给应用层提供特定的API,从而需要定制自己的SDK。 编译自己的sdk还是很简单的,因为google帮我们做好基础工作,步骤如下:$ source build/envsetup.sh $launch 'what you want'$ make update-api$ make PRODUCT-sdk-sdk -j8如果一切顺利的编译完成,原创 2015-09-21 18:05:24 · 22756 阅读 · 2 评论 -
Android实战技巧之四十:Android5.1.1源代码编译与烧写
购买Nexus手机的朋友大多是为了自己修改系统玩,再加上其较高的性价比,在开发者中还是广受欢迎的。我的5太子被我升级到了6.0预览版,玩的正嗨,舍不得换回到5.1时代了。不过鉴于距6.0源码发布还有段日子,5.1的源码编译与烧写仍是主流,下面就记录了整个过程(持续了很长时间,我们要有耐心)。搭建开发环境系统推荐Ubuntu 14.04 1.openjdk is needed$ sudo apt-g原创 2015-09-03 20:29:51 · 34460 阅读 · 5 评论 -
Android实战技巧之三十九:短信收发
7月4日从广州出差回来就定下写作计划,但迟迟没有动笔。耽搁的原因还是老样子,工作上又有新任务,全部精力都投入过去了,每天精疲力竭的回来也打不起精神做其他事了。这就是精力管理不当所致,就像我把很多要做的事无情的放到“等有时间”再做一样。今晚,我一定要给自己一个交待。不论文章写的如何,但不动笔就永远是零。正文在下面一直以来,Android的手机功能(通话与短信)都放在android.telephony包原创 2015-08-15 21:57:13 · 13571 阅读 · 3 评论 -
Android实战技巧之三十八:Handler使用中可能引发的内存泄漏
问题描述曾几何时,我们用原来的办法使用Handler时会有下面一段温馨的提示:This Handler class should be static or leaks might occur下面是更详细的说明(Android Studio上的警告,不知道Eclipse上是否相同)Since this Handler is declared as an inner class, it may prev原创 2015-07-14 11:20:20 · 9179 阅读 · 3 评论 -
Android实战技巧之三十七:图片的Base64编解码
通常用Base64这种编解码方式将二进制数据转换成可见的字符串格式,就是我们常说的大串,10块钱一串的那种,^_^。Android的android.util包下直接提供了一个功能十分完备的Base64类供我们使用,下面就演示一下如何将一张图片进行Base64的编解码。1.找到那张图片public void onEncodeClicked(View view) { //select pi原创 2015-06-22 22:37:41 · 27543 阅读 · 1 评论 -
Android实战技巧之三十六:Makefile快速入门
目标通过一篇文章的介绍达到能够编写简单Makefile以及能够看懂普通的Makefile之目的。make简介make是一个老牌的构建(build)工具,1970年问世以来已经度过了45年的时光而魅力不减,这在技术发展日新月异的今天是不可思议的。make在大型的软件项目中发挥着巨大作用。我是在学习Linux kernel时才第一次接触它,Android系统也是用make和python等脚本一起构建系统原创 2015-06-13 13:12:20 · 4956 阅读 · 0 评论 -
Android实战技巧之三十五:了解native activity
1.native activity的意义很多人觉得Android的Fwk提供的支持足够好了,既然Google不推荐用Ndk开发为什么又放宽Ndk的限制而推出可以无Java开发Android App呢?我的理解是不同的技术实现会有其适合的场景。 Ndk的适用场景官方给出三点:1.平台间的App移植 2.复用现有库 3.对软件性能要求较高的场合比如游戏等。那么native activity在十分适合游原创 2015-06-12 17:53:05 · 18998 阅读 · 3 评论 -
Android实战技巧之三十四:用TableLayout伪装表格显示数据
先来上个图,最终效果图。 每个Layout都有自己最适用的场景,而TableLayout往往用在中规中矩的输入界面,比如下图: TableLayout下嵌套TableRow组成Table的行;每个TableRow中布局不同的控件,组成Table的列。上图就是两列四行,而我们要做的表格就是三行三列。TableLayout是没有提供边框的,要作成表格的效果需要我们使用一些技巧: 整个TableLa原创 2015-05-29 17:44:53 · 16844 阅读 · 0 评论 -
Android实战技巧之三十三:android.hardware.camera2使用指南
API 21中将原来的camera API弃用转而推荐使用新增的camera2 API,这是一个大的动作,因为新API换了架构,让开发者用起来更难了。 先来看看camera2包架构示意图: 这里引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送Capture请求,而摄像头会返回CameraMetadata。这一切建立在一个叫作CameraCaptureSession的会话中。下原创 2015-05-24 15:19:20 · 73910 阅读 · 10 评论 -
Android实战技巧之三十二:Android Studio中的源代码管理
Android Studio最近经过了两次升级到了Android Studio 1.2.1.1, 用起来是越来越顺手了。AS中加入了主流的源码管理工具,让开发者不用离开AS就可以提交和管理代码。 下面就演示一下在AS中使用git管理代码。 选择要提交的代码 右键—>commit 编写commit message 可以选择commit and push一起完成提交的动作 确认后原创 2015-05-17 21:02:37 · 7953 阅读 · 0 评论 -
Android实战技巧之三十一:拍照和录像 with Camera
Developer Guides中有一篇是专门讲Camera的,而且讲的特别细。千万别以为有了这么好的文档就可以轻松的使用android.hardware.Camera这个包去拍照和录像了,各种坑在前面等着你呢。好了,下面将要讲述我们如何像辽宁队在常规赛中填坑的经历。一、借助intent这就十分easy了,发个intent就有人帮你搞定拍照和录像。 拍照: public void onTak原创 2015-05-17 17:51:36 · 11555 阅读 · 1 评论 -
Android实战技巧之三十:人脸检测-静态
最近微软的how-old.net把人脸识别技术又大大的火了一把。通过大数据和复杂的算法,能够神奇的预测出照片中人物的性别和年龄。虽然错误率也不低,但是大家都抱着玩一玩乐一乐的心态把照片传上去让机器来鉴定一下自己的颜龄。 人脸识别算法是高深复杂的,面对着计算机视觉的种种数学公式,我就已经投降了。先来简单的玩玩人脸检测吧。Android早已提供了FaceDetector类,今天就来看看如何使用这个原创 2015-05-10 21:33:10 · 5296 阅读 · 5 评论 -
Android实战技巧之二十九:画布Canvas
Android Framework提供了一些2D画图的API,android.graphics包就是其中之一。 为了画一些东西,需要4个元素(或称组件)协同来完成: * 位图:Bitmap来保持(hold)那些像素 * 画布:Canvas来响应画画(draw)的调用(并将其写入bitmap) * 画笔:paint描述画画的颜色和样式等 * “颜料“:drawing primitive,比如原创 2015-05-07 13:29:15 · 18057 阅读 · 1 评论 -
Android实战技巧之二十八:启动另一个App/apk中的Activity
Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。本来想把本文的名字叫启动另一个进程中的Activity,觉得这样才有逼格。因为每个App都原创 2015-05-05 15:56:27 · 26482 阅读 · 1 评论 -
Android实战技巧之二十七:Maven编译开源二维码扫描项目zxing
拥有自己的手机软件工具箱是件非常有意义的事情。就目前国内Android的生态环境来说,混乱的不能再乱了。由于我们登录不了官网App商店,下软件就只好在国内五花八门的软件市场下载。由于这些市场的监管不力,什么样的软件都有,就拿二维码扫描软件来说,好多都带那种狗皮膏药一样的广告插件,真是特别讨厌。 在开源世界中有很多优秀的软件,其中zxing就是非常好的Android扫碼工具软件。我们可以拿来即用还可原创 2015-04-26 16:55:46 · 6231 阅读 · 0 评论 -
Android实战技巧之二十六:persistableMode与Activity的持久化
API 21为Activity增加了一个新的属性,只要将其设置成persistAcrossReboots,activity就有了持久化的能力,另外需要配合一个新的bundle才行,那就是PersistableBundle。 这里的持久化与传统意义的不同,它的具体实现在Activity重载的onSaveInstanceState、onRestoreInstanceState和onCreate方法。p原创 2015-04-26 13:21:17 · 13000 阅读 · 2 评论 -
Android实战技巧之二十五:模拟器如何重启?试试Genymotion!
需要测试Android 5.1系统重启后的一个功能,我手里的设备都没有这么高的版本,那么只好向模拟器求助了。就像大多网友一样,我遇到了一个大问题,如何将Android模拟器重启? 我有几个想法: * 长按模拟器的power kay,调出重启键。可惜的是系统默认只有poweroff一项。 * adb reboot或者adb shell进入模拟器再执行reboot。尝试了几个模拟器,都没有成功,原创 2015-04-25 18:50:55 · 15033 阅读 · 1 评论 -
Android实战技巧之二十四:横竖屏切换
这几年一直在做手机上和电视盒的App,几乎没有考虑过横竖屏切换的问题。电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使;而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能强大。但是按照惯例,或许也是设计师图省事,我们只是做一个方案。就像目前主流的App都只有竖屏一个模式,比如微信、京东和招商银行。我截了几张图表示一下。 但是像地图之类的应用,也许横屏会显原创 2015-04-18 22:42:21 · 16238 阅读 · 2 评论 -
Android实战技巧之二十三:Android Studio的NDK开发
较新的NDK版本是r10b,Android Studio对NDK开发的支持还处于构思阶段,所以很多工作比如用javah生成头文件等工作还要自己做。今天用一个例子来演示AS中的NDK开发。新建一个项目SecondNdkTest在此项目中新建一个Module叫ndklibrary,作为so库单独划出来。在library中新建一个java类SecondLib,内容如下:package com.linc.n原创 2015-03-29 12:04:54 · 15782 阅读 · 2 评论 -
Android实战技巧之二十二:Android 5.1 SDK下载与配置
重要文件下载地址:(1)http://dl-ssl.google.com/android/repository/sources-22_r01.zip (2)http://dl-ssl.google.com/android/repository/tools_r24.1.2-windows.zip (3)http://dl-ssl.google.com/android/repository/andr原创 2015-03-28 16:44:29 · 19766 阅读 · 2 评论 -
Android实战技巧之二十一:Android原型设计工具探索
移动开发者、移动产品经理和交互设计师在有了产品的想法后会做出一系列的草图,然后反复推敲改进,直到自己满意。这个草图就是原型设计,是产品设计初期很重要的工作,它是产品的雏形,之后会以此为原型进行开发。当移动互联网热度增加后,一些主打移动原型设计的工具如雨后春笋般冒了出来。在我看来,一个好的工具对产品还是帮助很大的,但遗憾的是,绝大多数的工具都是收费的。 下面列出我试用的工具。 1.fluidui原创 2015-03-23 21:22:49 · 14945 阅读 · 1 评论 -
Android实战技巧之二十:两个开源的图表/报表控件
项目中要用饼图和折线图表示数据,重造轮子不是咱风格,先了解一下时下比较流行的开源图表控件吧。调查发现有三个口碑不错的开源项目,它们是MPAndroidChart、AChartEngine、HoloGraphLibrary。由于AChartEngine源码放在code.google上,遂先放弃它,主要研究其他两个在github上的项目。HoloGraphLibrary项目地址:https://gith原创 2015-03-20 10:12:53 · 32621 阅读 · 8 评论 -
Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息
AS中并没有独立的Module 工程,但是可以在普通的Project中加入Module。所谓的Module就是我们通常所指的模块化的一个单元,并常常以jar包的形式存在。下面以一个获取手机信息的例子演示AS中的模块化。一、项目中新建ModuleFile—>New Module,详细见下图。 二、新建Java类新建一个PhoneInfo类,内容如下:package com.linc.myli原创 2015-03-19 15:10:39 · 73042 阅读 · 14 评论 -
Android实战技巧之十八:adb取出安装在手机中的apk
场景: 朋友看见你Android手机中的游戏或应用很好玩,也想装一个此程序,但限于网络条件不能从网上下载。那么最简单的办法就是直接从你手机中将此apk扣出来给他安装上。pm命令第一步,找到程序的包名 借助adb shell pm命令,将安装的所有应用包名列出来:$ adb shell pm list packagespackage:androidpackage:cn.wps.moffice原创 2015-03-18 18:28:41 · 20240 阅读 · 4 评论 -
Android实战技巧之十七:Linux下的模拟器硬件加速
Intel提供了一个叫HAXM的虚拟硬件加速技术,全称为:Intel Hardware Accelerated Execution Manager. 只要你的CPU是intel的产品并且支持VT(virtualization Technology)就可以使用HAXM技术将你的模拟器的速度提升至真机的水平。目前此技术支持苹果的Mac系统和Windows系统,但Linux平台不在此列。 要知道And原创 2015-03-18 17:36:57 · 11415 阅读 · 1 评论 -
Android实战技巧之十六:getprop与dumpsys命令
Android设备连接PC后,我们可以通过adb命令完成绝大多数工作。下面借助getprop、dumpsys来了解一些系统相关信息。一、getprop此命令的原理很简单,就是从系统的各种配置文件中读取信息。那么这些文件在你用adb shell进入设备内部后很容易找到,它们是:init.rcdefault.prop/system/build.prop此时直接使用cat命令也是可以把这些信息显示出来原创 2015-03-11 14:38:11 · 20091 阅读 · 0 评论 -
Android实战技巧之十五:多分辨率适配常用目录
一个好的App必须要支持绝大多数市面上的设备,适配繁多的分辨率一度让我们陷入了分辨率的海洋。无论如何,这个工作是逃不掉的。我们可以用多个layout目录对不同分辨率进行单独布局,如下:layout-large-mdpi (1024x600)layout-large-tvdpi (800x1280)layout-large-xhdpi (1200x1920)layout-xlarge-m原创 2015-03-10 14:35:06 · 7459 阅读 · 0 评论 -
Android实战技巧之十四:混淆与反编译
混淆Android Studio: 只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,如下: buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-原创 2015-03-06 16:59:42 · 20089 阅读 · 1 评论