自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大熊的Android开发之旅

像小白一样思考,像专家一样行动!

  • 博客(47)
  • 收藏
  • 关注

原创 从ContentProvider报SecurityException分析出Android5.0+的一个隐藏大坑

前言最近在开发A应用的时候对接了合作方的一个B应用,对方很快就把接口文档发了过来,约定好我们之间通过B应用提供的XXXContentProvider来获取相关的数据。一切看起来是如此的普通与简单,但是从刚开始调试的那一刻起,诡异的事情就发送了。九十岁老太为何起死回生?数百头母猪为何半夜惨叫?女生宿舍为何频频失窃?超市方便面为何惨招毒手?在这一切的背后,是人性的扭曲,还是道德的沦丧?事件的最后,...

2018-04-03 22:28:33 1567 1

原创 开源了一款Android的IPC库AndLinker,结合了AIDL和Retrofit的特性,支持RxJava

前言工作中经常会遇到进程间通信的需求,但每次通过AIDL实现又觉得步骤十分的繁琐。因此用业余时间自己设计并开源了这款IPC库。设计思路来源于Retrofit通过动态代理生成实现类的这种方式,把AIDL与Retrofit的特性完美的结合起来。这是你们没有体验过的全新方式,只需体验三分钟,你就会像我一样,爱上这款开源库~项目地址:https://github.com/codezjx/And...

2018-03-16 22:28:47 1793

原创 关于ANR异常捕获与分析,你所需要知道的一切

背景最近项目组需要实现捕获ANR并上传到公司服务器相关的功能,因此花了点时间来整理相关的知识,并从AMS源码与腾讯Bugly-SDK中逆向找到相关思路,在此分享给大家。

2017-11-27 19:48:05 15140 4

原创 Android Studio 3.0及Gradle Plugin 3.0升级注意事项

最近终于有空升级了一下项目中的Gradle和Gradle Plugin的版本,还是踩了蛮多的坑。特别是依赖以及渠道编译这块变动较大,因此把遇到的一些问题点记录下来,分享给后人查阅~ 其实当AS升级到3.0之后,Gradle Plugin和Gradle不升级也是可以继续使用的,但很多新的特性如:Java8支持、新的依赖匹配机制、AAPT2等新功能都无法正常使用~ 所以长期看来...

2017-11-24 18:53:06 9066

原创 使用Hexo+GitHub搭建及配置个人博客

前言现在用GitHub+各种静态博客框架来搭建博客系统已经非常常见了,如:Hexo、Jekyll、Octopress、WordPress…等。由于其博客系统维护方便、配置简单、原生支持MD语法等优点等一直深受码农们的喜爱。经过一番查找与对比,博主最终还是选择了Hexo,理由有以下:主题选择多且美、配置异常简单、编译文章速度极快等优点…好了,话不多说,咱们一探究竟。搭建前的步骤在GitHub上创建好

2017-07-31 23:06:56 855

原创 友盟统计UMID潜在的一个坑

最近发现友盟的数据统计里面,活跃用户的数量有点不大对劲,跟启动次数相比,严重偏少。sdk的使用方式没啥好说的,就那么简单几步,应该不会是sdk设置的问题。于是就从友盟关于活跃用户的定义开始,着手分析这个问题。关于活跃用户的定义,可以参考官方这篇文章:[你真的了解活跃用户吗?][1],总结起来其实就是很简单的一句: 活跃用户的定义:打开应用的用户即为活跃用户,不考虑用户的使用情况。从上面的文章,

2016-07-04 21:09:22 13071 5

原创 在Android上使用官方Lambda支持 - Android N & Jack工具(兼容旧平台)

Google前段时间发布了Android N Preview,对于开发者来说,特别重要的一点是开始支持Java8里面的一些新特性了。N Preview目前支持的特性也非常有限,主要有下列几项

2016-05-06 00:07:29 7914 5

原创 在Android上使用Lambda表达式 - retrolambda插件

Java8比较大的一个变化是加入了Lambda表达式,一种紧凑的,传递行为的方式。它可以使你的代码更简洁、逻辑更清晰。特别是用Rxjava的时候,将各种数据变换使用Lambda表达式来简化,可以最大化的减少样板代码,使整个数据流的处理逻辑十分清晰(下面会有个例子)。

2016-05-05 23:10:02 16778

原创 Android中使用Picasso将图片直接转换为圆形

