- 博客(57)
- 资源 (6)
- 收藏
- 关注
原创 Ubuntu系统安装配置笔记
最近装了台Ubuntu系统用于日常工作,过程中搜索了很多资料或找ChatGPT解答疑问,已有的资料都比较详细了,因此这篇笔记主要是列举大纲和参考网站,并记录中间踩坑耗时较多的问题。
2024-04-21 15:41:26
793
原创 Shell 脚本常用语法总结
计算机中 Shell 术语最早是在 1964 年 Multics 操作系统中定义的,作用是提供人机交互的操作界面,它会解释执行用户输入命令并输出结果。这篇文章主要介绍 Shell 脚本的语法,由于不同版本会有差异,本文采用的案例以覆盖最广泛的 Bash 为准,测试环境为 macOS 中的 Terminal。
2022-09-17 23:49:04
1262
原创 Git 常用命令总结
Git 是一个开源的分布式版本控制系统,其本质上是一个内容寻址的 Key-Value 数据库。它有四种类型的存储对象:文件(blob)、树(tree)、提交(commit)、标签(tag),保存在 .git/objects/ 目录。如 Blob 对象会先添加头部信息 类型+内容字节数+空字节,然后计算 SHA 值作为文件名,使用 zlib 压缩成内容,每一次修改的文件都会完整的保存一份快照而非记录差异。这里列举常用的命令行,便于快速查阅使用。编辑文本文件后,在工作区可以看到修改的差异内容,将改动提交到暂存
2022-04-03 23:37:23
2281
原创 照片整理工具(日历相册, 重复文件清理, 手机照片同步, 图片尺寸缩减)
工具解决的问题:1. 根据照片的拍摄时间生成日历,用日期查看的相册;2. 根据 文件尺寸 + 文件名 + MD5 三个维度快速找出重复文件的工具;3. 使用 adb 同步手机照片,能快速进行增量备份和进度展示的工具;4. 可方便的修改图片压缩参数,且不丢失 EXIF 信息的缩减尺寸工具;
2022-03-20 23:51:00
2466
原创 Android 将多个模块生成一个 AAR 后提供 SDK
Android Gradle 打包每个库工程都会导出一个 AAR 文件。之前有尝试使用第三方插件 fat-aar 来合并打包,但打包时经常报错,合并时间也略长。此外此次导出的 SDK 需要做代码混淆,如果对每一个库都进行混淆文件非常麻烦,不便于统一管理,也不便于统一暴露接口。工程库之间的引用逻辑比较多,也增加了导包的配置成本,此外还要支持 AIDL 合并。GitHub源码地址:https://github.com/RuiRay/MergeModuleAAR这里选择将多个工程库合并到一个工程库后再打包的方
2022-03-15 00:32:21
4209
原创 Android 使用 ProGuard 代码混淆
ProGuard 是开源的优化 Java 字节码工具。官方称可用减少 10% 体积,并提升 20% 运行效率。将类名、方法名、变量名混淆成a、b、c基本字母,一定程度上提高了反编译的难度。压缩(Shrinking):从入口开始建立引用关系网,去除网外为使用的代码。优化(Optimization):对入口点以外所有的方法进行分析,将其中一部分方法变为 final的,static的,private的或内联的,从而提高执行效率。混淆(Obfuscation):将入口点以外的类、方法、成员重构为简
2022-03-14 23:52:40
3837
原创 Gradle 入门之 Groovy 语言详解
Gradle 核心是基于 Groovy 脚本语言,Groovy 脚本基于 Java 且拓展了 Java。因此 Gradle 需要依赖 JDK 和 Groovy 库。Groovy 语法详解(类型、运算符、程序结构、闭包)...
2017-08-01 00:01:14
3740
原创 Android 网络请求框架对比分析
一、网络框架的基本结构在分析其它框架之前,先做一个简易的网络请求框架。这里的结构和 Volley 一致,主要分为 4 部分,如图: 第一部分:各种请求类型,如 JsonRequest、StringRequest 等。 第二部分:消息队列,消息队列维护了提交给网络框架的请求列表,并且根据相应的规则进行排序。 第三部分:Executor,也就是网络的执行者。该 Executor 继承自
2017-02-28 13:57:01
7669
原创 Logger 日志打印库详解
一、基本使用Logger 是一款 Android 平台上的简单、优雅、强大的开源日志库。1,Logger 提供了以下方法:打印线程的信息打印类的信息打印方法的信息优雅的打印JSON数据优雅的打印换行符打印简洁的信息点击日志跳转至源码2,引入依赖库,在 app 根目录的 build.gradle 文件中加入如下代码:compile 'com.orhanobut:logger:1.15'
2017-02-28 12:54:44
8209
原创 Android 数据库对比
一、常见数据库介绍GreenDao 是为Android设计的对象关系映射(ORM)工具。它提供了对象到关系型数据库SQLite的相应接口。为了在Android工程中使用greenDao,需要创建另一个“生成器”工程,它的任务是在你的工程域里生成具体的代码。因此相比与其它ORM框架具有出众性能。 LitePal 是对象关系映射(ORM)模型。它使开发者使用SQLite数据库变得非常容易。 你可
2017-02-28 12:17:27
9401
原创 Android Todo MVP 框架分析和例子
项目的业务逻辑不断变更,需求也不断扩张,导致在原有代码基础上去处理也变得越来越繁琐,这时项目框架和代码规范就显得非常必要了。Google 在 GitHub 上的 Android Architecture Blueprints 提供了很多框架 Demo,现在对其中的 todo‑mvp 做一个简单的分析,并模仿写一个简单的 Demo。 一、MVP 基本结构MVP 从更早的 MVC 框架演变过来,
2017-02-28 12:10:49
668
原创 【Android Library】项目导入到Nexus私服
1,在Android library中的Gradle中加入如下代码: apply plugin: 'maven' apply plugin: 'signing' signing { required { has("release") && gradle.taskGraph.hasTask("uploadArchives") } sign configura
2017-02-01 00:00:20
507
原创 Nexus 私服上传文件,并通过 Gradle 引用
一、上传文件到 Nexus1,进入 Nexus 仓库界面如果你电脑还没有使用 Nexus,需要先下载并启动 Nexus 私服。 在浏览器输入:http://127.0.0.1:8081/nexus/ 进入后看到如下界面就代表nexus已经启动成功。点击右上角的【Log In】登陆,初始用户名密码:admin/admin123 登陆后,点击右边导航栏的【Repositories】会看到
2017-01-31 23:56:44
5388
原创 RecyclerView 使用的简单封装
本 Demo 主要是对网络请求分页加载数据做的一个简易的封装,实现了如下功能: 1,RecyclerView 滑动到底部时加载下一页 2,ItemView 和它内部View的点击事件 3,Item 的选中效果如下: 使用方法: 1,继承 BaseNetFragment 2,实现 onLoadingData(int pageIndex),getRecyclerItemView(
2016-12-29 21:51:41
501
原创 用 PullToRefreshLayout 实现 RecyclerView 的下拉刷新
PullToRefreshLayout 原文链接:http://blog.youkuaiyun.com/zhongkejingwang/article/details/38868463在原 Demo 中找到了 ListView 的实现,但是缺少 RecylerView 的实现方式。 参照 PullableListView 的实现,发现只要实现 Pullable 接口,就能实现下拉刷新和上拉加载。 Pull
2016-12-28 13:02:25
2398
原创 Android 6.0 动态请求权限
Android 6.0 动态请求权限描述:*Android 应用在访问额外的资源或信息时,需要请求相应权限。根据权限的敏感性,系统可能会自动授予权限,或者由用户对请求进行许可。Android6.0及以上应用除了在清单文件中声明权限,敏感权限还需要在用户使用时动态授予。官方定义了普通和危险权限,经测试发现部分手机厂商的敏感权限会有所差异*。 问题:应用中用到 READ_PHONE_STATE 权限
2016-12-06 08:45:09
1696
原创 Android 命令过滤
Android 命令过滤在工作中遇到这样一个问题,当滑动 App 中的色盘时,被控制灯的颜色也要跟随变化。 最开始的做法是在 View 的 onTouch().ACTION_CHANGE 中直接调用发送命令给固件,然而由于 onTouch() 方法在单次滑动触发的 ACTION_CHANGE 事件过多,而固件那边的处理速度和资源有限,无法处理这么快的命令。这时就需要在 App 端做处理了。
2016-12-06 08:43:57
402
原创 Android BLE中心设备的onCharacteristicChanged()方法没有回调
描述:当设备为 Indication 模式时,设备的值有变化时会主动返回给App,App在 onCharacteristicChanged() 方法中能收到返回的值。 Indication: 从机会先向主机发送一条通知,主机接收到通知后去读取从机数据 Notification:从机直接发送给主机数据问题:在App中通过如下代码注册监听,注册成功后就能接收到设备主动反馈的值了。然而以下代码
2016-12-01 15:43:03
19647
14
原创 Android Studio打包APK是遇到的一些问题(Lint检查的错误)
一,Error* : expected resource of type drawable 原因:animation-list的文件放在anim文件夹下了 解决的两种方式: 1,移动文件到drawable文件夹下 2,替换 _loadigIcon.setImageResource(R.anim.loading_animation); 为
2016-11-28 11:45:07
7615
2
原创 Eclipse转AndroidStudio项目(包含子工程)
一、在Eclipse中通过Export生成Gradle文件1,在Eclipse菜单中打开 File --> Export-->Generate Gradle build files2,选中你的项目工程,包括主工程和子工程(Library),然后点击Finish如果你的工程之前已生成过或包含Gradle文件,需要勾上左下角的“Force overriding of exi
2016-11-28 11:35:14
439
原创 引用Realm数据库后.so文件找不到(UnsatisfiedLinkError)
在使用Realm数据库后,遇到了如下错误:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[...],nativeLibraryDirectories=[.../lib/arm, /vendor/lib, /system/lib]]] couldn't find "libxmediaplayer.so"是老司机,对这
2016-11-28 11:11:03
1064
原创 如何查看Android的ANR(无响应)异常
在Android开发中,当程序发生异常时会抛出异常信息,可以通过如下代码来获取异常信息,然而在ANR时我们在Logcat中并看不到异常信息。Thread.setDefaultUncaughtExceptionHandler(new Thread. UncaughtExceptionHandler() { public void uncaughtException(Thread t, Thr
2016-11-14 10:28:42
16801
原创 限制Edittext输入的字节长度
在给设备重命名时,设备对名字的存储空间一般都是多少字节,而并非多少字,并通常都是采用utf-8的编码。那问题来了,utf-8的编码是1-6个字节的不等长度,如何获取将一个超过30字节的文本转换到30字节以内?Java中获取utf-8文本的字节长度很简单,如下:text.getBytes("utf-8").length但是在把超过30个字节的字符串截取到30个字节
2016-10-15 13:09:09
3912
原创 自定义View总结
在开发中对自定义View的使用非常的普遍,对Android的深入理解这也是必须了解的知识点。以下总结了一些常用的知识点,更多内容待补充。。。一、 View的生命周期onFinishInflate() 当View中所有的子控件均被映射成xml后触发onMeasure( int , int ) 确定所有子元素的大小onLayout( boolean , int , int ,
2016-10-14 12:28:13
351
原创 HSV色盘详解
由于公司目前是做智能音乐灯的,由于控灯需要绘制了各种各样的取色器,现在可以已一个老司机的身份来分析一下HSV的取色盘。HSV模型了解它是一个倒锥子模型,这个模型就是按色彩、深浅、明暗来描述的。H是色彩,范围0° ~ 360°,红(0°)、绿(120°)、蓝(240°);S是深浅, S = 0时,只有灰度,越往圆心的位置越偏白;V是明暗,表示色彩的明亮
2016-10-14 10:43:58
10430
1
原创 自定义滚动按钮(滚轮)进度调节器
在开发中遇到一个类似鼠标滚轮效果的UI,在这里写下我的实现思路,希望对你有所帮助。效果图如下:一个滚动条,通过上下滚动来调节进度。这里的难点是滚动时的动画效果,下面一一说来。实现思路1,绘制一组动画图片,从第一个小横杠开始到第一个小横杠结束滚动的这一过程我们用20帧来表示绘制中间的滚动轴用得到的滚动轴与一个比背景圆略小的圆合成,插入滚轴Y
2016-10-13 20:06:38
800
原创 调用系统相机/相册获取图片的完美解决方案
调用系统相机/相册获取图片的事,在百度上找一下能搜到一大堆文章,然而拿过来在真机上跑一下大部分都有问题,根本达不到想要的效果。为什么会拿不到想要的图片呢,最主要的原因是因为图片太大,而获取的图片数据是放在Intent中的。而现在手机的像素普遍都是800W+,一张普通的尺寸为3200*2400px的照片要消耗30MB的内存空间,而一个Intent能传递的数据怎么可能支持这么大的空间,我测试过一些手机
2016-10-13 19:31:48
2310
原创 让按钮在输入法之上显示,实现一个优雅的登陆界面
在做登录界面时,“登录”按钮总是会被输入法挡住,要点击登录需要先收起输入法才能点击,这么多余的操作身为一个有强迫症的程序猿怎么能忍。在做这个之前,首先想到的肯定是设置android:windowSoftInputMode属性,然而并不能达想要的效果,果断放弃。解决办法是给rootView设置一个OnGlobalLayoutListener的监听事件,当布局发生改变时改变控件位置的方式来实现。实
2016-10-13 18:30:45
764
原创 Android M(6.0)扫描不到蓝牙设备的处理办法
在Android6.0手机上扫描不到蓝牙设备(如Nexus6),并会抛出一个异常: java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results
2016-10-13 18:00:05
19225
2
原创 自定义View中文本居中显示
在开发中遇到一个这样的需求,在选择星期时设计狮想要这个这样的效果:看到效果,想当然应该是用CheckBox实现吧,选中时背景蓝色文字白色,未选中时背景透明文字黑色。那最方便的实现方式应该是直接给切图,然而这种用切图,除了因为要做国际化图片量会很大外,另一个原因就是显示效果也不是非常好。另外一种就给CheckBox定义样式,实现思路应该是下面这个样
2016-08-27 16:50:26
14217
RadioButton和CheckBox自定义样式
2015-10-20
快递查询Apps
2015-03-24
Android短信联系人备份并上传
2015-03-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人