- 博客(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-22 23:54:43
177
原创 Android提取HTML代码内的所有文字内容
需求是:TextView只显示HTML里的纯文字内容,去掉CSS样式、超链接、图片等等。解决方法:用正则表达式匹配并清除掉各种HTML标签。嗯,就这样干。
2017-06-03 19:58:09
2895
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人