自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DeMonnnnnn

I decide what tide to bring. 我的命运,由我做主。

  • 博客(293)
  • 资源 (26)
  • 收藏
  • 关注

原创 Java格式化占位符

【代码】Java格式化占位符。

2023-08-07 12:30:29 318

原创 Python 获取文件的md5值

【代码】Python 获取文件的md5值。

2023-05-19 13:59:48 872

原创 计算角度与弧度

无论计算角度还是弧度,始终绕不开的就是正切函数。用于返回夹角的弧度值,进而得到角度。为例,提供两个反切函数。交点的x轴正方向夹角。

2023-04-07 15:53:47 1066

原创 多条件判断的二进制简化

多条件同时判断,并且每个条件都可以影响结果的情况下,如果 if-else 直接判断的话,特别容易混乱,判读出错。我们可以根据二进制数据的特性,每一位都看做是一个 bool 值。假如要在四个条件的组合中判断是否为真,可将每一个条件作为二进制中的一位,按从右到左的顺序编号。四个条件分别为 a,b,c,d ,从右到左分别对应最后 4 位,然后将对应的值保存变量中,如:a=true,b=false,c=true,d=true,得到的二进制为:result=1011//or 转为10进制。

2023-03-09 10:58:10 240

原创 TS 内置条件类型

从 Type 中选取一系列的属性,这些属性来自于 Keys(字符串字面量或字符串字面量的联合类型),用这些属性构成新的 type。获取函数的返回值类型。

2023-03-03 10:16:23 165

原创 VSCode TS函数自动补全小括号

VSCode写ts代码时,函数提示回车后,不会自动补括号。

2023-01-12 18:29:52 940 1

原创 TypeScript 全局调用

}假设我有一个Loading类,我希望方法可以全局被其他类调用。

2023-01-11 16:09:16 492

原创 Android 反编译初探-基础篇

工具:介绍反编译需要用到的工具原理:反编译基本原理实践:替换一个未混淆&未加固apk的启动页面。

2023-01-09 16:30:36 1981

原创 Android 使用dx/d8将jar转换为dex

在 JDK1.8 之前我们可以通过 dx 工具将 jar 转为 dex。为了能够支持 JDK1.8,目前 AGP 是通过在 D8/R8 将 class 文件编译成 dex 文件的过程中,对字节码进行转换来实现的,这个转换过程称为脱糖。因此 JDK1.8 及以后我们需要使用 d8 工具将 jar 转为 dex。

2023-01-06 15:50:32 4250

原创 Android dex动态加载后,启动Activity解决方案

在Android dex 动态加载(Kotlin 版)一文中我们讲解了如何 dex 动态加载,以及如何通过反射执行 dex 中的方法。在进一步的研究中发现,直接调用 dex 中的方法会报错。今天我们来一步步分析一下原因,并给出启动 dex 中的 Activity 的解决方案。LoadApk.java 源码代码资源文件Activity, Service 等组件Manifest 配置文件。

2023-01-05 17:47:47 2391

原创 Android jar中包含第三方库代码解决方案

Android为了解决jar包无法包含无法包含资源文件&第三方库代码的问题推出了aar包,打包生成aar可以含资源文件&第三方库代码,极大的方便了我们开发SDK。然而我们在做dex动态加载的过程中,dex只能通过jar生成,限制了我们的sdk只能使用jar。资源文件可以通过二进制,base64等方案解决。第三方库代码有三种解决方案,可以根据库的大小,是否包含资源文件等因素综合选择。

2022-12-29 18:21:07 761

原创 Android 查看项目依赖树

执行后会将依赖日志输出在根目录的。

2022-12-29 16:51:05 716

原创 Cocos2.4.9编译Android程序报错

MAC电脑会出现此问题,JDK8安装到设备上会有个插件。设备会默认使用插件内到JDK环境。而插件内到JDK是缺少tools.jar的。中拷贝一份tools.jar。复制tools.jar粘贴到。下载完整的JDK8版本。

2022-12-28 10:36:11 667

原创 Mac 管理JDK环境变量

以博主为例,开发Android程序一般使用JDK11;但是制作cocos2.4.9游戏打包环境却只能使用JDK8。在上面的官网页面我们可以下载到最新的JDK19or17,也可以下载目前主流的JDK8or11.mac选择dmg安装会自动配置环境变量,选择压缩包则需要自己解压后配置环境变量。选择自己需要的JDK版本及电脑版本,下载安装即可。因此我们需要配置多版本JDK环境,通过。