圆形头像现在很流行了,Github上也有很多开源的库,最经典的是直接使用一个自定义的圆形ImageViwe,比较有代表性的有这个项目:hdodenhof/CircleImageView。但是,如果你的项目中正好使用Picasso作为图片异步加载的话,可以直接使用Picasso原生的Transformation机制,它允许你在显示图片前做一些转化。

2016-05-04 23:10:04 8246

原创 Realm的model终于可以不继承RealmObject了

旧的实现方式只能是继承RealmObject这个抽象类,对于一些第三方的类库,如果同样需要继承某些基类,很可能会有冲突:public class User extends RealmObject { ...}因此从0.89.0版本开始,可以直接实现一个RealmModel接口,并在类声明前面加上@RealmClass注解声明即可:@RealmClasspublic class User

2016-05-03 19:23:27 5585

原创 使用RxJava优化Retrofit请求

在进行任何一个Google APIs接口调用的时候,很有可能由于access token过期了),会导致我们的请求失败。在这个时候,我们必须重新请求token,然后在请求成功的callback中再次请求我们相关的API。看到这里,像这种异步的嵌套请求,我们很容易就联想到RxJava,异步世界必不可少的库。那么在Retrofit2.0中如何集成RxJava呢?在基于你已经正常使用Retrofit或者okhttp的情况下

2016-04-23 22:28:11 5480 3

原创 使用Stetho调试Retrofit的网络请求

Stetho是Facebook出品的一个非常强大的Android调试工具。在基于你已经正常使用Retrofit或者okhttp的情况下,只需要简单3步,你就可以在Chrome上的Developer Tools中调试你Retrofit的请求了。就像Web开发使用调试功能查看页面的访问数据一样那么方便。不仅如此,你还可以在里面直接查看SQLite中的数据等等

2016-04-23 20:55:29 5188

原创 使用Retrofit2.0实现Google Drive文件上传进度显示

使用Retrofit2.0实现Google Drive文件上传进度显示在上一篇文章中,我们完成了Retrofit2.0接口的定义及基本的调用。 不知大家是否关注到DriveApi.uploadFileMutil()这个接口方法需要传入两个MultipartBody.Part对象,分别对应Metadata part和Media part,如何实现这里的Part对象呢?

2016-04-23 19:19:05 3076 1

原创 使用Retrofit2.0实现GoogleDrive相关API

使用Retrofit2.0实现GoogleDrive相关API做移动开发的相信对Retrofit一点也不陌生,它是一套RESTful架构的Android(Java)客户端实现,可以利用接口,方法和注解参数(parameter annotations)来声明式定义一个请求应该如何被创建。它的出现使我们只需关注接口所定义的功能而非拘泥于具体实现中,极大简化和提升了开发效率。一、相关API接口及请求参数下

2016-04-23 18:32:37 2419 2

原创 Google Drive Oauth2.0认证流程

Oauth2.0认证流程:Google提供的APIs访问是基于Oauth2.0认证的,其流程可以大致分为以下几个步骤:客户端App发起认证(若用户木有登录,则需要先登录)弹出授权页面,用户点击允许后,Google认证服务器给我们返回一个授权码(Authorization code)客户端获取到授权码以后,用授权码向认证服务器请求access token服务器验证授权码无误后返回access

2016-03-31 19:35:12 3645 1

原创 Google Drive WebView授权方式实现

由于国内大多数机器都木有安装Google Service框架,也就是说木有办法直接使用方便快捷的Drive SDK。因此,这一篇文章将介绍如何通过WebView的方式进行Oauth2.0授权码的获取(话说《ES文件浏览器》就是通过这种方式来实现Oauth2.0授权的)。具体的效果是这样的:如果没有登录Google账号,会要求你先登录一次

2016-03-31 13:36:09 4494 6

原创 Google Drive开启API和创建Credential

首先按照官网流程在Google Developers Console创建好Project,并开启Drive API。 然后进入Credentials界面新建一个OAuth 2.0 client凭证。 Application type里面会有以下几种类型:Web application

2016-03-31 13:05:32 8380 2

原创 用Fiddler在Android上抓HTTPS包

用Fiddler在Android上抓HTTPS的包Fiddler是一个HTTP协议调试代理工具,在开发网络应用的时候经常会用到,其最基本的作用是能抓HTTP的数据包,当然它还有更高级的用法,如添加断点、修改请求与相应的数据等等。。。

2016-02-01 20:17:10 17429 6

