自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 编译Android内核驱动Makefile文件编写

有些板子要显式指定ARCH才行,因为它们kernel目录下的Makefile文件里只实现了。的操作,不传ARCH会走到else里,从而编译error。

2024-05-02 02:41:44 130 1

原创 【Android】反编译APK及重新打包

其中,myapp.apk 是要反编译的 APK 文件名。执行该命令后,Apktool 会自动解包 APK 文件,并将解包后的文件保存到一个新的目录中。其中,myapp 是解包后的文件夹名,myapp_new.apk 是重新打包后的 APK 文件名。首先,需要下载一个 APK 反编译工具,例如 Apktool。)上下载最新版本的 Apktool,也可以使用包管理器来安装。1.下载 APK 反编译工具。3.重新打包 APK 文件。4.重新签名 APK 文件。2.反编译 APK 文件。

2024-02-26 12:51:39 2680

原创 Endpoint Security VPN(CheckPoint)禁止开机自动打开(macOS)

Endpoint Security VPN (CheckPoint) 在Mac OS下禁止开机自启动。

2023-06-06 14:11:33 1203

原创 OpenWrt扩容Overlay

OverlayFS是一种堆叠文件系统。如图:(图片源自网络)如果系统的软件包空闲空间不够,则需要扩容。本文的方案是在固件包上进行扩容。在镜像文件后面增加空数据,比如增加5GB:dd if=/dev/zero bs=1G count=5 >> 固件.img此时查看固件文件大小,可看出文件大小增加了5G。现在执行分区命令:parted 固件.img查看分区情况,以确定需要扩容的分区号:print以上图为例,应选择300M的分区号,比如是2:resizepart 2 10

2022-05-23 20:59:23 6130 2

原创 【Android】Apk签名及zipalign对齐

zipalign对齐:zipalign -v 4 源文件 要生成的文件检查apk有没有zipalign对齐:zipalign -c -v 4 被检查的apk文件使用apksigner签名:apksigner sign --ks 密钥文件路径 --ks-key-alias 密钥别名 x x x.apk

2022-02-17 16:23:42 1516

原创 React Native按指定渠道(Build Variants)运行Android

默认是运行debug包的,如果项目中定义了多个Build Variants,那么会报此错误:Task 'installDebug' not found in project ':app'.解决方法:运行命令加个参数–variant ,值是:渠道名称+Debug/Release。如下:react-native run-android --variant channelDebug...

2022-01-21 14:18:00 2908

原创 【React Native】解决报错:The development server returned response error code: 500

项目红屏报错:The development server returned response error code 500解决方法如下:清缓存。macOs:rm -rf $TMPDIR/react-*; rm -rf $TMPDIR/haste-*; rm -rf $TMPDIR/metro-*; watchman watch-del-allWindows:react-native start --reset-cache...

2022-01-19 14:38:23 1666

原创 小程序压缩图片尺寸

