<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[大熊的Android开发之旅]]></title><description><![CDATA[像小白一样思考，像专家一样行动！]]></description><link>https://blog.youkuaiyun.com/codezjx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codezjx]]></copyright><item><title><![CDATA[从ContentProvider报SecurityException分析出Android5.0+的一个隐藏大坑]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/79810306</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/79810306</guid><author>codezjx</author><pubDate>Tue, 03 Apr 2018 22:28:33 +0800</pubDate><description><![CDATA[前言

最近在开发A应用的时候对接了合作方的一个B应用，对方很快就把接口文档发了过来，约定好我们之间通过B应用提供的XXXContentProvider来获取相关的数据。一切看起来是如此的普通与简单，但是从刚开始调试的那一刻起，诡异的事情就发送了。九十岁老太为何起死回生？数百头母猪为何半夜惨叫？女生宿舍为何频频失窃？超市方便面为何惨招毒手？在这一切的背后，是人性的扭曲，还是道德的沦丧？事件的最后，...]]></description><category></category></item><item><title><![CDATA[开源了一款Android的IPC库AndLinker，结合了AIDL和Retrofit的特性，支持RxJava]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/79587745</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/79587745</guid><author>codezjx</author><pubDate>Fri, 16 Mar 2018 22:28:47 +0800</pubDate><description><![CDATA[前言

工作中经常会遇到进程间通信的需求，但每次通过AIDL实现又觉得步骤十分的繁琐。因此用业余时间自己设计并开源了这款IPC库。设计思路来源于Retrofit通过动态代理生成实现类的这种方式，把AIDL与Retrofit的特性完美的结合起来。

这是你们没有体验过的全新方式，只需体验三分钟，你就会像我一样，爱上这款开源库~

项目地址：https://github.com/codezjx/And...]]></description><category></category></item><item><title><![CDATA[关于ANR异常捕获与分析，你所需要知道的一切]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/78648333</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/78648333</guid><author>codezjx</author><pubDate>Mon, 27 Nov 2017 19:48:05 +0800</pubDate><description><![CDATA[背景最近项目组需要实现捕获ANR并上传到公司服务器相关的功能，因此花了点时间来整理相关的知识，并从AMS源码与腾讯Bugly-SDK中逆向找到相关思路，在此分享给大家。]]></description><category></category></item><item><title><![CDATA[Android Studio 3.0及Gradle Plugin 3.0升级注意事项]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/78627403</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/78627403</guid><author>codezjx</author><pubDate>Fri, 24 Nov 2017 18:53:06 +0800</pubDate><description><![CDATA[最近终于有空升级了一下项目中的Gradle和Gradle Plugin的版本，还是踩了蛮多的坑。特别是依赖以及渠道编译这块变动较大，因此把遇到的一些问题点记录下来，分享给后人查阅~ 其实当AS升级到3.0之后，Gradle Plugin和Gradle不升级也是可以继续使用的，但很多新的特性如：Java8支持、新的依赖匹配机制、AAPT2等新功能都无法正常使用~  所以长期看来...]]></description><category></category></item><item><title><![CDATA[使用Hexo+GitHub搭建及配置个人博客]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/76473868</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/76473868</guid><author>codezjx</author><pubDate>Mon, 31 Jul 2017 23:06:56 +0800</pubDate><description><![CDATA[前言现在用GitHub+各种静态博客框架来搭建博客系统已经非常常见了，如：Hexo、Jekyll、Octopress、WordPress…等。由于其博客系统维护方便、配置简单、原生支持MD语法等优点等一直深受码农们的喜爱。经过一番查找与对比，博主最终还是选择了Hexo，理由有以下：主题选择多且美、配置异常简单、编译文章速度极快等优点…好了，话不多说，咱们一探究竟。搭建前的步骤
在GitHub上创建好]]></description><category></category></item><item><title><![CDATA[友盟统计UMID潜在的一个坑]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51823694</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51823694</guid><author>codezjx</author><pubDate>Mon, 04 Jul 2016 21:09:22 +0800</pubDate><description><![CDATA[最近发现友盟的数据统计里面，活跃用户的数量有点不大对劲，跟启动次数相比，严重偏少。sdk的使用方式没啥好说的，就那么简单几步，应该不会是sdk设置的问题。于是就从友盟关于活跃用户的定义开始，着手分析这个问题。关于活跃用户的定义，可以参考官方这篇文章：[你真的了解活跃用户吗？][1]，总结起来其实就是很简单的一句：
  活跃用户的定义：打开应用的用户即为活跃用户，不考虑用户的使用情况。
从上面的文章，]]></description><category></category></item><item><title><![CDATA[在Android上使用官方Lambda支持 - Android N & Jack工具（兼容旧平台）]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51327421</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51327421</guid><author>codezjx</author><pubDate>Fri, 06 May 2016 00:07:29 +0800</pubDate><description><![CDATA[Google前段时间发布了Android N Preview，对于开发者来说，特别重要的一点是开始支持Java8里面的一些新特性了。N Preview目前支持的特性也非常有限，主要有下列几项]]></description><category></category></item><item><title><![CDATA[在Android上使用Lambda表达式 - retrolambda插件]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51327164</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51327164</guid><author>codezjx</author><pubDate>Thu, 05 May 2016 23:10:02 +0800</pubDate><description><![CDATA[Java8比较大的一个变化是加入了Lambda表达式，一种紧凑的，传递行为的方式。它可以使你的代码更简洁、逻辑更清晰。特别是用Rxjava的时候，将各种数据变换使用Lambda表达式来简化，可以最大化的减少样板代码，使整个数据流的处理逻辑十分清晰（下面会有个例子）。]]></description><category></category></item><item><title><![CDATA[Android中使用Picasso将图片直接转换为圆形]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51319048</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51319048</guid><author>codezjx</author><pubDate>Wed, 04 May 2016 23:10:04 +0800</pubDate><description><![CDATA[圆形头像现在很流行了，Github上也有很多开源的库，最经典的是直接使用一个自定义的圆形ImageViwe，比较有代表性的有这个项目：hdodenhof/CircleImageView。但是，如果你的项目中正好使用Picasso作为图片异步加载的话，可以直接使用Picasso原生的Transformation机制，它允许你在显示图片前做一些转化。]]></description><category></category></item><item><title><![CDATA[Realm的model终于可以不继承RealmObject了]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51307058</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51307058</guid><author>codezjx</author><pubDate>Tue, 03 May 2016 19:23:27 +0800</pubDate><description><![CDATA[旧的实现方式只能是继承RealmObject这个抽象类，对于一些第三方的类库，如果同样需要继承某些基类，很可能会有冲突：public class User extends RealmObject {
    ...
}因此从0.89.0版本开始，可以直接实现一个RealmModel接口，并在类声明前面加上@RealmClass注解声明即可：@RealmClass
public class User]]></description><category></category></item><item><title><![CDATA[使用RxJava优化Retrofit请求]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51228749</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51228749</guid><author>codezjx</author><pubDate>Sat, 23 Apr 2016 22:28:11 +0800</pubDate><description><![CDATA[在进行任何一个Google APIs接口调用的时候，很有可能由于access token过期了），会导致我们的请求失败。在这个时候，我们必须重新请求token，然后在请求成功的callback中再次请求我们相关的API。看到这里，像这种异步的嵌套请求，我们很容易就联想到RxJava，异步世界必不可少的库。那么在Retrofit2.0中如何集成RxJava呢？在基于你已经正常使用Retrofit或者okhttp的情况下]]></description><category></category></item><item><title><![CDATA[使用Stetho调试Retrofit的网络请求]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51228201</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51228201</guid><author>codezjx</author><pubDate>Sat, 23 Apr 2016 20:55:29 +0800</pubDate><description><![CDATA[Stetho是Facebook出品的一个非常强大的Android调试工具。在基于你已经正常使用Retrofit或者okhttp的情况下，只需要简单3步，你就可以在Chrome上的Developer Tools中调试你Retrofit的请求了。就像Web开发使用调试功能查看页面的访问数据一样那么方便。不仅如此，你还可以在里面直接查看SQLite中的数据等等]]></description><category></category></item><item><title><![CDATA[使用Retrofit2.0实现Google Drive文件上传进度显示]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51227763</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51227763</guid><author>codezjx</author><pubDate>Sat, 23 Apr 2016 19:19:05 +0800</pubDate><description><![CDATA[使用Retrofit2.0实现Google Drive文件上传进度显示在上一篇文章中，我们完成了Retrofit2.0接口的定义及基本的调用。 
不知大家是否关注到DriveApi.uploadFileMutil()这个接口方法需要传入两个MultipartBody.Part对象，分别对应Metadata part和Media part，如何实现这里的Part对象呢？]]></description><category></category></item><item><title><![CDATA[使用Retrofit2.0实现GoogleDrive相关API]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51227581</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51227581</guid><author>codezjx</author><pubDate>Sat, 23 Apr 2016 18:32:37 +0800</pubDate><description><![CDATA[使用Retrofit2.0实现GoogleDrive相关API做移动开发的相信对Retrofit一点也不陌生，它是一套RESTful架构的Android(Java)客户端实现，可以利用接口，方法和注解参数（parameter annotations）来声明式定义一个请求应该如何被创建。它的出现使我们只需关注接口所定义的功能而非拘泥于具体实现中，极大简化和提升了开发效率。一、相关API接口及请求参数下]]></description><category></category></item><item><title><![CDATA[Google Drive Oauth2.0认证流程]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51029457</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51029457</guid><author>codezjx</author><pubDate>Thu, 31 Mar 2016 19:35:12 +0800</pubDate><description><![CDATA[Oauth2.0认证流程：Google提供的APIs访问是基于Oauth2.0认证的，其流程可以大致分为以下几个步骤：
客户端App发起认证（若用户木有登录，则需要先登录）
弹出授权页面，用户点击允许后，Google认证服务器给我们返回一个授权码（Authorization code）
客户端获取到授权码以后，用授权码向认证服务器请求access token
服务器验证授权码无误后返回access]]></description><category></category></item><item><title><![CDATA[Google Drive WebView授权方式实现]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51025563</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51025563</guid><author>codezjx</author><pubDate>Thu, 31 Mar 2016 13:36:09 +0800</pubDate><description><![CDATA[由于国内大多数机器都木有安装Google Service框架，也就是说木有办法直接使用方便快捷的Drive SDK。因此，这一篇文章将介绍如何通过WebView的方式进行Oauth2.0授权码的获取（话说《ES文件浏览器》就是通过这种方式来实现Oauth2.0授权的）。具体的效果是这样的：如果没有登录Google账号，会要求你先登录一次]]></description><category></category></item><item><title><![CDATA[Google Drive开启API和创建Credential]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/51025408</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/51025408</guid><author>codezjx</author><pubDate>Thu, 31 Mar 2016 13:05:32 +0800</pubDate><description><![CDATA[首先按照官网流程在Google Developers Console创建好Project，并开启Drive API。 然后进入Credentials界面新建一个OAuth 2.0 client凭证。 Application type里面会有以下几种类型：Web application]]></description><category></category></item><item><title><![CDATA[用Fiddler在Android上抓HTTPS包]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/50620337</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/50620337</guid><author>codezjx</author><pubDate>Mon, 01 Feb 2016 20:17:10 +0800</pubDate><description><![CDATA[用Fiddler在Android上抓HTTPS的包Fiddler是一个HTTP协议调试代理工具，在开发网络应用的时候经常会用到，其最基本的作用是能抓HTTP的数据包，当然它还有更高级的用法，如添加断点、修改请求与相应的数据等等。。。]]></description><category></category></item><item><title><![CDATA[Google Analytics自定义异常格式]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/50485390</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/50485390</guid><author>codezjx</author><pubDate>Fri, 08 Jan 2016 21:39:25 +0800</pubDate><description><![CDATA[自动配置 
可以在xml配置文件中直接配置以下字段，即可开启异常捕获与上传：
<bool name="ga_reportUncaughtExceptions">true</bool>
问题来了用系统的默认ExceptionParser会有下面2个问题：格式是按照GA默认的样式
如果开启了混淆，就无法知道那个类文件出问题了默认格式如下：异常名 (@类名:方法名:行数) {所在线程}]]></description><category></category></item><item><title><![CDATA[Google Analytics多渠道实现]]></title><link>https://blog.youkuaiyun.com/codezjx/article/details/50408833</link><guid>https://blog.youkuaiyun.com/codezjx/article/details/50408833</guid><author>codezjx</author><pubDate>Sat, 26 Dec 2015 15:46:32 +0800</pubDate><description><![CDATA[Google Analytics多渠道实现翻遍官方Android版Guide文档，你会发现一点多渠道相关的描述都木有。原因是GA（Google Analytics）里面没有多渠道这个概念，GA最初是从网页统计延伸到移动端的，在网页版的统计里面，有个叫做广告系列来源的东西，可以用来统计流量的来源。乍看之下，跟我们移动端的多渠道有点类似，用来统计不同市场的数据。经过这段时间的使用，主要有2种方式实现：]]></description><category></category></item></channel></rss>