原创 Google Analytics自定义异常格式

自动配置 可以在xml配置文件中直接配置以下字段,即可开启异常捕获与上传:<bool name="ga_reportUncaughtExceptions">true</bool>问题来了用系统的默认ExceptionParser会有下面2个问题:格式是按照GA默认的样式如果开启了混淆,就无法知道那个类文件出问题了默认格式如下:异常名 (@类名:方法名:行数) {所在线程}

2016-01-08 21:39:25 1329

原创 Google Analytics多渠道实现

Google Analytics多渠道实现翻遍官方Android版Guide文档,你会发现一点多渠道相关的描述都木有。原因是GA(Google Analytics)里面没有多渠道这个概念,GA最初是从网页统计延伸到移动端的,在网页版的统计里面,有个叫做广告系列来源的东西,可以用来统计流量的来源。乍看之下,跟我们移动端的多渠道有点类似,用来统计不同市场的数据。经过这段时间的使用,主要有2种方式实现:

2015-12-26 15:46:32 2673

原创 Google Analytics基本参数配置

Google Analytics基本参数配置官方Guide文档中Parameters这一节讲述了可以在xml中配置的选项,配置方法与范围稍微有些区别,坑爹的Guide文档中并没有描述它们的区别,具体的配置方法我们可以从API文档中获取。

2015-12-25 23:48:36 3132 1

原创 Gradle Library Module的复用机制

你可以注意到`projectA`和`projectB`均包含相同的module`krill`,实际上他是一个相同的Library Project,那么问题就来了:如何高效的复用现有的module?实际开发中这个问题应该比较常见,特别针对于同时需要开发多个应用的场景,解决方法如下:

2015-10-31 11:50:07 4178

原创 Gradle Library项目的多渠道打包实现

项目中由于某种需求需要对Library项目也进行多渠道发布,如:App已经实现了多渠道打包,此时不同渠道包依赖的同一个Library中的某些资源(举个栗子)也需要根据渠道不同而改变,这个时候就需要对Libr

2015-10-30 20:36:53 4041

原创 Gradle App项目的多渠道打包实现

App项目的多渠道打包实现近期项目需要根据客户的要求定制UI,因此需要用到多渠道打包,跟着官方的Gradle Plugin User Guide教程学习了下,顺便做下笔记。内容主要分为以下几个模块:1.Create Product flavors多渠道可以让我们灵活的定制一个应用,如UI、包名、versionName、修改Manifest中的内容等 通过以下DSL即可创建渠道flavor1和fla

2015-10-30 20:25:34 3258

原创 Recent键及状态栏屏蔽

Recent键及状态栏下拉的屏蔽Back键和Home键的屏蔽可以看我这篇贴:http://blog.csdn.net/codezjx/article/details/45485975Home键与Recent键的点击事件是在framework层进行处理的,因此onKeyDown与dispatchKeyEvent都捕获不到点击事件。查看StatusBarManager.java源码

2015-05-06 22:24:25 8117 2

原创 Back键和Home键的屏蔽

