
Android应用开发
文章平均质量分 81
开发过程中的总结
Ruiray95
让生活有趣
展开
-
Android 将多个模块生成一个 AAR 后提供 SDK
Android Gradle 打包每个库工程都会导出一个 AAR 文件。之前有尝试使用第三方插件 fat-aar 来合并打包,但打包时经常报错,合并时间也略长。此外此次导出的 SDK 需要做代码混淆,如果对每一个库都进行混淆文件非常麻烦,不便于统一管理,也不便于统一暴露接口。工程库之间的引用逻辑比较多,也增加了导包的配置成本,此外还要支持 AIDL 合并。GitHub源码地址:https://github.com/RuiRay/MergeModuleAAR这里选择将多个工程库合并到一个工程库后再打包的方原创 2022-03-15 00:32:21 · 4215 阅读 · 0 评论 -
Android 使用 ProGuard 代码混淆
ProGuard 是开源的优化 Java 字节码工具。官方称可用减少 10% 体积,并提升 20% 运行效率。将类名、方法名、变量名混淆成a、b、c基本字母,一定程度上提高了反编译的难度。压缩(Shrinking):从入口开始建立引用关系网,去除网外为使用的代码。优化(Optimization):对入口点以外所有的方法进行分析,将其中一部分方法变为 final的,static的,private的或内联的,从而提高执行效率。混淆(Obfuscation):将入口点以外的类、方法、成员重构为简原创 2022-03-14 23:52:40 · 3841 阅读 · 0 评论 -
透明度百分比对应关系表
百分比透明度与ARGB中的Alpha的16进制对应关系原创 2022-03-13 17:24:33 · 1418 阅读 · 1 评论 -
Eclipse for Android 开发环境搭建及各种坑
Eclipse 下载、配置和其中遇到的异常...原创 2017-10-16 10:31:19 · 12099 阅读 · 0 评论 -
Android 数据库对比
一、常见数据库介绍GreenDao 是为Android设计的对象关系映射(ORM)工具。它提供了对象到关系型数据库SQLite的相应接口。为了在Android工程中使用greenDao,需要创建另一个“生成器”工程,它的任务是在你的工程域里生成具体的代码。因此相比与其它ORM框架具有出众性能。 LitePal 是对象关系映射(ORM)模型。它使开发者使用SQLite数据库变得非常容易。 你可原创 2017-02-28 12:17:27 · 9403 阅读 · 0 评论 -
打包和依赖 AAR 文件
AAR 文件的单模块打包和多模块打包,以及引入到项目中的两种方式,以及常见遇到的问题原创 2017-08-01 14:02:02 · 1160 阅读 · 0 评论 -
HSV色盘详解
由于公司目前是做智能音乐灯的,由于控灯需要绘制了各种各样的取色器,现在可以已一个老司机的身份来分析一下HSV的取色盘。HSV模型了解它是一个倒锥子模型,这个模型就是按色彩、深浅、明暗来描述的。H是色彩,范围0° ~ 360°,红(0°)、绿(120°)、蓝(240°);S是深浅, S = 0时,只有灰度,越往圆心的位置越偏白;V是明暗,表示色彩的明亮原创 2016-10-14 10:43:58 · 10445 阅读 · 1 评论 -
重新认识 Gradle 打包
Gradle 是什么,Android 打包插件,AAR 文件,AS 如何快速打包...原创 2017-10-16 10:34:44 · 433 阅读 · 0 评论 -
Android 第三方推送整合文档
集成第三方推送笔记,应用未启动时点击通知栏执行的一连串打开页面操作...原创 2017-07-31 23:36:43 · 555 阅读 · 0 评论 -
Android 播放器通知栏样式适配
根据系统主题,适配不同手机的通知栏...原创 2017-07-31 23:32:12 · 2127 阅读 · 0 评论 -
Android 中使用 Kotlin 快速入门
Kotlin 的对象结构、函数,环境搭建,Anko Layout...原创 2017-07-31 23:25:53 · 1087 阅读 · 0 评论 -
Android 应用保活笔记
提高进程优先级降低被杀死,通过系统机制拉活应用...原创 2017-07-31 23:04:48 · 402 阅读 · 0 评论 -
Android 网络请求框架对比分析
一、网络框架的基本结构在分析其它框架之前,先做一个简易的网络请求框架。这里的结构和 Volley 一致,主要分为 4 部分,如图: 第一部分:各种请求类型,如 JsonRequest、StringRequest 等。 第二部分:消息队列,消息队列维护了提交给网络框架的请求列表,并且根据相应的规则进行排序。 第三部分:Executor,也就是网络的执行者。该 Executor 继承自原创 2017-02-28 13:57:01 · 7673 阅读 · 0 评论 -
Logger 日志打印库详解
一、基本使用Logger 是一款 Android 平台上的简单、优雅、强大的开源日志库。1,Logger 提供了以下方法:打印线程的信息打印类的信息打印方法的信息优雅的打印JSON数据优雅的打印换行符打印简洁的信息点击日志跳转至源码2,引入依赖库,在 app 根目录的 build.gradle 文件中加入如下代码:compile 'com.orhanobut:logger:1.15'原创 2017-02-28 12:54:44 · 8210 阅读 · 0 评论 -
Android Todo MVP 框架分析和例子
项目的业务逻辑不断变更,需求也不断扩张,导致在原有代码基础上去处理也变得越来越繁琐,这时项目框架和代码规范就显得非常必要了。Google 在 GitHub 上的 Android Architecture Blueprints 提供了很多框架 Demo,现在对其中的 todo‑mvp 做一个简单的分析,并模仿写一个简单的 Demo。 一、MVP 基本结构MVP 从更早的 MVC 框架演变过来,原创 2017-02-28 12:10:49 · 670 阅读 · 0 评论 -
RecyclerView 使用的简单封装
本 Demo 主要是对网络请求分页加载数据做的一个简易的封装,实现了如下功能: 1,RecyclerView 滑动到底部时加载下一页 2,ItemView 和它内部View的点击事件 3,Item 的选中效果如下: 使用方法: 1,继承 BaseNetFragment 2,实现 onLoadingData(int pageIndex),getRecyclerItemView(原创 2016-12-29 21:51:41 · 501 阅读 · 0 评论 -
用 PullToRefreshLayout 实现 RecyclerView 的下拉刷新
PullToRefreshLayout 原文链接:http://blog.youkuaiyun.com/zhongkejingwang/article/details/38868463在原 Demo 中找到了 ListView 的实现,但是缺少 RecylerView 的实现方式。 参照 PullableListView 的实现,发现只要实现 Pullable 接口,就能实现下拉刷新和上拉加载。 Pull原创 2016-12-28 13:02:25 · 2404 阅读 · 0 评论 -
Android 6.0 动态请求权限
Android 6.0 动态请求权限描述:*Android 应用在访问额外的资源或信息时,需要请求相应权限。根据权限的敏感性,系统可能会自动授予权限,或者由用户对请求进行许可。Android6.0及以上应用除了在清单文件中声明权限,敏感权限还需要在用户使用时动态授予。官方定义了普通和危险权限,经测试发现部分手机厂商的敏感权限会有所差异*。 问题:应用中用到 READ_PHONE_STATE 权限原创 2016-12-06 08:45:09 · 1696 阅读 · 0 评论 -
Android 命令过滤
Android 命令过滤在工作中遇到这样一个问题,当滑动 App 中的色盘时,被控制灯的颜色也要跟随变化。 最开始的做法是在 View 的 onTouch().ACTION_CHANGE 中直接调用发送命令给固件,然而由于 onTouch() 方法在单次滑动触发的 ACTION_CHANGE 事件过多,而固件那边的处理速度和资源有限,无法处理这么快的命令。这时就需要在 App 端做处理了。原创 2016-12-06 08:43:57 · 404 阅读 · 0 评论 -
Android BLE中心设备的onCharacteristicChanged()方法没有回调
描述:当设备为 Indication 模式时,设备的值有变化时会主动返回给App,App在 onCharacteristicChanged() 方法中能收到返回的值。 Indication: 从机会先向主机发送一条通知,主机接收到通知后去读取从机数据 Notification:从机直接发送给主机数据问题:在App中通过如下代码注册监听,注册成功后就能接收到设备主动反馈的值了。然而以下代码原创 2016-12-01 15:43:03 · 19660 阅读 · 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 阅读 · 0 评论 -
引用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 阅读 · 0 评论 -
打包依赖.aar文件以及坑总结
AAR 文件的单模块打包和多模块打包,以及引入到项目中的两种方式,以及常见遇到的问题...原创 2016-11-28 10:46:56 · 13355 阅读 · 0 评论 -
如何查看Android的ANR(无响应)异常
在Android开发中,当程序发生异常时会抛出异常信息,可以通过如下代码来获取异常信息,然而在ANR时我们在Logcat中并看不到异常信息。Thread.setDefaultUncaughtExceptionHandler(new Thread. UncaughtExceptionHandler() { public void uncaughtException(Thread t, Thr原创 2016-11-14 10:28:42 · 16808 阅读 · 0 评论 -
限制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 阅读 · 1 评论 -
自定义View总结
在开发中对自定义View的使用非常的普遍,对Android的深入理解这也是必须了解的知识点。以下总结了一些常用的知识点,更多内容待补充。。。一、 View的生命周期onFinishInflate() 当View中所有的子控件均被映射成xml后触发onMeasure( int , int ) 确定所有子元素的大小onLayout( boolean , int , int ,原创 2016-10-14 12:28:13 · 351 阅读 · 0 评论 -
自定义滚动按钮(滚轮)进度调节器
在开发中遇到一个类似鼠标滚轮效果的UI,在这里写下我的实现思路,希望对你有所帮助。效果图如下:一个滚动条,通过上下滚动来调节进度。这里的难点是滚动时的动画效果,下面一一说来。实现思路1,绘制一组动画图片,从第一个小横杠开始到第一个小横杠结束滚动的这一过程我们用20帧来表示绘制中间的滚动轴用得到的滚动轴与一个比背景圆略小的圆合成,插入滚轴Y原创 2016-10-13 20:06:38 · 801 阅读 · 0 评论 -
调用系统相机/相册获取图片的完美解决方案
调用系统相机/相册获取图片的事,在百度上找一下能搜到一大堆文章,然而拿过来在真机上跑一下大部分都有问题,根本达不到想要的效果。为什么会拿不到想要的图片呢,最主要的原因是因为图片太大,而获取的图片数据是放在Intent中的。而现在手机的像素普遍都是800W+,一张普通的尺寸为3200*2400px的照片要消耗30MB的内存空间,而一个Intent能传递的数据怎么可能支持这么大的空间,我测试过一些手机原创 2016-10-13 19:31:48 · 2310 阅读 · 0 评论 -
让按钮在输入法之上显示,实现一个优雅的登陆界面
在做登录界面时,“登录”按钮总是会被输入法挡住,要点击登录需要先收起输入法才能点击,这么多余的操作身为一个有强迫症的程序猿怎么能忍。在做这个之前,首先想到的肯定是设置android:windowSoftInputMode属性,然而并不能达想要的效果,果断放弃。解决办法是给rootView设置一个OnGlobalLayoutListener的监听事件,当布局发生改变时改变控件位置的方式来实现。实原创 2016-10-13 18:30:45 · 764 阅读 · 0 评论 -
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 · 19226 阅读 · 3 评论 -
自定义View中文本居中显示
在开发中遇到一个这样的需求,在选择星期时设计狮想要这个这样的效果:看到效果,想当然应该是用CheckBox实现吧,选中时背景蓝色文字白色,未选中时背景透明文字黑色。那最方便的实现方式应该是直接给切图,然而这种用切图,除了因为要做国际化图片量会很大外,另一个原因就是显示效果也不是非常好。另外一种就给CheckBox定义样式,实现思路应该是下面这个样原创 2016-08-27 16:50:26 · 14219 阅读 · 0 评论 -
自定义TextView,设置Drawable图标居中显示
在Android中,有时需要图标和文字在布局中居中显示,比如这种场景:搜索图标和文字是紧挨着,点击整个白色区域会触发相应的事件,这种情况下如何只用一个View来达到这种效果呢。当然如果是以前就会用一个RelativeLayout来作为点击区域,再加上一个TextView来显示文本,然而我并不喜欢这种实现方式。看下对比效果图:代码实现:原创 2016-08-27 16:13:52 · 12446 阅读 · 4 评论 -
自定义Drawable(文字按钮点击效果设置)
一些在开发UI时经常需要用到的自定义Drawable的代码,整理起来,方便今后高效的开发。1,单选按钮、复选框xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"> android:drawable="@mipmap/icon_checked原创 2015-12-03 15:58:14 · 2167 阅读 · 0 评论 -
Dlna音乐播放器
最近做DLNA音乐播放的功能,由于相关资料相对较少,官网上的英文文档又比较难理解,导致实现这一功能花费了大量时间。今天把我的Demo分享给大家。效果图如下:1,本Demo实现了DMR设备的搜索,注册事件监听,获取播放信息,音量,播放暂停,进度更新等功能2,引入cling-core-1.0.5库,主要实现了DMC的功能3,主要逻辑:启动一个简单的Http服原创 2015-11-04 21:43:19 · 4009 阅读 · 0 评论 -
可拖动的圆形进度条
效果图如下:1,通过继承View,重写onDraw(Canvas canvas)方法,实现界面进度显示2,重写onTouchEvent(MotionEvent event)方法,监听拖动事件3,在监听位置改变时,计算角度,重新调用onDraw()方法进行绘制关键代码如下:public class MusicProgressBar extends View原创 2015-11-04 21:09:52 · 4831 阅读 · 0 评论 -
RadioButton和CheckBox自定义样式
效果图如下:1,通过继承RadioButton,重写onDraw(Canvas canvas)方法,实现自定义效果的的RadioButton关键代码如下: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int cx = getWidth() / 2; int c原创 2015-11-04 20:50:16 · 725 阅读 · 0 评论 -
Android FragmentStatePagerAdapter.notifyDataSetChanged()刷新数据的问题
在使用FragmentStatePagerAdapter时,调用其notifyDataSetChanged()方法想让Fragment重新加载,让内部的数据刷新。但是调用后,发现根本没有任何作用,特别郁闷,看了百度上的一篇文章,感觉还不错,由此得来启发。http://blog.youkuaiyun.com/u012296101/article/details/46411515我要实现这么一个效果:在主界面原创 2015-06-10 19:53:44 · 4830 阅读 · 0 评论 -
eclipse svn插件的安装与使用
首先从网站上下载一个eclipse svn原创 2014-07-30 21:09:07 · 621 阅读 · 0 评论 -
Android Activity页面跳转动画
先来看一下我做的无缝跳转吧,原创 2014-07-21 16:41:22 · 1028 阅读 · 1 评论