- 博客(70)
- 资源 (7)
- 收藏
- 关注
原创 3、ollvm移植
clang -mllvm -bcf -mllvm -bcf_prob=40 hello_ollvm_bcf.c -o hello_ollvm_bcf 混淆百分比。clang -mllvm -fla -emit-llvm -S hello_ollvm_bcf.c -o hello_ollvm_fla.ll 生成ll文件。clang -mllvm -sub -mllvm -sub_loop=3 hello_ollvm.c -o hello_ollvm_sub2,替换3次。
2023-12-13 15:51:44
172
原创 dfs 深度优先搜索思路
leetcode经典题17. 电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。publicList<String>letterCombinations(Stringdigits)用一个Hashmap存放2-9里面包含的字符串 private StringBuilder builder = new StringBuilder(); List<Str...
2020-12-16 13:22:05
194
原创 SmartRefreshlayout 源码解析
万能的下拉刷新控件,很好奇怎么实现的,学习一下思路1、继承了接口NestedScrollingParent,这是嵌套滚动的,为了让子和父布局在滑动的时候无缝嵌套。也是一个自定义的viewGroup,既然是这玩意,先看下onMeasure方法怎么获得测量的宽高:需要计算刷新的头、尾和内容布局,头尾已经有一些定制的效果,这里根据外部的条件,去计算整体的宽高。//取到所有的子view,拿到刷新的头布局 if (mRefreshHeader != null && mRefres.
2020-12-09 14:12:51
1066
原创 android apk编译打包流程
1、Android 源码里面的aapt工具位于***/frameworks/tools/aapt/目录下面主要用来打包java文件,资源文件,jar三方包,AndroidManifest.xml,aidl文件java文件和jar包会转成.class文件资源文件会生成R.java文件和.arsc资源文件,分配资源id,正常我们在hdpi这种里面放的图片都是0x77 开头的,在遇到插件化资源id冲突的时候,可以修改插件包里的R.java文件,这里就需要反射修改aapt工具了aidl文件会打包成.
2020-11-27 11:34:47
228
原创 android 10 问题汇总
1、因为deviceid的限制,所有各大三方sdk需要更新,比如个推、微信支付、环信、友盟2、Using WebView from more than one process at once with the same data directory is not supported这个错误是webview多进程使用导致,在api28以上,需要对webview 目录进行控制@Requ...
2020-03-05 14:54:31
805
原创 newrelic 数据无痕埋点的实现思路
现在我们有一个需求,统计登录失败、某个activity的页面停留时间,我们怎么办?1、在登录失败的地方、activity的生命周期处加日志,保存到本地数据看,再找个合适的时机上报给服务器(如页面启动且有网),这个方案可变性,操作性,定制性很高但会让客户端多很多无用代码2、利用友盟、听云、oneapm等平台进行统计,但定制性不足,有时候无法满足需求那么我们怎么去自己实现一个无痕埋点的统计呢?...
2019-12-13 11:08:08
603
原创 android studio 升级到3.5遇到的bug,环信sdk混淆无法发图片
环境:android studio从3.4升级到3.5,gradle插件版本升级到最新的3.4.2,gradle版本为5.1.1以上别的还好,升级对应包就好,最大问题是混淆,自己写的混淆文件有的不被识别,折腾了下,改了混淆文件,自己的代码没问题,然后发现第三方环信的无法发送图片了,查了日志,果然是环信的bug,全是环信的包名,请求图片上传的时候报错了。无奈,去看gradle官方文档,找到了...
2019-12-13 10:51:13
555
原创 android Activity面试启动流程分析
面试的时候,想要说清楚ams的各个关系不容易,这边记录下:外部调用startActivity方法,启动一个Activity的时候,都会调用Instrumentation的execStartActivity方法,而这个方法在android7.0以下和以上的处理是不一样的,7.0以下的处理:通过ActivityManagerNative 的静态方法getDefault,取得ActivityMa...
2019-09-03 15:53:43
561
原创 java虚拟机
通常java虚拟机我们需要了解的是执行流程,类加载器,双亲委托机制,内存模型,以及Gc算法四大块内容。下面我们挨个讲解下:执行流程: java虚拟机分为编译和运行阶段,编译阶段将.java文件转化为.class文件,运行阶段解析class文件类加载器: 1、BootStrap ClassLoader 用于加载jdk核心库,java.lang、java.util,应用层用不...
2019-07-26 15:27:21
114
原创 android 知识点整理
1、Handler原理handler类中有Looper、messageQueue、message,构造方法中会初始化这些变量调用Looper.perpare方法中利用静态threadlocal存放looper对象,Looper类中有messageQueue,messageQueue中存放message队列。调用Looper.looper方法执行while(true)循环,从messag...
2019-02-20 13:56:49
187
原创 android Aidl原理分析
android Aidl原理分析aidl的创建server端使用Client的使用aidl是为了解决进程间通信的,也是binder的最好体现,下面分析一下:先是aidl文件的创建interface testtt{ /** * Demonstrates some basic types that you can use as parameters * and ret
2017-12-12 14:02:02
430
原创 Rxjava+retrofit+okhttp源码分析
基于上一篇对okhttp的源码分析,我们结合rxjava和retrofit再次进行源码分析,没看过上一篇的请跳转链接: okhttp中的线程池及源码分析 通常我们使用这套组合拳的代码可以在 Rxjava2+retrofit2+rxAndroid+okHttp 这里看到,那么我们接下来分析代码: Rxjava 功能主要是一个发布订阅模式,与真正的请求无关,那么请求是在okhttp中做的,这
2017-08-02 16:20:32
1213
原创 okhttp中的线程池及源码分析
okhttp3使用很常见,通常我们使用的时候是这样的://创建okHttpClient对象OkHttpClient mOkHttpClient = new OkHttpClient();//创建一个Requestfinal Request request = new Request.Builder() .url(url)
2017-08-01 15:34:48
6736
原创 Rxjava2+retrofit2+rxAndroid+okHttp
Rxjava2+retrofit2+rxAndroid+okHttp 对于普通的http Get请求 先导入包 compile ‘io.reactivex.rxjava2:rxjava:2.0.8’ compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘com.squareup.retrofit2:retrofit:2.2.0’
2017-04-17 16:55:03
3294
原创 Android okhttp + rxJava + retorfit2使用心得
okhttp出来已经很久了,rxjava也是近两年火起来的框架,框架的使用能让我们写出更为优秀的代码,这里主要介绍square公司提供的框架,记录一下对Android新的http请求极具扩展性的写法。这里主要用到的是观察者模式,先说下概念,Observable是被观察者,Observer是观察者, 两者之间通过subcriber订阅者,由Observablesubcribe通知Observer实现
2017-04-10 15:22:42
3979
原创 仿百度阅读滑动条之完美版
上一篇大概的讲了下实现吸入吸出Mesh效果的简单例子,经过进一步研究,发现和百度阅读的仍有一定差距。下面是最新研究的效果: 发现关键点在于滑动的同时,不只是Mesh的点发生变化。轨迹线也在变,所以在改变drawBitmapMesh 中的点时,需要改变线的轨迹。增加一个改变线的函数:public void buildPaths(int timeIndex){ flo
2015-04-01 17:53:27
1420
原创 实现Viewpager切换界面导航栏水波纹动画效果
实现效果: 该控件防百度阅读的导向栏进行研究,具体细节尚有不足,希望大家多多指点点击打开链接 Viewpager的滑动,引起标题栏的渐变。主要渐变过程要先画线,再画点。 画线过程: 利用path和PathMeasure类,画出一条曲线,moveto方法画起始点,quadTo方法画中间控制点和终点,由于现在是水平移动,中间控制点的坐
2015-03-27 17:43:04
2399
1
原创 android px、sp、dp之间的互转
public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.
2014-08-19 11:31:02
4877
原创 framework之深入理解Vold和Rild
Vold:用于管理和控制Android平台外部存储设备的后台进程,包括SD卡的插拔检测,挂载、卸载、格式化等等。Rild:用于智能手机的通信管理和控制的后台进程,所有和手机通信相关的功能,如接打电话、收发短信、GPRS等。Vold和Rild均为Native层,而MountService为java层。Vold流程:Vold的NetlinkManager接收来自Linux kernel
2014-03-20 15:21:39
2233
原创 framework之深入surface系统
一个Activity的显示:创建Activitya:performLaunchActivity:根据类名通过java反射机制创建一个Activity。调用Instrumentation的newActivity,调用attach函数:PolicyManager的makeNewWindow,创建window对象,返回的mWindow是一个PhoneWindow对象。windowMa
2014-03-19 15:26:06
2421
原创 framework之Audio系统
Audio 系统 AudioTrack audio_track_cblk_t AudioFlinger AudioPolicyService AudioPolicyManagerBase DuplicatingThread
2014-03-18 11:02:18
3175
原创 framework 之Bindle深入
以mediaServer为例来分析Bindle流程: ProcessState,每个进程只有一个processstate对象,该对象的self函数采用单例模式。构造函数中open_driver打开了/dev/binder设备,他是android在内核中完成进程间通信专门设置的一个虚拟设备,该驱动设备会分配一块内存来接收数据,一个进程只能打开一次Bindle设备。
2014-03-14 14:42:59
1002
原创 framework之深入理解常见类
RefBase、sp和wp: RefBase中包含一个影子对象,该对象内部有强弱引用计数 sp化后,强弱引用计数各加1,sp析构后,强弱引用计数各减1 wp化后,弱引用计数加1,sp析构后,弱引用计数减1 wp的promote方法,会使强弱引用计数均增加1(由弱生强) extendObjectLifet
2014-03-12 16:40:23
1085
原创 android4.3 framework之zygote深入
zygote本身是一个Native应用程序,在Android.mk中指定的名字是app_process,源码位置: framework/base/cmds/app_process/App_main.cpp 该代码重要功能是由AppRuntime的start完成的,而这个函数使用的是基类AndroidRuntime的start,分析AndroidRunti
2014-03-11 15:40:01
1190
原创 android 4.3 framework之init深入
init.c(system/core/init/init.c) Linux系统中用户空间的第一个进程,main函数中主要解析了两个配置文件,init.rc和硬件相关的配置文件,解析调用的是init_parse_config_file,在Ueventd_Parser.c的 Parse_config进行解析,首先找到配置文件的section,不同的section使用不同的方式去解析,sect
2014-03-10 20:28:04
1192
原创 基于TCP和UDP的聊天功能的实现
这里类似于登陆功能的实现,是基于UDP实现的,而聊天的内容,是基于TCP实现的,大概流程是: 建立一个服务端: 下面是UDP开启服务器返回给客户端的确定值: public void ServerReceive(){if(serversocket == null){try {serversocket = new DatagramSocket(PORT);}
2013-10-28 15:15:59
2192
原创 TCP/IP 网络通信基础
通过TCP/IP让两台真机进行通信,选定一台真机做服务器,一台做客户端,客户端需要知道服务器端的ip,通过adb命令可以查看到连接到wifi的平板的ip, adb shell netcfg 如图,可以查看到ip为192.168.1.79 注意一点:android3.0版本以后的网络
2013-10-19 18:40:35
1318
原创 settingFragment设置属性的创建与响应
android3.0之后设置属性有专门的方式显示,基于PrefenceFragment,通过addPreferencesFromResource(R.xml.preferences);加载界面。如图: 我的布局大致如下: xmlns:android="http://schemas.android.com/apk/res/android">a
2013-10-15 16:37:47
3389
原创 平板开发之ActionMode
首先看看我们要做的效果: 点击选择项进入到ActionMode界面,如下: android系统提供的菜单不能满足要求,我们需要自定义菜单,这里只需要建立普通的菜单就可以了,无需上下文菜单,即: 复写@Overridepublic boolean onCreateOpti
2013-10-09 19:50:08
3277
原创 onInterceptTouchEvent解决GridView和ImageButton焦点共存的问题
屏蔽GridView中的ImageButton
2013-09-29 15:57:44
2014
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人