android
文章平均质量分 68
高低调
这个作者很懒,什么都没留下…
展开
-
AES加密算法原理及java android实现
AES当今最流行的对称加密算法之一,是DES的替代者。密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。AES支持三种长度的密钥:128位,192位,256位平时大家所说的AES128,AES192,AES256,实际上就是指的AES算法对不同长度密钥的使用。他们本质的区别是加密处理轮数不同。AES加密原理:分组加密...转载 2019-05-30 14:15:31 · 1490 阅读 · 0 评论 -
属性动画,属性动画组合队列详解 ValueAnimator ObjectAnimator AnimatorSet
属性动画跟早些的补间动画最大的差别应该是补间动画只是个绘画的展示效果,duang duang duang都是特技,是假的,属性动画是view本身的属性真的跟着动画改变的,是真的。ValueAnimator 使用姿势:ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,1.0f); valueAnim原创 2017-07-04 18:18:14 · 968 阅读 · 0 评论 -
超简单好用的可拖动控件
public class DraggableView extends View { public DraggableView(Context context) { super(context); } public DraggableView(Context context, @Nullable AttributeSet attrs) {原创 2017-05-22 11:03:14 · 414 阅读 · 0 评论 -
android 坐标系统
首先明确一下 android中的坐标系统 :屏幕的左上角是坐标系统原点(0,0),原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向。 一、View的坐标 需要注意view的坐标是相对父容器而言的,包括:getTop()、getBottom(),getLeft(),getRight()。以getTop为例,函数源代码为: /*** Top position of this转载 2017-05-22 10:44:55 · 349 阅读 · 0 评论 -
安卓播放视频MediaPlayer
示例代码中包括了两个实现视频播放的方法,13-15行是用了一个开源框架,非常流弊,开源库地址:https://github.com/lipangit/JieCaoVideoPlayer开源库中也是用的MediaPlayer实现播放的,不过他整合了暂停继续,音量调节,进度调节,全屏等等很多强大的功能,这些功能自己开发起来会非常花费时间。另一个就是用MediaPlayer实现的,只实现了个基本原创 2017-04-13 14:49:26 · 1682 阅读 · 0 评论 -
正确使用inflate,inflate原理解析,LayoutInflater
要看结论直接拉到底部在用代码inflate一个XML布局文件添加到父容器时,偶尔会碰到这个inflate出来的view,会无法正确显示我们在xml中所定义的样子,比如可能会无法正确显示最外层定义的参数,width,height,padding,margin等等。今天研究了下inflate的源码,总算明白了正确使用的姿势。inflate一个xml布局文件有多种方式:比如可以调用Vie原创 2017-03-14 16:19:46 · 1112 阅读 · 0 评论 -
Android Apk打包原理
概述Apk其实是一个压缩包,当解压后,其内部主要就是资源文件和classes.dex。 这个classes.dex文件就是Android系统虚拟机的可执行文件Android工程打包成Apk一般有2种方式一种是通过集成开发工具(eg: Android Studio)直接生成Apk。 一种是使用工具在命令行方式下打包Apk。 但是不管哪种方式,其本质转载 2017-01-17 11:02:02 · 3328 阅读 · 0 评论 -
Android 安全使用HTTPS
原文转载地址:https://zhuanlan.zhihu.com/p/24093848作者:阿里聚安全链接:https://zhuanlan.zhihu.com/p/24093848来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。此前我们通过《全球HTTPS时代已来,你跟上了吗?》了解到为什么 HTTPS 将逐渐取代HTTP,成为转载 2016-12-12 15:26:33 · 1223 阅读 · 0 评论 -
史上最快安卓渠道包打包方式
开源项目git地址:https://github.com/mcxiaoke/packer-ng-plugin开源项目上介绍的gradle配置方式没有调通,本文直接采用编译java文件命令行运行的方式实现。开始超简单的教程:一共就一个类,如下:import java.io.BufferedReader;import java.io.DataInput;import原创 2016-10-25 11:33:33 · 1881 阅读 · 0 评论 -
延迟队列DelayQueue
项目中需要统计卸载app,但是安卓系统在用户更新app时,发送的广播是先Intent.ACTION_PACKAGE_REMOVED然后再Intent.ACTION_PACKAGE_ADDED,虽然有参数指定了这个广播是否是更新,然饿还是有不少用户反应他们是重新装了一遍应用,没有卸载却有卸载记录。boolean replacing = false; if(extras!=null){原创 2017-06-28 10:47:23 · 1734 阅读 · 5 评论 -
android API HOOK
API层面的hook是android hook技术中比较入门的一种,根据hook点选择的不同,能实现很多强大的功能,比如hook掉框架层的某些系统类达到不可思议的效果。hook主要技术点:1.寻找合适的hook点。这一点其实是最难的,我们要根据需求,分析系统源码寻找到合适的hook点。一般hook点都是找单例,静态变量,这样hook起来简单,方便一些。2.代理。代理的作用是原创 2017-08-30 18:03:36 · 2360 阅读 · 0 评论 -
BufferedInputStream BufferedOutputStream原理解析,正确使用Buffer
谈到java BIO中的性能优化,大部分人都会说使用BufferedInputStream BufferedOutputStream,理由是IO是跟硬件交互,是耗时操作,使用BufferedInputStream减少IO交互次数能大量提升IO性能。查看BufferedInputStream 源码,BufferedInputStream 有一个缓存数组protected volatile ...原创 2018-10-25 18:17:47 · 2212 阅读 · 1 评论 -
Base64加密原理
Base64加密方式是将三个八位的字节转化为四个六位的字节(不足八位的高位补00),3*8 = 4*6;,所以base64加密过后的内容比原来的大三分之一;举例:加密“ace”,ace转化为二进制为:01100001 01100011 01100101转化为base64的四字节六位:011000 010110 001101 100101那因为计算机是一字节八位的...原创 2018-09-11 17:21:45 · 15023 阅读 · 2 评论 -
jadx反编译
刚发现的一个反编译神器jadx,对比之前的apktool跟dex2jar,jadx胜在可读性好太多,apktool后的smali长的跟汇编语言一样,dex2jar产生的源码也经常出现奇奇怪怪的语法,让我理解不能.jadx GitHub 地址:https://github.com/skylot/jadx下载或克隆后,在目录下运行./gradlew dist结束后会生成build文件夹原创 2018-01-17 14:53:11 · 3375 阅读 · 0 评论 -
Android 项目组件化
随着App越来越大,越来越复杂,我们会面临一些问题:团队多人开发协作不顺畅;项目越来越大,编译运行越来越慢甚至超过十分钟;渠道特殊要求版本维护花费大量时间精力;组件化能解决以上所有问题.组件化:对App做拆分,按照业务拆分成多个子模块,之间完全解耦,通过打包编译流程控制App功能;(组件化还有个孪生兄弟,插件化,两者的区别有一个很形象的图)两者的核心都是各个模...原创 2017-11-17 15:37:42 · 510 阅读 · 0 评论 -
android 匹配so文件规则
在对接多个有so文件的第三方sdk时碰到一个问题,在某些手机上运行正常,在某些手机上就会崩溃报错,报错Log显示:无法找到某某**.so文件。原创 2017-10-23 09:39:54 · 761 阅读 · 0 评论 -
apk反编译---smali语法
APK反编译之一:基础知识原文作者:lpohvbe | http://blog.csdn.net/lpohvbe/article/details/7981386APK、Dalvik字节码和smali文件APK文件 大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR转载 2017-09-20 14:11:28 · 678 阅读 · 0 评论 -
apktool反编译,重打包
apktool 安卓逆向工程的工具,能解码apk文件到源文件,也能在做出修改后重新打包。官方下载地址 https://ibotpeaches.github.io/Apktool/install/原创 2017-09-19 13:56:42 · 1112 阅读 · 0 评论 -
viewpager图片查看 缩放 拖拽(高仿微信图片浏览效果)
源码已上传git: https://github.com/zjfangyufeng/ImageDetailDemo发现市面上安卓的大图浏览还数微信做得体验最好。淘宝,新浪,网易新闻这些巨头的app大图浏览效果还是不够好......比如淘宝的,放大后,拖到边界就不动了,需要抬起手,再按下才能切换到下一页。还有比如他们的通病:viewpager切换到下一页都会闪一下。这个的原因,是在事件消原创 2016-08-22 14:52:13 · 2666 阅读 · 2 评论 -
双卡双待 getDeviceId unique device ID IMEI 不唯一 会变问题
最近接到用户反馈无法登录的情况越来越多,因为我们的app设计上是不能换手机用,也就是绑定了唯一的设备ID。从反馈上来看,有一个线索是大部分是双卡双待的用户出现这个问题,并且切换过SIM卡。看来getDeviceId这个方法在双卡双待手机上获取IMEI还是有问题的。getDeviceId方式的注释:Returns the unique device ID, for example, the ...原创 2016-08-17 15:21:30 · 11481 阅读 · 7 评论 -
序列化Serializable serialVersionUID的作用
序列化Serializable的方式特别简单 实现Serializable接口,再在类中声明如下这一个属性即可。private static final long serialVersionUID = -3928832861296252415L;但是其实哪怕不声明serialVersionUID 也可以实现序列化,那么问题来了,到底要不要指定呢?serialVersionUID 到底是干嘛原创 2016-06-14 16:08:51 · 4441 阅读 · 0 评论 -
activity service 通讯
分两种情况,同进程与不同进程情况下。同进程情况下:继承Binder类,在onBind方法中返回MyBinder binder = new MyBinder();public class MyBinder extends Binder { public LocalService getIntance(){ return LocalService.this;原创 2015-09-08 19:28:44 · 422 阅读 · 0 评论 -
Android 触摸事件分发传递机制
activity.dispatchTouchEvent --- ViewGroup.dispatchTouchEvent ---- View.dispatchTouchEvent --- View.ontouchEvent ---- ViewGroup.onTouchEvent ----- activity.onTouchEvent=======================原创 2015-09-01 17:12:33 · 394 阅读 · 0 评论 -
android bsdiff 增量升级更新 热补丁 hotpatch(一)
此文参考何明桂的文章:http://blog.csdn.net/hmg25/article/details/8100896,不过原文中有些步骤太过简略,一句带过,相信很多同学是没那么容易走完全程的,花了一下午研究了下,特此记录,同时希望能帮到需要帮助的同学。增量升级的原理 首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有5M,新原创 2015-07-31 17:54:14 · 3820 阅读 · 2 评论 -
listview列表项重用机制与初始化流程分析
现在网上优化listview的内容一大把,重用convertView,viewholder,但是分析listview的却很少,很多人都不清楚为什么这么做能优化listview或者不清楚listview的重用机制,实现机制。今天特地研究了下源码,开个帖子,记录下。一:listview依次继承AbsListView,AdapterView,ViewGroup,View首先,view第一原创 2015-07-17 15:42:24 · 526 阅读 · 0 评论 -
java 1.5 并发流程控制CountDownLatch,CyclicBarrier,Semaphore
一:CountDownLatchCountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。用法1:有一个任务A要等其他几个任务执行完后执行,任务A中调用await()方法(任务A线程就阻塞等待了),其他几个任务线程执行完调用countDown()方法,当countdown为0时,任务A线程就唤醒继续执行了。用法2:也可以反过来,比如原创 2015-07-24 15:16:23 · 395 阅读 · 0 评论 -
java 同步 Synchonized 锁 ReentrantLock 原理 源码
synchronized:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。我们知道java中Synchonized 分三种情况,1.放在方法中。2.放在静态方法中。3.同步代码块。先来知道下三者的区别:对于同步方法,锁是当前实例对象。(如果此对象同步方法执行中,那所有此对象的其他同步方法都阻塞)对于静态同步转载 2015-07-22 17:37:09 · 1640 阅读 · 0 评论 -
adb shell am 命令启动不知类名情况下的 main activity
adb shell am 命令在已知类名情况下启动非常简单,那么当我们碰到不知类名的情况下该怎么办呢?首先,不知道类名我们就找出类名来。adb shell pm list packages -f 命令能获取到所有apk包所在目录,当然,此命令一回车,输出一大堆信息,肉眼一个个找我们所需要的apk包目录所在肯定不是程序员该干的事,那么想到find命令了,优化此命令后,adb shel原创 2015-05-28 17:07:07 · 2273 阅读 · 0 评论 -
Android studio下AIDL操作
试了下android studio下AIDL的操作,与eclipse有稍微不同。原创 2015-05-21 14:42:43 · 462 阅读 · 0 评论 -
Android性能调优工具TraceView
Android自带的性能调优工具TraceView可以方便的查看线程的执行情况,某个方法执行时间、调用次数、在总体中的占比等,从而定位性能点。1、生成日志,运行TraceView运行TraceView有两种方式a、调用Debug类在开始调试的地方,如Activity的onCreate函数,添加Java1Debug.startM转载 2015-08-06 16:09:31 · 426 阅读 · 0 评论 -
android studio 单元测试
最近研究了下android studio下的单元测试,网上看了许多帖子,但是大部分都比较复杂而且跑不通!最后一通鼓捣,其实android studio自带单元测试,很简单就能实现。android studio项目目录下都有个androidTest目录,一看这名字就是测试用得 0.0那问题就是怎么用,怎么让它跑起来。这样子就配置好了一个原创 2016-06-29 11:44:24 · 436 阅读 · 0 评论 -
多线程断点续传下载
此方法实现的下载,下载速度达到网速上限十几兆/S。先讲大体实现思路,再讲其中各种导致下载速度上不去的坑。 原理:下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度。 1. 请求下载链接地址,获取getContentLength,也就是文件总大小。 public boolean initDownLoadFileSize() { try { H...原创 2016-05-27 18:27:28 · 364 阅读 · 0 评论 -
磁盘缓存 DiskLruCache
JakeWharton在github上的DiskLruCache竟然没有demo,也没有详细说明,用法。很尴尬,找到了郭霖同学的一篇文章,特此转载记录。原文地址:http://blog.csdn.net/guolin_blog/article/details/28863651概述记得在很早之前,我有写过一篇文章Android高效加载大图、多图解决方案,有效避免程序O转载 2016-03-29 10:42:24 · 336 阅读 · 0 评论 -
Broadcast广播内部机制
原文地址 http://my.oschina.net/youranhongcha/blog/226274?fromerr=kZfhK8dQ广播机制异常复杂,跟裹脚布一样,下面这篇文章较为详细,特此转载记录1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制。从易用性的角度来说,使用广播是非常简单的。不过,这个不是本文关心的重点转载 2016-03-18 11:47:48 · 1622 阅读 · 0 评论 -
匿名内部类 类名规则 定位$1
今天发现友盟错误反馈一条信息如下:从信息中可以确定是TencentUtil类中某个匿名内部类出了问题,但是因为此类中匿名内部类过多,具体定位是哪一个倒是有点不确定了,所以抽时间研究了下匿名内部类相关知识。匿名内部类属于内部类的其中一种,从内部类讲起,内部类类型共有如下:1.成员内部类public class A { String s; class B{ }原创 2016-02-15 18:23:43 · 13578 阅读 · 4 评论 -
bitmap compress 图片压缩 图片文件大小处理
android中图片加载到内存中所占空间大小计算:分辨率 height*width*一个像素所占空间大小 解析:decode时指定解码方式为ARGB_8888 代表用8位表示透明度(A),8位表示红色(R),8位表示绿色(G),8位表示蓝色(B),也就是说每个像素占用4*8=32位空间(等于4byte),相对应 RGB_565,一共用16位(2byte)表示一个像素举个例子,上述属性图原创 2016-01-27 17:15:33 · 11399 阅读 · 1 评论 -
android LruCache 原理 以及 源代码解析
使用LRU(Least recently used,最近最少使用)算法缓存技术能大大提升程序性能。原理:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当缓存内容超过指定大小的时候,将链表尾部的数据丢弃。了解原理后,我们看下android中LruCache 的源代码实现。public LruCa原创 2015-12-08 16:47:08 · 456 阅读 · 0 评论 -
自定义Android progress bars
首先 各版本默认的进度条样式 现在我们开始自定义样式ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:l原创 2015-12-07 15:38:04 · 402 阅读 · 0 评论 -
adb shell am start 报SecurityException Permission Denial
使用 am start -n example.com.aidl/example.com.aidl.ItemDetailActivity命令启动activity时,偶尔(某些activity)会碰到报此错误:java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=example原创 2015-05-27 18:09:09 · 12091 阅读 · 2 评论