Android
文章平均质量分 55
-SOLO-
终将成为大神的男人
展开
-
可以无限滚动,支持自动滚动,设置滚动一屏幕时间的LayoutManger
【代码】可以无限滚动,支持自动滚动,设置滚动一屏幕时间的LayoutManger。原创 2023-08-25 14:00:04 · 240 阅读 · 0 评论 -
动态代理View 实现无感化的用户状态检测框架
示例代码:重点是要在构造函数中穿入,状态名称,和对应于xml中的属性名称。这样才能和xml属性联动。private static final DemoUserState login = new DemoUserState("登录" , 1);private static final DemoUserState bindPhoneNumber = new DemoUserState("绑定手机号" , 2);原创 2023-04-05 11:15:18 · 473 阅读 · 0 评论 -
周报终结者 GitLab 个人工作记录查询器
每周都要写周报,烦死人。为了解救自己,把自己从无聊的工作中抽离出来。特别写了一个工具。可以查询GitLab中自己一段时间内的所有提交记录。按照项目和分支进行排序。原创 2023-03-10 11:13:39 · 836 阅读 · 0 评论 -
华为 导出ANR日志
因为ANR日志在手机的data目录下,直接使用pull命令的话,权限不够。会在命令运行的文件夹内导出一个压缩包。需要使用如下命令导出错误报告。中找到anr日志文件。原创 2023-02-27 10:50:23 · 446 阅读 · 0 评论 -
Gradle 7.0 配置组件化开发模板
在model的gralde中配置。中配置属性,是否开启并行开发。原创 2023-01-17 15:29:18 · 535 阅读 · 1 评论 -
Arouter 使用中的问题
1.Arouter已经一年没有更新了。也没有适配android X。主要是针对Gradle 7.0以上配置。为了使用,引用了第三方的库。根目录的配置文件如下。原创 2023-01-12 17:28:14 · 517 阅读 · 0 评论 -
配置gradle :将properties文件转换为扩展属性
为了便于管理项目配置信息。我写了一个gradle文件。可以通过配置propeties文件来动态的修改gralde的扩展属性可以将config目录下img文件夹中的jpg和png文件复制到app/src/main/res/drawable-xxxhdpi/ 文件中.修改app名称以后可以同步修改项目名称。使用解决properties文件中文乱码因为所有子module都依赖项目根目录的build.gradle因此在其引入只需要引入一次。其他moudle都可以使用。在项目启动的时候,config.grad原创 2022-12-07 18:03:13 · 757 阅读 · 0 评论 -
android 屏幕适配
android 屏幕适配原创 2022-11-10 16:43:14 · 910 阅读 · 0 评论 -
使用代码设置activity为透明
代码】使用代码设置activity为透明。原创 2022-07-21 18:43:41 · 637 阅读 · 0 评论 -
设置自定义dialog的正确宽高
对于自定义dialog。要获取其宽高最好的办法是通过DecorView,因为Activity的DecorView的宽高就是屏幕的宽高。而通过DecorView来测试宽高。会考虑到layout_width和layout_height。这个两个属性的影响。如果直接通过view.measure(0,0);这种方法。测量的大小是其子控件的大小。没办法考虑到屏幕的大小。相对比较麻烦。隐藏推荐一下这种。记住inflate的第三个参数为false。因为我们只需layoutParams不需要真的添加到DecorVi原创 2022-05-27 14:06:48 · 2670 阅读 · 0 评论 -
Flutter dio 使用 注意事项
dio 配置抓包代理需要通过以下代码才能设置代理。 //是否开启抓包功能 static const bool isProxyEnable = true; //设置代理服务器地址和端口 static const String proxy = "192.168.7.134:8888"; init(){ ...//配置可以通过Fiddler抓包 if(isProxyEnable){ (_dio.httpClientAdapter as DefaultHttpClie原创 2022-03-16 14:46:58 · 4698 阅读 · 0 评论 -
Android 7.0 抓包配置
序言因为android 7.0以后的安全策略更严格,直接抓包已经没办法了。现在介绍一种可以配置debug模式下允许抓包的方法。配置android(重点)需要在android中的res下新建xml文件夹,在其中新建文件network_security_config.xml内容如下<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anch原创 2022-03-02 11:09:28 · 1721 阅读 · 0 评论 -
基于SVG的, 可缩放,可拖动,可点击的地图控件
序言闲来无事写了个地图控件,基于SVG。可以缩放,可拖动,可点击。SVG具有体积小,不失真的优点。而且由于保存的是路径信息,可以做到复杂图形的点击判断功能。还是很香的。效果实现原理,SVG 意为可缩放矢量图形(Scalable Vector Graphics)。SVG 使用 XML 格式定义图像。在xml中定义了路径,只需要将路径解析保存到path中。再绘制出来就行了。svg地图的获取使用如下地址(需要科学上网)Pixel Map首页是这样的,支持世界上所有国家下载中国地图下载以原创 2022-01-14 11:12:30 · 3578 阅读 · 0 评论 -
打印gradle 依赖
gradlew app:dependencies最好输出到文件中,使用如下命令gradlew app:dependencies > app_dependecies_tree.txt原创 2022-01-07 14:27:32 · 5022 阅读 · 0 评论 -
Android Studio 基础控件飘红 处理办法
问题Android Studio 又作妖,在最新的Android Studio版本中[ Android Studio Arctic Fox 2020.3.1 Patch 2] 基础控件在XML里面飘红。把项目删除,重新从git clone 也不能处理。处理需要在项目的gradle文件中配置如下classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"感谢感谢国外的老铁Cannot resolve class of basic原创 2021-12-17 11:03:35 · 3463 阅读 · 0 评论 -
300行代码实现循环滚动控件
序言在业务中需要显示一个循环滚动的控件,内容可以循环滚动,可以自动滚动,手指触摸的时候会暂停。由于目前的方案都是基于ViewPager或者RecycleView的。还需要实现Adapter。使用成本比较高。于是我就自定义了一个控件实现该功能,使用使用起来很简单。把需要显示的控件放置在其中就行。就好普通的HorizontalScrollView用法一样不过子控件必须要LoopLinearLayout效果1.支持左右循环滚动2.支持自动滚动3.支持点击事件4.触摸暂停5.一共不到300行原创 2021-11-30 15:37:50 · 425 阅读 · 0 评论 -
Android studio 中文语言包安装
由于 Android Studio 内部的插件市场无法搜索到。但是Android Studio是基于IntelliJ Platform 所以用IntelliJ Platform的插件代替地址 中文语言包可能出现版本不兼容比如上面提示的Android Studio基于 203.7717.56版本构建只需要在插件的历史版本中找到203开头的,下载即可下载以后使用本地安装插件的方式安装即可。最后的效果...原创 2021-10-14 17:53:36 · 8701 阅读 · 4 评论 -
小米应用商店错误日志查看教程(含工具下载)
序言在小米商店上架过程中,如果发生错误。可以下载日志,但是日志文件需要特殊工具查看。而且官网上也没有相应的教程。特别记录一下。下载下来以后解压出来是这样的。mp4里面是测试视频。而压缩包里面是日志文件。解压以后是这样的。这个时候需要在这个文件夹中放入一个jar包。工具包下载然后输入命令,其中的bugreport-xxx.txt 就是同目录下的错误日志文件,名字取同目录下的名字。java -jar chkbugreport-0.5-216.jar "bugreport-xxxx.txt"原创 2021-09-29 11:08:16 · 1874 阅读 · 1 评论 -
获取正在运行的Activity 包括其中的fragment 工具
序言很多时候要修改历史项目,需要快速定位bug发生的位置。于是写了这个工具。一个jar文件。双击运行即可。下载地址获取activity工具源码GitHub原创 2021-09-28 17:02:19 · 378 阅读 · 0 评论 -
Android 控制 ContentProvider的创建
序言随着app隐私政策的收紧,现在不经过用户同意,就收集敏感信息的行为一旦被检测出来。很容易造成app下架。但是有些SDK的初始化是通过注册ContentProvider实现自动调用其onCreate()方法,来实现无感初始化的。如果SDK在ContentProvider中获取了敏感信息,又没有提供控制方法。我们就很被动。于是我花了点时间研究了怎么hook contentProvider的创建。让其在用户同意后再初始化。方案1声明在清单文件中的ContentProvider 会在应用启动后就创建。具体原创 2021-09-13 16:46:53 · 709 阅读 · 2 评论 -
最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码
7477原创 2021-08-28 17:17:42 · 1101 阅读 · 0 评论 -
android studio profiler 华为崩溃
在使用华为调试app时,使用profiler来监控性能。但是用不了多久就要崩溃。这其实是Android Studio profiler的bug。需要删除以下文件夹。data/data/pacakge_name/codecache网上还有一种是说删除测试手机/data/local/tmp/perfd文件夹这种方法也可以让profiler不崩溃。但是dump 不了堆存储文件。...原创 2021-08-10 13:43:42 · 3688 阅读 · 3 评论 -
通过拦截 Activity的创建 实现APP的隐私政策改造
序言最近因为政策收紧,现在要求APP必须在用户同意的情况下才能获取隐私信息。但是很多隐私信息的获取是第三方SDK获取的。而SDK的初始化一般都在application中。由于维护的项目多,如果贸然改动很有可能造成潜在的问题。所以想研究一个低侵入性的方案。在不影响原有APP流程的基础上完成隐私改造。方案研究了几个方案,简单的说一下方案1通过给APP在设置一个入口,将原有入口的activity的enable设置为false。让客户端先进入到隐私确认界面。确认完成,再用代码使这个activity的en原创 2021-07-30 16:49:42 · 1594 阅读 · 0 评论 -
记录不同线程的出错的堆栈
有的时候我们的代码会在另外的线程执行。如果出错,只能打印出调用代码的线程的堆栈。无法知道是谁调用的。也就是另一个线程信息。这里分享一个技巧可以实现。结果原创 2021-07-29 16:57:17 · 122 阅读 · 0 评论 -
获取类声明的泛型的工具类
记录一下适用于找类似如下声明中的泛型,T 和E的值 class A<T extends B,E extends C>{ } class C extends A<T1,E1>{ } class D extends C{ }该工具支持遍历也就是,可以在D中寻找到T1和E1的类型import java.lang.reflect.Pa原创 2021-07-25 09:26:44 · 394 阅读 · 0 评论 -
Android 7.0以上抓包失效
Android 7.0以上的系统抓包的时候,如果一段时间不用。关闭了抓包软件,而没有关闭代理。手机检查到通过代理无法访问网络。会让设置的代理失效,但是代理的设置信息不会改变。所有的请求都不会再走代理。这个时候打开抓包软件也没办法抓包。如果还想抓包,需要把代理设置为无,再设置成自己的代理。这个现象在小米和华为手机上都有。应该是Android系统的优化。...原创 2021-07-22 10:02:27 · 706 阅读 · 1 评论 -
Android 通过ADB 查看当前的Activity
通用一般的手机使用如下命令adb shelldumpsys activity | grep -i run执行效果如下(VIVO手机上演示)特殊以上的代码在不同的手机中输出的内容不同。甚至有些都无法找到。因此我把常见的几个品牌的命令。单独拎出来说明。vivoadb shelldumpsys activity | grep -i "mResumedActivity"华为adb shelldumpsys activity | grep -i "mLastResumedActi原创 2021-07-08 11:29:49 · 1116 阅读 · 0 评论 -
使用ASM实现方法拦截框架,再也不用写重复代码了。
MehodInterceptorMehodInterceptor是一个使用ASM来动态修改字节码,以达到方法拦截。通过该框架,可以控制某个方法是否执行。比如某些业务有一些通用的判断逻辑:比如弹出确认提示,判断用户是否登录,判断APP是否具有某些权限。只有这些判断通过,才会执行该方法。否则不执行。这些通用的逻辑,现在可以通过注解的方式添加到方法上。比如这样:不再需要写其他的代码,最后的效果是这样的。原理该框架已经发布到 mavenCentral()了。只需要在根目录的gradle集成。bu原创 2021-07-07 17:02:53 · 549 阅读 · 1 评论 -
记录Fragment的显示时长
序言最近在埋点,需要记录fragment的显示时长。想法很简单,使用我们熟知的fragment的生命周期即可。主需要在onResume记录开始时间,在onPase记录结束时间。相减就可以完成fragment显示时间的记录。但是这是最理想的情况,是在一个activity中只有一个fragment。 fragment不涉及hide和show等方法的情况下。然后我们实际情况却很复杂,涉及到ViewPager中使用fragment会预加载fragment,此时会有多个fragment处于onResume状态但是原创 2021-06-30 12:42:20 · 687 阅读 · 5 评论 -
Android 图的最短路径算法
序言为了研究单源最短路径的相关算法,写了一个demo算法的细节请参考图的四种最短路径算法我实现了其中的两种。我将算法进行了封装,这是基类package com.example.mappath;import androidx.annotation.NonNull;import java.util.Stack;/** * @author zhuguohui * @description:对图的单源最短路径算法的抽象 * @date :2021/5/12 14:34 */pub原创 2021-05-12 16:03:04 · 356 阅读 · 0 评论 -
Android 可视化走迷宫算法 支持自定义地图
序言写了一个项目,用来演示走迷宫算法。红色表示正在检查的点,绿色表示已经记录的路径。遇到一个没有走过的点,会依次从右,下,左,上。进行尝试。如果都不能成功,会回退一步。效果如下。该项目地图支持自定义在raw 目录下有一个maze.txt 文件,其中1 表示墙壁,0表示可以走的地方。求解的起点是左上角,终点是右下角。地图的大小可以扩展。自带的是11行10列的。算法核心代码如下,本质上就是深度优先算法。 private void getPath() { Stack<co原创 2021-05-11 15:09:22 · 422 阅读 · 0 评论 -
仿微信录音功能-(声波动画,上滑取消,超时截取,倒计时提醒)
序言最近开发了一个语音输入控件,UI效果和微信的保持基本一直,除了颜色不一样。具体的功能如下动画效果和微信一样,都是通过声音的分贝大小驱动动画的大小如果声音过小,会进入监听模式,(一个小波浪从右到左移动)录音的气泡会随着时间不断变大最长支持60秒录音,在最后十秒会震动提示用户最后十秒会有倒计时,如果超时会自动截取支持转MP3格式使用简单,一个回调返回语音文件的地址和语音的时长效果这个demo 包含了录音,播放,权限申请的所有功能。建议自己下载试一试效果。动画效果监听模式(声音太原创 2021-04-30 10:51:34 · 6312 阅读 · 10 评论 -
仿微信图片编辑 全网功能最全的图片编辑器
序言最近写一个图片编辑器,仿造的微信的图片编辑,以下加粗的功能是微信没有的。这个项目可以说是目前编辑功能最多的编辑器。而且功能都支持定制。绘制方框绘制圆形绘制文字绘制箭头涂鸦绘制马赛克图片剪裁使用1.可以定制需要的功能,不需要的功能会自动隐藏。以下是定义的在TRSPictureEditor的常量。 public static final int BOX_ENABLE = 0x00000001;//方形选择框 public static final int CIRC原创 2021-04-30 00:42:50 · 2591 阅读 · 4 评论 -
android gradle 配置镜像
建议使用阿里云的镜像服务器,避免翻不了墙的尴尬。使用以下配置// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'htt原创 2021-04-30 00:10:44 · 709 阅读 · 0 评论 -
Android studio 自定义项目分支显示名称
经常一套代码多个分支,每个分支都是一个项目。而区分不同项目,只能靠分支的不同名字。很不直观。通过以下方式,配置rootProject.name 就可以自定义Android studio 显示的名字。原创 2021-04-25 14:36:46 · 459 阅读 · 0 评论 -
解决RxJava 的thrown on Scheduler.Worker thread. Add `onError` handling 错误
在rxjava 1中 如果你订阅的时候,没有传入onEror的处理。默认给你一个InternalObservableUtils.ERROR_NOT_IMPLEMENTED。而这个ERROR_NOT_IMPLEMENTED的实现就是抛出这个异常。于是你经常会收到这个崩溃的报告。关键在于这个错误不一定是你的代码引入的,只要任何使用rxjava1的库,没有自己处理好错误,错误就会被抛出,最后APP就崩溃了。对于一些项目,更换第三方库的代价太大。我们能不能拦截这个error的抛出呢。其实是可以的,关键原创 2021-04-25 11:49:12 · 1029 阅读 · 2 评论 -
优先级layout
序言在移动开发中,适配问题是重中之重。特别是在阅读类项目中。在空间有限的情况下,需要尽可能的显示重要性高的内容。为此我自定义了一个layout。可以实现对内容权重的设置。当layout空间不足的时候,优先显示优先级高的内容。使用方法也很简单。和普通的layout一样 <com.example.orderlayoutdemo.view.TRSOrderLayout android:id="@+id/layout_order" android:layout_width原创 2020-12-17 15:00:49 · 2601 阅读 · 2 评论 -
使用RXJava同时获取网络数据和缓存数据
说明在资讯类应用中为了优化用户体验,一般会使用缓存数据。以下代码就是使用rxjava 同时获取网络和缓存数据。网络数据可以覆盖缓存数据,缓存数据无法覆盖网络数据。网络出错不会影响缓存的显示,缓存出错不会影响网络的显示。两则同时出错,则会显示网络错误。使用的时候也很简单。只需要一行代码。RxDataUtil.getData(net, cache)和网上已有的方法相比,这个方法更好理解。没用特别复杂的操作符。而且没用bug。下面这篇文章中如果网络和缓存都出错,下游将接受不到事件,界面会一直处于load原创 2020-10-12 15:21:44 · 877 阅读 · 1 评论 -
抓包工具:Fiddler 修改请求表单和响应数据
断点命令介绍: bpu在请求开始时中断,bpafter在响应到达时中断,bps在特定http状态码时中断,bpv/bpm在特定请求method时中断。提示:命令输入区域输入help,回车执行会打开一页面详细介绍fiddler的所有命令。也可以在菜单栏设置断点,是针对所有的会话请求,不大实用,建议用命令。以bpu为例演示断点功能:1、以淘宝无线H5为例,在浏览器打开m.taobao.com首页。2、在Fiddler命令行输入区输入“bpu”回车执行清掉原有的断点,然后输入“bpu m.taobao转载 2020-05-28 09:54:18 · 1246 阅读 · 0 评论 -
[转] fiddler之模拟请求超时和弱网模式
在针对手机端测试时,很多情况下我们需要测试响应超时和弱网情况的响应情况。此时可以使用fiddler提供的断点和弱网功能进行测试。1、请求超时 设置断点,是请求响应超时。查看请求结果。Rules–Automatic breakpoints–before request/after response(F11或alt+F11)或者命令行中,bpu+域名/bpafter+域名2、弱网测试 设置弱网模式:Rules–performance–Simulate modem speeds一般开启只开启转载 2020-05-22 10:04:06 · 1048 阅读 · 0 评论