2022-12-27 19:44:56 321

原创 Mac 管理Python环境

使用pyenv管理python非常方便,如果你之前自己安装了其他版本的python,可以参考如下删除,再使用pyenv安装。如果你觉得每次都python3很麻烦,想直接python就执行python3,可以通过修改系统变量别名来实现。这个时候python指令无效,只能通过python3执行系统内置python3.x。如果你只需要使用Python3.x,并且3.9.x版本符合需求,那么只需要。最新的Mac电脑内置Python3.9,而不再是Python2.x。执行脚本即可,而无需任何做任何操作。

2022-12-27 18:23:58 1390

原创 Android 代码混淆Proguard

假设没指定白名单就进行混淆打包,而某某类的类名被混淆了(假设变成了a),那么可能其他引用或使用该类的类就找不到该类,说不定应用就会因此崩溃或是导致相应的功能无法使用。在Android的具体表现就是打包时,将项目里的包名、类名、变量名根据混淆规则进行更改,使反编译工具反编译出来的代码人难以阅读,从而达到防止被逆向破解的目的。Android代码混淆,又称Android混淆,是伴随着Android系统的流行而产生的一种APP保护技术,用于保护APP不被破解和逆向分析。(每次混淆修改后,打包前注意clean)

2022-12-13 00:33:07 2399

原创 Android Kotlin反射全解析

读此文前你需要学习并了解Java反射的基本知识。Kotlin的反射原理上跟Java是没差别的。他们出现差异的主要原因是Kotlin代码编译转为Java代码后,会发生变化,进而导致反射调用也会出现差别。以静态方法为例。object class 懒汉式单例companion object 静态内部类式单例然后菜单栏} }在Java中这些方法并不是static的,而是被转为了最简单的懒汉式单例类,这也解释了为什么object class在kotlin中是一个单例。

2022-12-09 18:15:00 2989 2

原创 Android dex动态加载(Kotlin版)

语言–KotlinJDK11SDK33AndroidStudio版本libaray项目打包成jarjar通过dx命令行工具转为dex.jardex.jar放到assets目录下App启动读取assets中的dex.jar复制到App可访问的文件夹中(建议内部存储的沙盒中,不受权限限制)实例化DexClassLoader加载dex获取ClassLoader对象通过ClassLoader.loadClass方法,获取想要执行的类。

2022-12-09 17:02:10 2981

原创 Win10解决:系统管理员已阻止你运行此应用

Win10安装msi软件包时出现错误提示如下:Win10家庭版没有组策略,输入,会提示找不到。解决如下:将文件重命名为:组策略.bat,一定要是.bat批处理格式。右键文件选择”以管理员身份运行“。等待安装完毕,即可【win+R】快捷键打开运行,输入打开组策略。靠谱的参考https://www.jb51.net/os/win10/737756.html

2022-12-02 12:12:19 5755

原创 Android 下载不同版本的platform-tools

复制到浏览器,回车即可下载28.0.2版本。右键下载成功的内容,复制链接地址。可以看到当前下载的是33.0.3版本。选择不同平台进行下载最新版本。下载完成后,进入下载内容。

2022-11-24 16:51:21 4882

原创 MAC 系统相关命令

【代码】MAC 系统相关命令。

2022-11-18 14:30:09 210

原创 Android kotlin-gradle-plugin升级到1.7.10引发的编译问题

从1.6.21升级到1.7.10引发了一系列报错

2022-08-30 11:58:45 6577

原创 Python 通过adb传输文件到手机

Python 通过adb传输文件到手机。1. 手机开启开发者模式2. USB或wifi连接到电脑调试3. 电脑安装了```adb```,并配置了环境变量

2022-08-11 16:03:29 1540

原创 Python 复制文件到指定路径

Python 复制文件到指定路径。

2022-08-11 10:36:09 2926

原创 Android App线程分析

App线程分析

2022-08-09 18:10:24 626

原创 Python Windows系统模拟键盘鼠标点击事件

Python Windows系统模拟键盘鼠标点击事件。

2022-08-09 17:40:52 865

原创 Windows批量修改文件名bat脚本