(1)屏蔽返回键:  重写onBackPressed()即可,不调用超类方法@Overridepublic void onBackPressed() { // super.onBackPressed();}(2)屏蔽Home键:1、常规方法如下:(但是在Android4.0以上会失效)@Overridepublic void onAttachedTo

2015-05-04 21:16:21 14536 1

原创 onCreate中View的width,height为0的问题

当我们在onCreate()回调方法中去调用View的getWidth()、getHeight()、getTop()、getLeft()等方法的时候,是无法获取到正确值的,此时只会返回0。 为什么呢?因为View的显示必须经历Measure(测量)、Layout(布局)和Draw(绘制)过程。而在Measure与Layout过程完成之后,View的width、height、top、le

2015-04-28 20:08:57 3275 2

原创 startService与bindService混合使用对Service生命周期的影响

项目开发中有遇到startService与bindService混合使用的情况,发现其对Service生命周期有很大影响,故与各位分享一下。。。一、正常情况(应该大家都很熟了,简单介绍):(1)单独使用startService():onCreate()->onStartCommand()->Servicerunning->onDestroy()->Serviceshutdo

2015-04-27 20:08:24 9051 3

原创 让Android屏幕不响应任何点击

原理:在顶层显示一个Dialog,让其不可Cancel(无法响应任何点击),并将其设置为最顶层的type,然后将其灰色区域设置为透明即可完成该效果(免Root,免系统权限,亲测包括Android5.0也有这个漏洞)。下面是详细代码与解析: Dialog dialog = new AlertDialog.Builder(getApplicationContext(), R.style.Tra

2015-04-23 12:33:51 9976 4

原创 Android三种常用动画分享

在Android3.0(即API Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property Animation(属性动画)。 一、Frame Animation:(逐帧动画)这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理

2015-04-21 23:19:28 3877

原创 adb常见问题及解决方法

问题一:ADB server didn't ACK * failed to start daemon * 原因:adb的默认端口为5037,因为该端口被占用了,因此启动不了分析:查看到底是谁占用了5037这个端口?(1)命令行CMD执行:netstat -ano | findstr "5037":TCP   127.0.0.1:5037   Bill-PC:55940   TI

2015-04-21 22:59:17 3532

转载 为什么调用FragmentPagerAdapter.notifyDataSetChanged()并不能更新其Fragment?

转载自:http://www.cnblogs.com/dancefire/archive/2013/01/02/why-notifyDataSetChanged-does-not-work.html 在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集

2015-04-21 21:55:28 1123

原创 在Android Studio中为jar添加source源码

下面的步骤将介绍如何在Android Studio中为jar库绑定源码!!!1. 在build.gradle中添加jar依赖:dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])               //针对libs下的.jar库    compile files('libs/xxxx

2014-11-25 13:36:03 18411 1

原创 Android Studio中常用设置与快捷键(私人珍藏,Eclipse转AS必看)

常用设置:1.Tab不用4个空格Code Style->Java->Tabs and Indents->Use tab characterCode Style->General->Use tab character               (例如:版本控制Diff界面按下Tab)2.可视化Tab和空格Settings->IDE Settings->Editor->A

2014-08-29 22:28:19 10633 4

原创 Android Studio中手动导入Eclipse Project

RT,这应该是很多朋友刚从Eclipse转到Android Studio后遇到最大的一个问题,首先我们需要重新认识AS里面的目录结构,在我前一篇帖子里面也有提到(Android Studio中的Project相当于Eclipse中的Workspace,Module则相当于Eclipse中的Project)。所以我们手动导入Project,其实就是导入AS里面的Module。主要有以下几个步骤

2014-08-29 21:34:26 5677

原创 Android Studio使用心得 - 常见问题集锦

整理了一些这段时间遇到的常见问题,希望对各位猿们有帮助。。。如果觉得有用就点个赞哦问题一:Error:(26, 9) Attribute application@icon value=(@drawable/logo) from AndroidManifest.xml:26:9Error:(28, 9) Attribute application@theme value=(@st

2014-08-19 00:16:41 89129 12

原创 Android Studio使用心得 - 简介与环境配置

关于Android Studio在2013 Google IO大会上发布的全新IDE Android Studio相信各位猿们并不陌生,截止2014的Google IO大会,虽然依然木有发布正式版,但是根据我这几周的使用情况来说,BUG已经很少了,完全不影响正常使用。而且Android Studio是基于IntelliJ的,无论从运行速度上还是编程的快捷性上,都比Eclipse的体验要

2014-08-14 00:04:16 7153 7

原创 《单例模式》之双重检查加锁DCL(结合SQLiteOpenHelper实例)

前言:有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这类对象只能有一个实例,如果创造出多个实例,就会导致许多问题产生。例如:程序的行为异常、资源使用过量,or不一致的结果。Android应用程序开发中,我们也会用到单例。如最经典的:单例SQLiteOpenHelper数据库操作类,专门处理数据库之间

2013-05-04 15:25:59 3071 4

原创 Android新版NDK环境配置(免Cygwin)

前言:Android NDK r7及以上的版本已经集成了Cygwin编译环境,也就是说,我们完全可以抛弃庞大的Cygwin了。r6及以下版本,也可以抛弃几个G的完整版,使用精简过的Mini-Cygwin来编译,解压后大小仅9M,但短小巧精悍,完全可以满足Android NDK的开发。下载地址:https://code.google.com/p/mini-cygwin/Eclip

2013-05-03 14:16:20 14868

原创 Intent.putExtra()传递Object对象或者ArrayList<Object>

Intent传递基本类型相信大家都十分熟悉,如何传递Object对象或者ArrayList对象呢?可以通过:(1)public Intent putExtra (String name, Serializable value)(2)public Intent putExtra (String name, Parcelable value)       public Intent p

2013-05-02 17:44:02 28373 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除