有api是压缩质量的:wx.compressImage({ src: originPath, // 图片路径 quality: 90, // 压缩质量 success: function (res) { res.tempFilePath//结果路径 } })压缩尺寸没有api,需要自己实现。可使用canvas绘制图片,然后保存。设置画布的大小,相当于控制了图片尺寸。实现步骤:1.在wxml上定义画布:(不支持动态创建canvas)<!--

2022-01-06 16:07:16 1851

原创 【Android】解决aab上传Google Play后下载语言文件缺失的问题

官网(https://developer.android.com/guide/app-bundle?hl=zh-cn)有对aab的描述:Google Play 会使用您的 App Bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行您的应用。有些手机只内置了中文、英文等几种,如果从Google Play下载应用,那么Google Play会剔除掉其他(它认为是多余的)语言资源文件,从而导致应用切换语言不成功。解决方法:gradle那里可以配置是否

2022-01-04 10:57:35 3651

原创 Android签名aab文件

jarsigner -verbose -keystore 签名文件路径 -digestalg SHA-256 -sigalg SHA256withRSA -storepass 密码 -keypass 密码 aab文件路径 别名(key alias)ps:加上参数 -digestalg SHA-256 -sigalg SHA256withRSA,才能被Google Play识别。

2021-12-27 10:49:31 2849 1

原创 Android10及以上访问公有目录

公有目录指的是系统根目录下的Download、DCIM、Documents、Screenshots、Music等文件夹。本文说的**“访问”**是指:列举出某一公有目录下的所有文件、删除某个文件、保存文件到某个公有目录等意思。Android10以下按原来的File(path)方式,本文不表。Android10及以上可以使用MediaStore**“访问”*公有目录。如果我们在公有目录下只操作自己应用生成的文件,是不需要申请文件读写权限的。另外,公有目录下的文件在APP卸载后不会被删除,也能被其他应用访

2021-02-08 18:29:28 12199 11

原创 Android开发中的图片压缩

为什么要压缩随着智能手机技术进步,手机摄像头的像素越来越高,目前主流水平都在四千多万到六千多万像素之间,更有甚者,个别手机的摄像头竟高达一亿像素。这些手机拍照成片所占的存储空间也越来越大,几千万像素的手机成像图片是十几M,一亿像素的jpg成片也高达三十M左右。在目前的高像素时代,直传十几M以上的原图会带来一系列的问题:1.上传时间过久带来的失败率高。用户侧上传带宽往往较小,且网络环境错综复杂,不稳定掉线时有发生。2.服务端侧,如果不走CDN直传服务器,带宽、流量、性能、磁盘开销大;走CDN则磁盘和流

2021-02-08 14:09:58 1706

原创 【Android】获取网络时间

有时候我们需要获取较为准确的当前时间,可以通过网络获取网络时间。毕竟手机系统的时间能够被用户所更改。方法一:叫后端同学出接口,返回你想要的当前时间。方法二:通过访问某个网站,获取它的服务器时间。(注意时区问题,比如要获取东八区时间,那就访问服务器在国内、且服务器时间是正确的,网站。)下面是方法二的实现代码,getNetworkTime函数是传一个网站的地址,返回该网站的时间。但是为了可靠性,防止个别网站有坑,导致获取到的时间有误,所以又写了个getCurrentTimeMills函数,同时获取两个网

2021-01-22 20:49:39 3800

原创 【Android】根据蓝牙信号强度计算出距离

根据蓝牙的RSSI值(信号强度),估算出大概距离。class BTDistanceUtil { companion object { const val RSSI_1M: Double = 50.0//发射端和接收端相隔1米时的信号强度 const val N_VALUE: Double = 2.5//环境衰减因子 /** * 根据rssi值估算出距离 * @param rssi信号强度 * @

2020-11-06 11:24:44 4014

原创 解决frp内网穿透vsftpd报227错误

使用frp来内网穿透ftp,外网ftp客户端使用被动模式进行连接ftp的时候报:227 Entering Passive Mode ...frp目前还不支持ftp协议,它在转发ftp被动模式的数据连接所需要的ip,转发的是:frpc的内网ip或者是127.0.0.1。为解决这个问题,需要指定vsftpd被动模式的ip地址。这样frp在转发的时候,会将这个指定的ip给外网ftp客户端。编辑 /etc/vsftpd/vsftpd.conf,添加或者修改成下面的:#关闭ip的安全检查pasv_pro

2020-10-31 15:21:31 1656 4

原创 【Android】解决DataBinding项目apk打包UTF-8报错问题

build控制台输出的错误信息如下:Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException据说是xml使用了中文的原因造成的,改成string资源引用即可。不方便修改的话,则可以设置系统环境变量:变量名:JAVA_TOOL_OPTIONS变量值:-Dfile.encoding=UTF-8然后重启Android Studio就行了。另外,apk的文件名有中文,AS直接运行安装失败

2020-09-30 16:59:40 486

原创 【Android】监听媒体按键按下--响应媒体按钮

媒体按钮是 Android 设备和其他外围设备上的硬件按钮,例如蓝牙耳机或者线控耳机上的暂停/播放按钮。当用户按下媒体按钮时,Android 会生成 KeyEvent,其中包含用于标识按钮的键码。可先阅读一下官方的文档,了解下整个流程和机制:官方文档:响应媒体按钮本文是监听播放、上一首、下一首等按键事件的代码实现。不同版本的实现方式,差异有点大,比较碎片化。本人肤浅地认为Android5.0以下通过广播的方式接收,5.0及以上通过MediaSession,官方也封装了MediaSessionComp

2020-09-07 17:17:24 5315 3

原创 【Android】获取已连接的经典蓝牙设备的名称和地址

经典蓝牙,获取已连接的蓝牙设备的信息。private var mBluetoothFlag = -1private var mBluetoothProxy: BluetoothProfile? = nullprivate val mBluetoothProxyListener = object : BluetoothProfile.ServiceListener { override fun onServiceDisconnected(profile: Int) { } ov

2020-09-07 14:28:29 3833

原创 Android C/C++输出日志到logcat

Android Studio中我们习惯了在logcat查看日志,c/c++的printf()在logcat中并不会显示。本文的jni环境是cmake+ndk。首先,CMakeLists.txt中导入Android的log库:find_library(log-lib log)target_link_libraries( ... ${log-lib} )使用方式一:在c/c++文件中引入android/log.h头文件:#include <a

2020-06-25 19:21:40 7083

原创 Android View Binding使用介绍

前言Android Studio稳定版发布了3.6版本,带来了一些新变化:首先外观,启动页变了,logo改了,更显现代化;增加Multi Preview功能,能同时预览多个尺寸屏幕的显示效果;模拟器支持多屏;也终于支持全新的视图绑定组件ViewBinding;等。之前我们与视图交互的方式有findViewById、kotlin中引入Android Kotlin Extensions后直接通过i...

2020-02-26 10:39:37 10468 7

原创 Android解决EditeText内容右对齐时光标位于hint之前的问题

当EditText的gravity设置为end或者right时,在某些手机上输入框的光标位置会显示在hint文字之前,如下图:如果我们想光标的位置在hint文字后面,即最右边,解决的方法有:方法一:比较省事的做法,设置EditText的textCursorDrawable属性为空:android:textCursorDrawable="@null"效果如下图,光标位置在最后面了。如...

2019-10-27 14:08:04 2056

原创 Android图片底部居中的ImageView

原生ImageView可设置的scaleType有fitCenter、fitEnd、fitXY、centerInside等。有时候,会有"fitBottom"+centerInside的需求。效果如下图:ps:控件的background设置为红色,用于感知控件宽高。实现的原理是重写ImageView的onDraw方法。在绘制drawable的时候,如果图片宽高小于控件的宽高,那么就将图片...

2019-08-27 11:44:15 3062

原创 安装frp实现内网穿透

首先你要有一台服务器或者VPS,还要有个域名,内网主机一台。服务器或者VPS、域名的购买,本文不赘述。本文所用的服务端是Linux系统,客户端是windows系统。服务端(Linux)搭建步骤1:下载服务端的frp:使用wget命令下载。如果wget command not found,则先安装wget,安装命令如下:yum -y install wget下载frp...

2019-06-18 23:37:56 9463 2

原创 Android打包时排除assets文件夹下的某些文件

assets文件夹下的一些文件在生产包中是用不到的,为了缩小安装包体积,我们可以在打包时删掉这些文件。在build.gradle文件中:android.applicationVariants.all { variant -> if (variant.buildType.name == 'release') {//release版本 variant.mergeAss...

2019-06-11 11:21:35 7939

原创 git仓库过大导致clone或者checkout失败的解决方法

码云上,由于仓库分支过多,提交历史超过了1G,直接clone会报错:fatal: early EOFfatal: the remote end hung up unexpectedlyfatal: index-pack failederror: RPC failed; curl 18 transfer closed with outstanding read data remaining...

2019-04-24 23:10:17 9963

原创 MD5加密工具类--加密byte数组或字符串

Java版的加密byte数组在网上很难搜索出来。。import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Util { private static char hexDigits[] = {'0', '1', '2', '3', '4', '5'...

2018-09-22 15:21:44 5339 1

原创 Putty/WinSCP在Windows下存储host key的地方

把全盘的目录找了个遍,没有发现任何有关Putty的缓存文件夹或文件。所以,往注册表找找?嗯,Putty把host key缓存到注册表了。WinSCP也把host key缓存到注册表了。

2018-08-30 00:05:41 1791

原创 AES加解密工具类,Android端和服务端加解密一致

别处找的AES工具类太坑,用过之后发现明明秘钥一致,前端和后端加解密出来的结果却不一样。下面这个工具类通过了验证,秘钥一致则两个端的加解密一致。import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import java.security.Inv...

2018-08-11 16:57:32 2012 5

原创 树搜索:深度优先和广度优先

在Android开发中,有时候会遇到多层级列表的显示,如下图,可用RecyclerView实现。其数据源的数据结构是一种树状结构,如下图:现在有两种方法来遍历这种数据结构。深度优先搜索 其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。举例说明之:据上图,我们从A点开始发起深度优先搜索,则可能得到如下的访问过程:A→B→E,没有...

2018-05-07 17:48:02 7166 1

原创 Java版CRC8和CRC16工具类

搞物联应用,通信时常用CRC校验。下面是Java版的CRC算法工具类,可直接使用。CRC8工具类public class CRC8Util { static byte[] crc8_tab = {(byte) 0, (byte) 94, (byte) 188, (byte) 226, (byte) 97, (byte) 63, (byte) 221, (byte) 131,...

2018-05-04 11:35:25 17826 3

原创 解决FLAG_ACTIVITY_REORDER_TO_FRONT方式启动Activity,按返回键会出现卡死(ANR)的问题

FLAG_ACTIVITY_REORDER_TO_FRONT的作用是:如果栈中已经存在某Activity,启动该Activity而不重新创建实例,只是将该Activity移到栈顶并显示,则可以这样start: Intent intent = new Intent(this, target.class); intent.addFlags(Intent.FLAG_ACTIVI...

2018-04-03 23:10:24 13468

原创 Android帧动画框架

高效省内存的播放序列帧控件,支持从文件,resource,Assets读取序列帧,内存复用,读取多张只需一张图片内存,流式API,一行代码即可实现序列帧动画。此框架基于 https://github.com/Mr-wangyong/ImageFrame 改进,增加了以下功能:1、支持从Assets中获取序列帧2、支持设置播放次数3、支持设置动画播放结束后的停留画面4、支持监...

2018-03-30 02:25:54 1017

原创 Android获取手机品牌信息

本文的意义在于记录一下主流手机的Build.MANUFACTURER,就不用找手机去跑程序打印log了。 String name = Build.MANUFACTURER; L.e(TAG, "MANUFACTURER --- name : " + name); switch (name) { case "HUAWEI": ...

2018-03-09 10:40:25 2872

原创 解决ScrollView嵌套ListView、GridView默认不停留顶部的问题

ScrollView嵌套了ListView或者GridView时,ListView等子View有时候会抢占焦点,导致ScrollView会自动滑动至其已获取焦点的子控件的顶部。解决方法:可以手动scrollTo()或者smoothScrollTo()。觉得上面方法不好玩不爽的话,那就重写ScroolView的computeScrollDeltaToGetChildRectOnScreen方法

2017-11-28 21:20:05 336

原创 栈和队列

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2017-11-25 20:17:06 284

原创 插入排序

将一个元素在已排好序的数组里选择合适的位置插入。若将数组的第一个元素作为最初已排序部分,则可以对一个数组进行排序。

2017-11-24 14:13:58 201

原创 选择排序

第一轮:第一个元素和它后面的元素比较,符合条件就交换位置。第二轮:第二个元素和它后面的元素比较,符合条件就交换位置。以此类推。以排正序为例,每比较一轮,小的元素都置在前面,比较次数也依次减少。这个没有泡泡上冒翻滚的感觉,画面是拿出最小的,拿出第二小的,拿出第三小的……有针对性地挑选。

2017-11-22 23:54:43 177

原创 冒泡排序

两个相邻的元素互相比较,符合条件就交换位置。

2017-11-22 22:20:43 215

原创 二分法查找

用二分法查找数组中某一个元素的下标。ps:二分法查找只适用于有序数组。

2017-11-22 21:20:30 594

原创 Android提取HTML代码内的所有文字内容

需求是:TextView只显示HTML里的纯文字内容,去掉CSS样式、超链接、图片等等。解决方法:用正则表达式匹配并清除掉各种HTML标签。嗯,就这样干。

2017-06-03 19:58:09 2895 3

空空如也

空空如也

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

TA关注的人

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