@echo offset /p w=请输入文件格式(即扩展名并以回车结束):set /p wf=请输入要修改的文字(以回车结束):set /p cb=请输入要改成的文字(若是删除则直接回车,以回车结束):for /f "delims=" %%i in ('dir /b /a-d "*.%w%"' ) do ( set str1=%%i setlocal EnableDelayedExpansionset "str1=!str1:%wf%=%cb%!"ren "%%i" "!str1!"en

2022-05-16 18:49:26 3402

原创 Android Hlit构建错误:Expected @HiltAndroidApp to have a value.

旧项目中使用Hlit后一直编译报错如下:Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin?stackoverflow上有人解决了这个问题:https://stackoverflow.com/questions/62887817/expected-hiltandroidapp-to-have-a-value-did-you-forget-to-apply-the-gradle-plu

2022-04-16 21:09:46 2931

原创 Android 玩转Glide4---缓存篇

前言系列文章专栏: 玩转Glide4概述加载相同的网络资源的时候,为了减少流量开销,优化加载速度,我们一般都会选择使用缓存。Glide作为最优秀的图片加载库,广受大家认可,必然也有着十分优秀的缓存机制。Glide缓存基于LRU原理实现了两种缓存:内存缓存MemoryCache硬盘缓存DiskCacheGlide是默认同时开启这两种缓存的。内存缓存MemoryCache基于LRU的缓存驱逐算法实现。默认开启,也可以调用skipMemoryCache(boolean skip)开启或者

2022-03-23 17:49:33 7957

原创 Android Glide4.x 注: [1] Wrote GeneratedAppGlideModule

问题使用Glide4.x想更换网络组件,引入了官方库okhttp集成库implementation 'com.github.bumptech.glide:okhttp3-integration:4.13.1'然后编译报错如下:> Task :app:kaptDebugKotlin FAILED注: [1] Wrote GeneratedAppGlideModule with: [com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlid

2022-03-23 15:48:39 4172

原创 Android Activity Results API自动化注册&极简使用方案

Activity Results APIActivity Result API提供了用于注册结果、启动结果以及在系统分派结果后对其进行处理的组件。—Google官方文档一句话解释:官方Jetpack组件用于代替startActivityForResult()/onActivityResult()。看完文档会发现,能代替startActivityForResult(),但也并没有好用到哪去。其实startActivityForResult()的调用并不麻烦,复杂页面的使用,做一下简单的封装即可。核

2022-03-04 14:29:22 4425

原创 Android页面关闭时自动隐藏软键盘

问题我们希望页面关闭时自动隐藏软键盘。关闭软键盘的代码很简单:调用InputMethodManager#hideSoftInputFromWindow即可。public boolean hideSoftInputFromWindow(IBinder windowToken, int flags)hideSoftInputFromWindow方法是有返回值boolean类型的。Activity关闭时经历的三个生命周期onPause()---onStop()---onDestory()我们分别deb

2022-02-18 15:14:03 2269

原创 Android ProgressBar传统样式

<ProgressBar style="@android:style/Widget.ProgressBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" />

2021-11-11 11:32:33 1523

原创 Python中文报错UnicodeDecodeError

Python脚本运行传值中文的时候,一直报错如下:UnicodeDecodeError: 'utf8' codec can't decode byte 0xc7 in position 0解决win10设置-时间和语言-语言-管理语言设置-更改系统区域设置-勾选bate版使用uft-8提供全球语言支持-重启参考https://ask.csdn.net/questions/724167...

2021-11-02 17:27:29 265

原创 Android Constraintlayout约束失效bug:ArrayLinkedVariables cannot be cast to SolverVariableValues

使用Constraintlayout开发页面时,出现了一个奇怪的bug。具体表现为:页面混乱,约束全部失效。控制台可以捕捉到报错信息如下:java.lang.ClassCastException: androidx.constraintlayout.solver.ArrayLinkedVariables cannot be cast to androidx.constraintlayout.solver.SolverVariableValues百度搜索了一圈,完全没有结果。无奈只能Google。

2021-06-10 17:04:04 762

原创 Android NavigationView头部点击事件无响应

一开始百度都说需要动态inflateHeaderView,然后通过findViewById取设置点击事件。如: View drawerView = navigationView.inflateHeaderView(R.layout.nav_header_main); CircleImageView account = (CircleImageView) drawerView.findViewById(R.id.account); account.setOnClickLis

2021-06-09 18:06:48 342

原创 SQL 根据A表往B表中添加默认数据

例如:有一个user表和message表,要根据user的用户id,在message表中根据每个id生成一条默认数据。SQLite写法INSERT INTO "message" ( "conversation", "msgid", "msgtime", "msgdirection", "isread", "isacked", "isdelivered", "islistened", "status", "msgbody", "msgtype", "bodytype", "se

2021-06-03 17:53:52 220

原创 Android IndexOutOfBoundsException: Inconsistency detected.

UncaughtException detected: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 5(offset:5).state:15 androidx.recyclerview.widget.RecyclerView{8623f12 VFE...... .F...... 0,0-1080,1713 #7f0a0c9b app:id/recyclerView}, adapter..

2021-05-31 15:46:46 1555 1

原创 Android获取敏感信息整改---基于Xposed的方法检测

前言前段时间315针对获取敏感的隐私信息(MAC地址)第一次要求整改时,我们使用了如下方案:将已知的友盟SDK放在同意隐私权限后再初始化。使用Hook&反射去拦截可能存在的其他第三方调用。但是整改提交审核20多天后还是被下架了,我们只能认为:Hook&反射去拦截的方案是无效的,检测时只要调用获取MAC的方法就会被认为是违规的。因此我们需要把App首次启动时所有会调用获取MAC的方法,放在同意隐私权限后再初始化。但是App启动时会默认初始化几十个库&第三方服务,我

2021-04-27 09:50:23 4636 4

原创 Android Glide4.x使用视频的第N帧作为封面

Glide4.xGlide4.x提供了frame(@IntRange(from = 0) long frameTimeMicros)方法,可以从提取视频的第N帧作为图片加载。缺点:如果是网络视频链接,第一次加载会非常慢。val options = RequestOptions() .diskCacheStrategy(DiskCacheStrategy.ALL) //获得第1帧图片 这里的第一个参数 以微秒为单位 .frame(1

2021-04-19 17:37:41 2086 3

windows老版图片查看器

windows系统恢复到老版的图片查看器,解压后,右键合并,弹出框点击确定。选择一张图片右键打开方式---选择其他应用---选择老版图片查看器勾选始终以此应用打开--确定。

2018-12-07

Android自定义输入法软键盘

Android自定义输入法软键盘,博客地址: https://blog.csdn.net/DeMonliuhui/article/details/84589936

2018-11-28

Kotlin学习手册电子书合集

Kotlin学习手册电子书合集,包含Kotlin in Action,kotlin-for-android-developers-zh,Kotlin官方参考文档中文版

2018-11-19

Re安卓文件浏览器

Re安卓文件浏览器,一个文件管理工具,可以打开多种格式的文件,如数据库等

2018-11-19

Okhttp3+MVP

Android Okhttp3+MVP简单实战 https://blog.csdn.net/DeMonliuhui/article/details/71246566

2018-10-31

RxJava+RetrofitDemo

RxJava2.0+Retrofit2.0结合的代码Demo,增加进度框,设置自缓存超时策略等,并对其进行合理的封装,方便使用。

2017-09-06

工厂模式代码

工厂模式代码

2017-08-30

Volley Demo

Volley Demo

2017-08-28

AIDL示例代码

AIDL的示例代码,包含服务端与客户端的代码。

2017-08-07

RecycleViewDemo

RecycleViewDemo

2017-05-12

原生代码实现网络请求

android原生代码实现网络请求

2017-05-08

OkhttpMVPDemo

Okhttp3网络请求框架+MVP设计模式简单实例

2017-05-05

BroadcastReceiver代码示例

BroadcastReceiver代码示例,Demo代码包括BroadcastReciver创建,动态与静态监听,数据传递,全局监听等。

2017-05-03

ServiceDemo

Service代码

2017-05-02

Service Demo

Service代码示例及生命周期Demo

2017-05-02

JUnit单元测试

JUnit单元测试

2017-04-29

Activity加载模式demo

Activity加载模式demo

2017-04-25

FragmentLifecycle

Fragment生命周期

2017-04-25

ImgViewPager

ImgViewPager滑动图片浏览器

2017-04-24

SQLiteOpenHelperDemo

SQLiteOpenHelper

2017-03-28

GreenGaoDemo

GreenGaoDemo

2017-03-27

SQLiteDemo

SQLiteDemo

2017-03-27

MVP模式简单demo

MVP demo

2017-03-24

Activity生命周期Demo

Activity生命周期Demo

2017-03-24

谷歌的Gson.jar和阿里的fastJson.jar

谷歌的Gson.jar和阿里的fastJson.jar

2016-10-27

Android模仿新浪微博

Android模仿新浪微博

2016-07-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除