- 博客(35)
- 资源 (4)
- 收藏
- 关注
原创 submodule + gradle配置实现动态打包
项目背景 最近的项目是一个通用的播放框架。内部集成了目前市面上主流的视频网站的播放sdk,比如爱奇艺、腾讯、华数等。另外,还需要支持明流的url播放。这个通用的播放框架需要在多个项目中使用,各个项目需要支持的播放方式也是不一样的。有的项目只需要支持url播放,有的项目需要支持所有的播放方式。如果统一的只提供一个jar或者aar,将导致只需要url播放的应用也需要集成一个巨大无比的库。而且,这个
2017-05-23 16:04:44
1511
原创 submodule集成第三方库
Maven集成第三方库在Android Studio中,原生支持maven仓库,可以简单的几行配置项就可以集成第三方的jar或者aar。如下两步即可实现:配置jcenter地址 配置依赖 这种方式简单方便,支持广泛,但是也存在一些痛点:需要第三方库编译打包完成,并上传到maven仓库。GitHub上很多项目并不支持maven下载。简单方便,但不够灵活。如果是一个庞大的第三方库,即使你只想使用其
2017-05-23 14:49:38
1854
原创 主流插件框架分析
前言目前移动端产品功能越来越复杂,模块不断增加,APK体积也不断增长。由于Android Dalvik最初设计的问题,单个.dex文件方法数最多是65536个。因此,APK难免会遇到64K方法数限制的问题。 Google官方提供了MultiDex解决方案。但是该解决方案,有比较大的局限性。应用进程启动时MultiDex需要在主线程去做DEXOPT操作,中间涉及到文件读写、文件验证、数据复制、反射
2017-03-10 14:35:25
4046
原创 Web Cache的实现
CDN将图片、视频和网页等内容存储到离用户最近的地方,实现为大量用户的就近服务,减少对源服务器和骨干网络的压力。负载均衡系统和内容管理系统都是为了更好的实现各个CDN节点协同工作。所以,CDN的本质上等于分层分布式集群Cache + 智能访问调度。根据缓存内容的不同,可以将Cache设备分为Web Cache和流媒体Cache。Web Cache服务器主要缓存静态网页等内容,也具备文件下载和流媒体
2016-11-26 16:16:50
3498
原创 CDN架构
CDN公司在整个互联网中部署了数以百计的节点(Cache服务器集群)。这些Cache服务器都分布在各个网络运营商的IDC机房中,位置尽量靠近用户网络。CDN系统将内容从源站复制到各个节点,在内容提供者更新内容时,CDN系统将更新后的内容重新分发到各个节点。当用户请求内容时,CDN系统将选择一个最优的节点向用户提供内容。这个挑选最优节点的过程,就是负载均衡。而这个最优节点,可能最接近用户,或者有一条与
2016-10-11 18:06:41
6643
原创 CDN基础知识
CDN的基本概念CDN,content distribute network(内容分发网络)或者content delivery network(内容交付网络)。很显然,CDN的任务是将内容从源站传递给用户。联网的设计理念是:网络是中立的,是无控制的,任何人都无决定权;网络是应用无关的,它的任务就是将数据更好更快的进行端对端的传输。常说的互联网由两层组成:一层是以TCP/IP为代表的网络
2016-10-08 17:15:41
1563
原创 CDN专栏
最近看了《CDN技术详解》一书,结合自己在工作中的实践,整理总结,作为自己的读书笔记。 以下文章中所有插图均截取自《CDN技术详解》。1. cdn基础知识 2. cdn的技术架构 3. web cache实现 4. 流媒体cdn技术
2016-09-29 15:01:10
510
转载 volatile关键字解析
本文转载Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatil
2016-07-20 12:08:52
227
原创 Android资源文件的管理
android程序中,不管是普通的drawable、anim、color、layout、value等类型的资源文件,还是raw类型的资源文件,或者asset类型的资源文件,所有的资源文件都是通过AssetManager管理的。其中asset资源文件,在打包apk时,不会有任何的改动,会被原封不动的打包进apk内,可以通过文件名和路径访问;而raw资源文件打包时也会原封不动的打包,只不过使用资源id访
2016-07-12 22:16:40
4002
原创 ANR机制
ANR全称是application not responsing,也就是程序无响应。在android系统中,和程序崩溃一样,都是程序设计编码的问题。 android应用中,当你的touch、key等事件得不到及时响应时,在一定的延时之后,系统就会弹出ANR的警告。此时,用户可以选择结束程序或者继续等待。本文将主要从分析ANR原理,以及如何避免ANR。一、ANR产生的原因在android程序中,所有的
2016-07-08 00:48:07
1573
原创 zygote启动流程
在Android系统中,所有的应用程序和系统服务京城system server都是由zygote进程fork出来的。本文简单分析zygote的启动过程。1、init.rc init进程是linux系统启动的第一个进程,后续启动的所有进程都是init进程的直接或者间接fork出来的,zygote进程也是一样。service zygote /system/bin/app_process -X
2016-06-13 23:40:35
539
转载 JNI相关知识
本文转载,原文链接要素 :1、 该函数大全是基于C语言方式的,对于C++方式可以直接转换 ,例如,对于生成一个jstring类型的方法转换分别如下: C编程环境中使用方法为:(*env) ->NewStringUTF(env , “123”) ; C++编程环境中(例如,VC下)则是: env ->NewStri
2016-06-08 11:56:13
312
原创 media server分析
media server是android的一个重要服务,主要是与多媒体相关的一些系统服务。在 ServiceManager相关中我们已经分析了,media server是在系统init.rc脚本中启动的,并且在service manager之后。由于media server中包含了media player、audio flinger、camera等多个service相关的东西,本文则只取其中的med
2016-05-30 23:57:52
5757
原创 ServiceManager启动流程
ServiceManager是一个系统服务进程,在系统init.rc脚本中启动。其代码位于目录/frameworks/base/cmds/servicemanager下。1、init.rc init.rc文件存放在/system/core/rootdir/目录下。service servicemanager /system/bin/servicemanager class core
2016-05-27 00:30:10
2848
1
原创 native binder相关类
android native binder相关的类在/frameworks/native/libs/binder/目录下,对应的头文件在/frameworks/native/include/binder/目录下。不同版本的源码,路径可能会有不同。1、ProcessState.cppProcessState::ProcessState() : mDriverFD(open_driver())
2016-05-24 22:57:35
760
原创 Java aidl分析
1、IBinder接口定义:public String getInterfaceDescriptor();public boolean pingBinder();public boolean isBinderAlive();public IInterface queryLocalInterface(String descriptor);public void dump(FileDescrip
2016-05-23 23:14:25
918
原创 PostgreSQL的一些操作
psql命令先使用安装pq时的超级用户postgres登入psql控制台,创建一个新的用户和数据库,并将该数据库的权限赋给新用户。创建用户 CREATE USER user_name WITH PASSWORD ‘user_password’; 创建数据库 CREATE DATABASE user_db OWNER user_name;将数据库的权限赋给用户 GRANT ALL PRIVILE
2015-11-04 11:49:46
332
原创 git操作
git ignore配置1、语法规则: 以斜杠“/”表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符; 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;2、举例: *.[oa] // 忽略.o和.a文件 !my.b // my.b除外 build // 忽略build文件和build目录 build
2015-10-12 14:22:06
299
原创 android studio的一些编译错误
Must have one-pixel frame that is either transparent or white. 使用 .9图片编辑工具打开对应的图片,严格设置四边,重新保存即可libpng warning: iCCP: Not recognizing known sRGB profile that has been edited 可以直接忽略掉这种警告,或者参考[http://my
2015-10-09 20:16:14
279
原创 常见的MySQL命令大全
一、连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:
2015-10-08 18:39:37
323
原创 eclipse svn操作
创建 分支 / 标记1、使用eclipse import菜单导入svn项目。 2、项目菜单 -> Team -> 分支/标记对话框,选择分支存储位置。 此处是要创建一个基础分支。路径前缀为 branches/base,而项目名字是FangYan。所以最终路径是branches/base/FangYan。需要注意服务器上该路径是不存在的。 2次Next然后输入 分支/标记 的co
2015-10-08 18:33:42
336
原创 Android开源项目汇总
https://github.com/wasabeef/awesome-android-ui#material https://github.com/Trinea/android-open-project 各种常用工具、UI的汇总。
2015-08-18 18:57:10
307
原创 Activity启动流程
本文主要是对activity的启动流程做一个简单分析1、Activity.java 位于/frameworks/base/core/java/android/app/目录。有activity发起startActivity()请求,再调用到startActivityForResult()。 public void startActivityForResult(Intent intent, in
2015-07-29 23:55:29
698
原创 MediaPlayer源码简单分析
/frameworks/base/media/java/android/media目录 MediaPlayer.java/frameworks/base/media/jni目录 com_android_MediaPlayer.cpp (jni层,将java对象和BnMediaPlayerClient对象一一对应绑定)/frameworks/av/include/media和/framework
2015-07-28 22:48:50
2528
原创 按键事件在java framework中的流程
按键事件在activity中的流程和按键事件在native和jni中的流程两篇文章主要探讨了事件在activity中的处理流程和事件在native层的处理流程。本文则主要探讨事件如何进入activity,以及如果activity未处理事件时,事件在framework中的处理。事件如何进入activity 前面的文章已经讲到了事件经过native和jni的处理之后,最终通过InputChannel进
2015-07-26 20:19:06
846
原创 按键事件在native和jni中的流程
按键事件在activity中的流程一文已经简单介绍了按键事件在activity中的处理流程。本文则着重介绍事件进入activity之前的nativie层的流程。Native层的流程 native层相关类都在/frameworks/base/services/input目录下,InputManager、InputReader、InputDispatcher、EventHub是几个主要类。InputM
2015-07-23 21:02:26
2226
原创 按键事件在activity中的流程
android的事件有很多种,touch、key、mouse等。但是基本流程大概是一致的。本文将探寻activity中的事件流程,至于事件如何传递到activity,将另起篇幅介绍。activity的事件入口 public boolean dispatchKeyEvent(KeyEvent event) { onUserInteraction(); Window
2015-07-23 10:37:39
3781
原创 设计模式六大原则
开放封闭原则,所有面向对象设计原则的核心。其核心思想是:类、模块和函数应该对扩展开放,对修改关闭。对扩展开放,意味着有新的需求或变化时,应该对现有的类、模块等做扩展,以适应新的情况。对修改关闭,意味着一旦类、模块等设计完成,就可以独立完成其工作,而不应尝试对其做任何修改。实现开闭原则的基础:面向抽象编程,而不针对具体实现。抽象相对固定,而具体实现则和实际相关。让类依赖相对固定的抽象,对外部调用
2015-07-22 10:14:10
459
自己整理的UPnP资料
2011-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人