![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【Android常用开发】
没有鱼了
https://developer.android.google.cn/
https://www.androiddevtools.cn/
展开
-
OpenCV For Android 从零开始搭建开发环境 实现图像处理
最近一个项目有很多需求涉及到了图片处理相关的技术,比如图像边缘检测及区域裁剪,灰度及黑白增强效果,滤镜,人脸美化等,这些功能想纯靠SDK提供的api实现太难了,而且效率也不行,所以就想通过OpenCV来实现,鉴于之前没什么接入经验,所以想通过几篇博客记录其实现过程原创 2020-03-09 22:14:42 · 1584 阅读 · 0 评论 -
Android网络请求还在用Retrofit吗,来试试使用Apollo Graphql 吧
GraphQL 是 Facebook 于 2012 年在内部开发的数据查询语言,在 2015 年开源,旨在提供 RESTful 架构体系的替代方案。Graphql是一种用于 API 的查询语言,相比于REST API,查询多个数据就需要多个URL不同,它可以做到用一个请求能准确的获取你所需要的所有数据,不多不少。原创 2019-11-10 11:46:10 · 3053 阅读 · 27 评论 -
Android开发中遇到的问题及小知识总结
PhotoView+ViewPager 发生java.lang.IllegalArgumentException: pointerIndex out of range异常描述:当PhotoView 和 ViewPager 组合时 ,用双指进行放大时 是没有问题的,但是用双指进行缩小的时候,程序就会崩掉原因:多次触发触摸屏事件,导致对同一个事件处理的消息过多,当第一个消息已处理完事件并销毁事...原创 2018-08-14 22:15:53 · 3970 阅读 · 0 评论 -
Android的APK安装过程 JVM Dalvik和ART等虚拟机区别以及DEX文件ODEX文件OAT文件区别
APKapk全称是AndroidPackage,也就是Android安装包;APK的本质是一个zip压缩包,如果将后缀名改成.zip,就可以解压,APK 文件与 Zip 文件最大的一个不同是 APK 包含签名信息,用于保证安装包安全不被修改,解压后的目录有:res文件夹:用于存放Android资源文件的目录,里面有drawable图片资源,布局文件等,这里面的文件都是被编译过的(图片除外...原创 2019-03-22 10:35:57 · 4516 阅读 · 1 评论 -
Andriod开发--如何实现组件化开发以及解决ButterKnife报错,了解一下
在上一篇文章Android开发之移动端项目架构演化之路 从模块化,组件化再到插件化中我们讲到了移动端项目架构中的组件化开发,这也是目前很火热的一种架构选择,但是也不用盲目跟风,毕竟实现组件化开发是需要额外增加一些开发成本的,如果你的开发团队就一个人或者1-3个人这种小团队,这说明这个项目规模并不大,使用单项目架构或者模块化开发也就足够了,采用组件化就没有什么性价比了但是如果项目...原创 2019-03-17 22:55:04 · 2287 阅读 · 2 评论 -
Android适配-自己封装几行代码解决Android6.0的权限申请
权限适配前言开工哪些权限需要申请普通权限通用的危险权限组:申请步骤封装库前言Android6.0推出来的运行时权限申请想必大家都了解了,但是有些刚入行的兄弟们时而问起我,说明对这块知识点的适配工作还是有点不太熟,比如到底哪些权限需要申请?是否我配置的权限要一个一个申请呢?而且申请代码不难但是如果每次申请都这么写就有点繁杂了,能不能有点简单快捷的写法?假如用户拒绝了怎么提醒用户并引导用户去主动开...原创 2018-11-30 20:23:51 · 747 阅读 · 0 评论 -
结合Bitmap三级缓存自己做个ImageLoader 解决UI卡顿问题
在Android开发中图片下载和内存的使用是永远绕不开的话题,页面的加载离不开图片的使用,图片的使用必会占用一定的内存,但是手机内存总是有限的,只要你一点使用不当,就会给APP造成非常差的使用体验;所以怎么合适的对图片和内存进行一个合理的搭配就是一个重点了,图片缓存的实现能很好的解决这一个矛盾,现在图片相关的开源框架很多,比如Glide,Fresco,Picas...原创 2018-11-17 18:25:26 · 2178 阅读 · 0 评论 -
Android开发-通过ExecutorService构建一个APP使用的全局线程池
在Android开发中线程的使用肯定是少不了的,因为在主线程是不能做耗时操作的;但是使用线程也不能随意的直接通过new Thrad方式去使用,因为像列表这种页面,有很多的图片需要加载,只能异步执行,如果直接new,那对手机内存的压力可想而知;好在Android给我们提供了线程池这样一个东西用来管理线程的操作;话说Android给我们提供了AsyncTask这样一个类,它内部维护了一个线程池,但是很蛋疼的是这个线程池是串行执行的,做不到并发操作,既然这样我们只有自己来封装下了原创 2018-11-21 18:50:43 · 4402 阅读 · 0 评论 -
Android开发-自己动手写Bitmap高效加载 跟OOM说再见
从前面两篇文章写下来,不得不继续的一个问题就是如何高效加载Bitmap,如何不让我们的应用因为Bitmap,或者说因为加载大图片而产生OOM,怎么才能让我们放心大胆的在APP中使用Bitmap,不需要整天提心吊胆的担心出Bug;这篇文章就来解决这个问题原创 2018-11-20 19:42:08 · 615 阅读 · 0 评论 -
AndroidStudio目录结构 APP构建流程 Jenkins持续集成构建 Gradle介绍 Proguard混淆
Android Studio目录结构通常我们是将工程设置成project模式,这个模式下我们的工程有很多目录:.gradle:包含一些Gradle编译脚本,gradle是Google推荐的编译工具.idea:包含AndroidStudio开发工具需要的文件,里面有一些版权声明,库文件,配置文件等.app:如果我们不修改moudle,那默认就算app,这是我们的项目文件,包含我们编写的...原创 2018-08-12 23:02:04 · 1465 阅读 · 0 评论 -
Android使用代理+接口实现插件化 仿支付宝微信加载未安装的第三方应用apk
有插件一般都会伴随着宿主的存在,宿主APK实现了一套插件的加载和管理的框架,它作为应用的主工程存在,插件APK是依附于宿主APK存在的插件也称为Plug-in,或者add-in,俗称外挂,是宿主应用的功能扩展,对宿主来说可有可无,但是一定程度上能提高宿主应用的高可用性;插件化就是在Android开发领域,在不改变宿主应用的情况下,通过插件动态扩展应用功能,在运行时将功能植入到应用系统中原创 2019-05-04 19:05:36 · 1992 阅读 · 2 评论 -
Android wifi列表扫描 密码连接 多个wifi切换登录 广播状态等都在这里
app里有个需求就是在应用内部开发一个wifi设置的功能,避免用户跳到手机wifi设置界面操作,之前没开发过这样的需求,只是简单的判断网络状态,不过心想应该不难,都是挺成熟的东西,其实做了后才知道还是有些坑的,今天来讲讲如何实现这个需求原创 2019-10-09 08:37:54 · 3417 阅读 · 22 评论 -
Android代码安装卸载apk 处理6.0权限/7.0Uri/8.0安装未知来源应用适配问题
在自己的APP里面通过代码手动安装第三方APP或者进行版本更新的时候,会碰到多个版本之间的差异带来的一些适配问题,比如6.0版本开始的运行时权限,7.0开始的文件共享机制,8.0修改后的安装未知来源应用权限等问题,今天通过这篇文章记录下适配过程原创 2019-09-26 22:16:59 · 2056 阅读 · 0 评论 -
使用反射+注解封装一个基于Sqlite极简的android数据库框架
目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多费功夫重复造轮子呢?原因无他,就为了装个B,哈哈,开个玩笑;每个框架经过了这么多版本的迭代,可以说设计的已经很周到了,考虑到了开发者能考虑到的问题,但是这也带来了一个问题,就是每个开发者使用这些框架的需求是不同的,有的需要这些功能,有的需要那些功能,这样你就没有必要把整个框架都导入到你的项目中来原创 2019-08-18 15:12:48 · 2124 阅读 · 0 评论 -
仿写ButterKnife框架核心功能 掌握编译时注解+注解处理器APT生成Java代码的技术
要定义编译时注解只需在定义注解时使用@Retention(RetentionPolicy.CLASS)修饰即可,编译时注解结合注解处理器(APT)在编译期完成操作,对性能影响很小;像@Nullable@NonNull这类的注解就是编译时注解;一些开源框架如BufferKnife, ARout、Dagger、Retrofit等都有使用编译时注解原创 2019-07-26 08:57:05 · 1172 阅读 · 0 评论 -
使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架
由于应用中存在多个进程,比如一个主进程,一个消息推送进程及一个应用守护进程,这使得进程间通信的开发提上日程,而为了提高开发效率,需要提炼出一套跨进程通信的基础框架,以本篇博客记录其编写过程原创 2019-06-24 07:51:41 · 5547 阅读 · 6 评论 -
解密Android7.0 8.0进程保活与拉活的实现方式 如何才能让APP常驻内存 躲避系统的追杀
近期被一些朋友问到关于进程保活这块的知识点,想必是很多开发者研究的重点,虽然我不支持做成这类【流氓软件】,因为大家都这么干的话,Android系统的内存永远不够用,电量消耗的贼快,流畅度肯定就大大的降低了;但是程序猿可能也架不住产品的需求,哪一个产品经理不希望自己的APP在用户的手机上随叫随到;其实说实话一个APP很难做到真正的不死,除非你的应用被手机厂商拉到了白名单中;在Android L之前还可以通过Native层做到应用不死,不过这个漏洞被Google给修复了;那么作为一个不在白名单中的应用怎么才能原创 2019-06-20 12:09:47 · 5576 阅读 · 1 评论 -
Android通过仿写EventBus组件通信框架 掌握运行时注解+反射及事件总线通信核心原理
EventBus框架想必做过Android开发的或多或少接触过,使用过;它是一款Android/Java的发布-订阅事件总线框架,简化了Android组件间消息通信的过程,将我们从复杂的组件内通信解脱出来,其Github地址[EventBus](https://github.com/greenrobot/EventBus);既然它这么好用,那不对它进行一番解析,或者说仿写一款同样的框架,实在说不过去;然后在加深对它的理解的同时,站在作者的角度去解决问题,也能提高我们平时的开发质量;本篇文章重点不是对它进行源原创 2019-05-18 17:06:07 · 3630 阅读 · 0 评论 -
Android开发-带你玩转Android中的反射机制,再也不怕private修饰了
在前面写一些Android源码分析的文章中,比如fork进程,SystemServer启动服务,ActivityThread加载等都会涉及到反射的大量运用,让我觉得很有必要针对反射机制写一篇博客进行总结原创 2018-11-12 18:00:27 · 1234 阅读 · 0 评论 -
Android开发-教你玩转Android数据存储SQLite 如何加载SD卡数据库
数据库前言数据库存储数据库创建内置存储数据库外置存储数据库编写DAO插入操作更新操作删除操作查询操作Cursor API查询方法查询样例事务(Transaction)SQL注入案列防止SQL注入前言众所周知,数据存储在每个应用中都会用到,那所用到的技术应该怎么选呢,这里Android给开发者提供了几种方法去保存常用应用数据,至于你想选择哪一种方式,取决于你的特定需求;例如这个数据是本应用私有的...原创 2018-11-06 18:17:25 · 1365 阅读 · 1 评论 -
Android开发-WebView使用注意点 JS注入漏洞问题 内存优化【五】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview;或者一些非电商APP中的像广告页面,注册协议页面都会用到;最后因为一些事情拖到现在才做,感觉事情真不能拖,越往后推越做不了,罪过罪过。怎么总结Webview呢1.简单介绍2.WebView/WebViewClient/WebCh...原创 2018-06-15 14:31:36 · 3325 阅读 · 0 评论 -
Android开发-ViewPager嵌套Fragment卡顿解决Viewpager滑动重复加载Fragment延迟加载
Fragment大家肯定不会陌生的,几乎每个App里都有它的存在,作为Google在3.0以后引入的一个概念,极大的解决了Activity(或者说手机屏幕)的局限性,让Activity碎片化,正如它的原意 【分段】,【碎片】一样让一个屏幕中的activity展示多个页面成为了现实原创 2018-06-20 10:28:07 · 13237 阅读 · 7 评论 -
Android广播--BroadcastReceiver 本地广播LocalBroadcastManager 8.0删除静态广播行为
在Android中,Broadcast是一种广泛应用在应用程序之间传输信息的机制,Android中我们要发送的内容是一个Intent,而我们要发送的数据由Intent包装。而BroadcastReceiver是一个专注于接收广播发出的信息,并作出对应处理的组件。BroadcastReceiver没有用户界面,但是它可以启动Activity来相应接收到的消息,或者使用NotificationManager发出通知来提醒用户原创 2018-07-24 19:28:17 · 1142 阅读 · 0 评论 -
Android开发--掌握Activity隐式显示启动方法 scheme跳转协议 生命周期及启动模式配置
定义Activity:是Android与用户进行交互的接口,它提供了一个界面供用户点击,滑动等操作,这就是Activity的意义Activity生命周期:1.activity的4种状态running:表明activity正活跃,用户可以点击屏幕,应用做出相应;它是一个处于Activity栈顶的一个状态paused:表明Activity失去焦点的时候,或者被一个非全屏的act...原创 2018-07-18 14:28:27 · 3460 阅读 · 0 评论 -
Android中Fragment知识点终极整理 避免多个Fragment加载重叠踩坑
Fragment定义Fragment中文意思是碎片,是一种可以嵌入在Activity当中的UI片段,能让应用充分合理利用屏幕空间;它和Activity非常像,能添加自己的布局,有自己的生命周期,甚至可以理解成一个迷你型的Activity,虽然有时候这个Fragment可能会跟普通Activity一样大。Fragment为什么被称为第五大组件在使用频率上,Fragment是不低于其它四...原创 2018-07-23 19:22:51 · 4610 阅读 · 0 评论 -
Android四大组件之ContentProvider 全面解析,ContentResolver源码解析如何调用其它APP的ContentProvider
今天来总结下Android中的ContentProvider(以下简称CP),具体代码请见https://github.com/Mangosir/ContentProviderReview/tree/master概述其实相对于Acivity,Service,BroadcastReciver这三个组件,CP的使用率还是相对比较少的,除非你开发的app是要采用手机本地资源或跟其它a...原创 2017-11-22 17:34:01 · 1454 阅读 · 0 评论 -
Android开发-WebView中实现Android调用JS JS调用Android 【三】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview;或者一些非电商APP中的像广告页面,注册协议页面都会用到;最后因为一些事情拖到现在才做,感觉事情真不能拖,越往后推越做不了,罪过罪过。怎么总结Webview呢1.简单介绍2.WebView/WebViewClient/WebCh...原创 2018-06-11 23:04:09 · 1637 阅读 · 0 评论 -
Android开发-WebView的缓存处理和性能优化 实现H5页面秒开【四】
前言老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview;或者一些非电商APP中的像广告页面,注册协议页面都会用到;最后因为一些事情拖到现在才做,感觉事情真不能拖,越往后推越做不了,罪过罪过。怎么总结Webview呢1.简单介绍2.WebView/WebViewClient/W...原创 2018-06-12 20:21:59 · 7066 阅读 · 0 评论 -
Android开发-WebView/WebViewClient/WebChromeClient 使用样例 【二】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview;或者一些非电商APP中的像广告页面,注册协议页面都会用到;最后因为一些事情拖到现在才做,感觉事情真不能拖,越往后推越做不了,罪过罪过。怎么总结Webview呢1.简单介绍2.WebView/WebViewClient/WebCh...原创 2018-06-11 18:15:58 · 1557 阅读 · 0 评论 -
Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装
文件存储前言文件存储内存内部存储外部存储内部存储操作API读写操作外部存储操作公共目录私有目录私有文件私有缓存前言众所周知,数据存储在每个应用中都会用到,那所用到的技术应该怎么选呢,这里Android给开发者提供了几种方法去保存常用应用数据,至于你想选择哪一种方式,取决于你的特定需求;例如这个数据是本应用私有的还是跟其它应用共享以及数据存储所需的内存空间等Shared Preference...原创 2018-11-01 20:04:00 · 3081 阅读 · 0 评论 -
Android开发-通过通俗易懂的Demo让你理解Android中MVC架构和MVP架构
相信从事软件开发的伙计们肯定熟悉或者听说过项目架构,比如要新开发一个APP或者Web项目,首先考虑的就是项目需要设计什么样的架构,MVC还是MVP呢?MVC和MVP具体是怎么体现的,有哪些优点,哪些缺点呢?原创 2018-10-27 12:35:29 · 2055 阅读 · 2 评论 -
Android开发-序列化和反序列化的实现 Serializable Parcelable
定义在Java中的对象序列化指的是将一个Java对象所描述的内容转换为可以存储和传输的形式的过程,通常是将对象转换为字节序列;反序列化就是相反的过程,将字节序列恢复成对象序列化用途将对象的字节序列持久化到硬盘中,通常是存放在文件里进程间通信的时候不能直接传输对象,需将对象以字节序列的形式传输注意类里的静态成员变量不属于对象,不会参加序列化被transient关键字...原创 2018-08-25 17:13:57 · 819 阅读 · 0 评论 -
Android开发-使用MD5 AES RSA BASE64 加密解密 比如登录通信Token加密
在平时的Android开发中使用到加密的地方很多,比如:1.登陆请求的加密一般我们客户端登陆会带上服务器生成的Sessionid,如果服务器的Redis中存在这个Sessionid,就判断是合法的客户端;但是如果这个Sessionid被第三方截获,模拟请求,就会产生很大的风险。如果这时候引入Token,客户端对Token加一些其它参数组合,然后使用MD5进行加密生成签名,然后将Sessio...原创 2018-05-30 21:46:10 · 2167 阅读 · 0 评论 -
Android四大组件之Service 远程服务解析,通过AIDL达到进程间通信交换基础数据
继上一篇介绍Service的文章后,这篇来具体分析下远程服务,具体代码请看https://github.com/Mangosir/RemoteServiceMath简介远程服务:Android 系统与Windows系统的通信原则基本一致,进程就是安全策略的边界,不同的APP属于不同进程 Process,一个进程不能直接访问其他进程的资源。需要实现多进程间的通信,就要使用IPC(Inter ...原创 2017-11-08 18:25:36 · 1740 阅读 · 0 评论 -
Android四大组件之Service 远程服务 通过AIDL进行进程间复杂类型数据交换
继上一篇介绍如何通过AIDL在进程间传递基础类型数据(Android 远程服务解析,通过AIDL达到进程间通信交换数据),本篇继续介绍如何传递复杂类型数据,具体代码请看(https://github.com/Mangosir/RemoteServiceMath)我们先新建一个对象Result,实现Parceable接口,因为不同的进程之间不能直接传输对象数据,只能传基础类型等数据,在上一篇...原创 2017-11-09 17:20:20 · 762 阅读 · 0 评论 -
Android开发使用ServerSocket ServerSocketChannel DatagramSocket进行TCP UDP通信 实现服务器与APP消息推送
前言在日常开发中采用Http协议进行数据传输的情况非常多,但这都是APP主动请求服务端,将数据传到服务器或者从服务器下载数据;那么如果我们想服务器主动联系我们或者我们频繁的上报消息给服务器,怎么弄呢,显然这时候用Http就不是一个好的方案了,而直接使用Socket是一个好的方法。网络协议平时碰到的网络协议很多,很容易跟socket搞混,怎么区分呢?看下方:1. IP :是网络层协议...原创 2018-05-22 14:57:49 · 3492 阅读 · 2 评论 -
Android开发-使用FTP协议和HTTP协议进行文件下载和上传
FTP 是File Transfer Protocol(文件传输协议)的英文简称,从这个名字也能看出来,这个协议是为了文件传输而生的。使用前需要下载一个commons-net-3.3.jar直接看上传代码/** * 向FTP服务器上传文件 * * @param url * FTP服务器hostname 就是ip...原创 2018-05-25 14:56:57 · 4732 阅读 · 5 评论 -
Android开发-WebView/WebViewClient/WebChromeClient简介 API详述 【一】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview;或者一些非电商APP中的像广告页面,注册协议页面都会用到;最后因为一些事情拖到现在才做,感觉事情真不能拖,越往后推越做不了,罪过罪过。怎么总结Webview呢1.简单介绍2.WebView/WebViewClient/WebCh...原创 2018-06-10 22:26:34 · 1858 阅读 · 0 评论 -
Android Service生命周期,本地服务远程服务,前台服务后台服务,启动方式,与IntentService区别全面解析
脑子里记了太多,最近感觉不太够用了,还是决定来CSDN给存起来,方便自己以后翻阅也便利别人,一点知识总结,如有错误各位过客可在评论区指出。Service内容基本会在这章总结到,总结顺序如下:Service概述 Service生命周期概述 Service分类: *按启动方式分类:通过Context.startService()或Context.bindServic...原创 2017-11-05 20:33:11 · 3772 阅读 · 7 评论