![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发
toaksg
这个作者很懒,什么都没留下…
展开
-
【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 · 1525 阅读 · 0 评论 -
【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 · 1353 阅读 · 0 评论 -
【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 · 3158 阅读 · 0 评论 -
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 · 2646 阅读 · 1 评论 -
Android10及以上访问公有目录
公有目录指的是系统根目录下的Download、DCIM、Documents、Screenshots、Music等文件夹。本文说的**“访问”**是指:列举出某一公有目录下的所有文件、删除某个文件、保存文件到某个公有目录等意思。Android10以下按原来的File(path)方式,本文不表。Android10及以上可以使用MediaStore**“访问”*公有目录。如果我们在公有目录下只操作自己应用生成的文件,是不需要申请文件读写权限的。另外,公有目录下的文件在APP卸载后不会被删除,也能被其他应用访原创 2021-02-08 18:29:28 · 10779 阅读 · 11 评论 -
【Android】获取网络时间
有时候我们需要获取较为准确的当前时间,可以通过网络获取网络时间。毕竟手机系统的时间能够被用户所更改。方法一:叫后端同学出接口,返回你想要的当前时间。方法二:通过访问某个网站,获取它的服务器时间。(注意时区问题,比如要获取东八区时间,那就访问服务器在国内、且服务器时间是正确的,网站。)下面是方法二的实现代码,getNetworkTime函数是传一个网站的地址,返回该网站的时间。但是为了可靠性,防止个别网站有坑,导致获取到的时间有误,所以又写了个getCurrentTimeMills函数,同时获取两个网原创 2021-01-22 20:49:39 · 3507 阅读 · 0 评论 -
【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 · 3636 阅读 · 0 评论 -
Android开发中的图片压缩
为什么要压缩随着智能手机技术进步,手机摄像头的像素越来越高,目前主流水平都在四千多万到六千多万像素之间,更有甚者,个别手机的摄像头竟高达一亿像素。这些手机拍照成片所占的存储空间也越来越大,几千万像素的手机成像图片是十几M,一亿像素的jpg成片也高达三十M左右。在目前的高像素时代,直传十几M以上的原图会带来一系列的问题:1.上传时间过久带来的失败率高。用户侧上传带宽往往较小,且网络环境错综复杂,不稳定掉线时有发生。2.服务端侧,如果不走CDN直传服务器,带宽、流量、性能、磁盘开销大;走CDN则磁盘和流原创 2021-02-08 14:09:58 · 1602 阅读 · 0 评论 -
【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 · 421 阅读 · 0 评论 -
【Android】监听媒体按键按下--响应媒体按钮
媒体按钮是 Android 设备和其他外围设备上的硬件按钮,例如蓝牙耳机或者线控耳机上的暂停/播放按钮。当用户按下媒体按钮时,Android 会生成 KeyEvent,其中包含用于标识按钮的键码。可先阅读一下官方的文档,了解下整个流程和机制:官方文档:响应媒体按钮本文是监听播放、上一首、下一首等按键事件的代码实现。不同版本的实现方式,差异有点大,比较碎片化。本人肤浅地认为Android5.0以下通过广播的方式接收,5.0及以上通过MediaSession,官方也封装了MediaSessionComp原创 2020-09-07 17:17:24 · 4792 阅读 · 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 · 3717 阅读 · 0 评论 -
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 · 5993 阅读 · 0 评论 -
Android View Binding使用介绍
前言Android Studio稳定版发布了3.6版本,带来了一些新变化:首先外观,启动页变了,logo改了,更显现代化;增加Multi Preview功能,能同时预览多个尺寸屏幕的显示效果;模拟器支持多屏;也终于支持全新的视图绑定组件ViewBinding;等。之前我们与视图交互的方式有findViewById、kotlin中引入Android Kotlin Extensions后直接通过i...原创 2020-02-26 10:39:37 · 10384 阅读 · 7 评论 -
Android解决EditeText内容右对齐时光标位于hint之前的问题
当EditText的gravity设置为end或者right时,在某些手机上输入框的光标位置会显示在hint文字之前,如下图:如果我们想光标的位置在hint文字后面,即最右边,解决的方法有:方法一:比较省事的做法,设置EditText的textCursorDrawable属性为空:android:textCursorDrawable="@null"效果如下图,光标位置在最后面了。如...原创 2019-10-27 14:08:04 · 1868 阅读 · 0 评论 -
Android图片底部居中的ImageView
原生ImageView可设置的scaleType有fitCenter、fitEnd、fitXY、centerInside等。有时候,会有"fitBottom"+centerInside的需求。效果如下图:ps:控件的background设置为红色,用于感知控件宽高。实现的原理是重写ImageView的onDraw方法。在绘制drawable的时候,如果图片宽高小于控件的宽高,那么就将图片...原创 2019-08-27 11:44:15 · 2990 阅读 · 0 评论 -
Android打包时排除assets文件夹下的某些文件
assets文件夹下的一些文件在生产包中是用不到的,为了缩小安装包体积,我们可以在打包时删掉这些文件。在build.gradle文件中:android.applicationVariants.all { variant -> if (variant.buildType.name == 'release') {//release版本 variant.mergeAss...原创 2019-06-11 11:21:35 · 7590 阅读 · 0 评论 -
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 · 5238 阅读 · 1 评论 -
Android提取HTML代码内的所有文字内容
需求是:TextView只显示HTML里的纯文字内容,去掉CSS样式、超链接、图片等等。解决方法:用正则表达式匹配并清除掉各种HTML标签。嗯,就这样干。原创 2017-06-03 19:58:09 · 2844 阅读 · 3 评论 -
Android设置默认应用程序、清除默认应用程序
要将系统默认的WiFi连接程序或者浏览器更改为我们自己的应用,可以通过隐式意图来实现。Intent设置相应的Action,以WiFi为例:Intent intent = new Intent("android.settings.WIFI_SETTINGS");原创 2017-05-22 23:43:00 · 14586 阅读 · 1 评论 -
Android自定义圆角条形图表
安卓的图表框架比较常用的有HelloChart和MPAndroidChart。HelloChart据说性能优化比较好,但是我根据我的个人经验,MPAndroidChart能实现的样式比较多。不得不说的是,在实际需求中,无论用哪个框架,把图表样式改得跟UI图一致都要费很大很大很大的力气。当框架无法满足UI需求的效果时,就需要自定义了。原创 2016-10-05 15:03:19 · 1324 阅读 · 1 评论 -
Android清理缓存工具类
安卓APP中清理缓存功能,不单单是系统优化工具之类的软件才有的。。。普通的APP也很常见要有显示缓存大小、清理缓存的功能。这种需求也相对比较简单,只是操作本应用的缓存目录罢了。安卓应用的缓存目录一般有两个,一个在系统分区–本应用文件夹的cache目录,另一个在外部存储区域(比如SD卡或者非系统分区)–本应用文件夹的cache目录(不一定是这个目录,视开发者或者用户设置而定)。原创 2016-09-21 13:31:52 · 4575 阅读 · 1 评论 -
Android沉浸式状态栏实现方案
何为沉浸式状态栏?从效果上看,状态栏支持填充控件了,状态栏的文字位于填充的控件之上。沉浸式状态栏是Android4.4以后出来的新特性……原创 2016-09-11 21:48:14 · 806 阅读 · 0 评论 -
安卓UI图px标注适配攻略:批量转化px为dp
我们知道,Android的尺寸单位一般采用dp或者sp,然而有时候我们遇到的UI设计图给的尺寸标注却是px的,这显然是给iOS画的UI。安卓设备的多样性决定了我们绝对不能将控件的尺寸大小直接设置为UI图上的px值。那该如何解决呢?愤愤不平地去找UI工程师出一套安卓的标注?条件允许的话你当然可以这样干,但其实我们还有另外一种快准不知道狠不狠的解决方案:px转dp。原创 2016-09-07 23:33:51 · 11610 阅读 · 5 评论 -
Android创建通知栏Notification(使用新API)
安卓创建Notification(通知栏)通知,网上搜出来的API都比较陈旧,在IDE中提示过期,虽然也能实现功能吧,但是我们得跟上时代对不? 目前来说,新的未过时,兼容性好的api代码...原创 2016-08-24 15:18:43 · 2116 阅读 · 1 评论 -
安卓WebView中全屏播放网页视频
Android中WebView是支持播放网页视频的,但是要全屏播放网页中的视频,在Android 4.0以下,能支持,4.0以上就有点鸡肋了。解决方法是需要重写WebView和WebChromeCient,实现方式是当全屏的时候隐藏掉界面的其他控件,使用一个占满屏幕宽高的ViewGroup来承载视频的播放。原创 2016-08-23 14:13:54 · 5132 阅读 · 1 评论 -
安卓ListView的item中含有EditText,动态添加item时EditText值的保存
要时刻保存EditText的值,我们需要给EditText设置一个文字改变时的监听器(addTextChangedListener),当文字发生改变后,我们获取EditText的值并存于itemObject的某个属性中。这里千万要脚下留心,**在EditText调用setText之前,一定要把textChangedListener移除掉**,否则setText后又会多次调用监听器里面的方法,造成值的清空。原创 2016-08-18 00:49:35 · 7922 阅读 · 10 评论 -
Android自定义流式布局/自动换行布局
Android自定义流式布局/自动换行布局最近,Google开源了一个流式排版库“FlexboxLayout”,功能强大,支持多种排版方式,如各种方向的自动换行等,具体资料各位可搜索学习^_^。由于我的项目中,只需要从左到右S型的自动换行,需求效果图如下: 使用FlexboxLayout这个框架未免显得有些臃肿,所以自己动手写了一个流式ViewGroup。原创 2016-08-14 23:21:04 · 8118 阅读 · 3 评论 -
Hawk--Andorid安全、简单的Key-Value存储
安卓的存储方案有文件存储、数据库、SharedPreferences等。我们通常也是采用上述的几种存储方案来存储应用数据,比如用户信息、应用设置等。然而由于安卓平台的开放性,一些用户通过root等方式,能直接查看甚至修改我们存储的应用数据,达到破解软件的目的,这是开发者最不愿意看到的。还能不能好好玩耍了呢?如何是好呢?数据该怎么存呢?当然是加密存储啦!Hawk是一个安全、简单的键值对存储框架。原创 2016-08-18 15:52:36 · 4514 阅读 · 0 评论 -
Android获取手机品牌信息
本文的意义在于记录一下主流手机的Build.MANUFACTURER,就不用找手机去跑程序打印log了。 String name = Build.MANUFACTURER; L.e(TAG, "MANUFACTURER --- name : " + name); switch (name) { case "HUAWEI": ...原创 2018-03-09 10:40:25 · 2815 阅读 · 0 评论 -
Android帧动画框架
高效省内存的播放序列帧控件,支持从文件,resource,Assets读取序列帧,内存复用,读取多张只需一张图片内存,流式API,一行代码即可实现序列帧动画。此框架基于 https://github.com/Mr-wangyong/ImageFrame 改进,增加了以下功能:1、支持从Assets中获取序列帧2、支持设置播放次数3、支持设置动画播放结束后的停留画面4、支持监...原创 2018-03-30 02:25:54 · 988 阅读 · 0 评论 -
解决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 · 13054 阅读 · 0 评论 -
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 · 17673 阅读 · 3 评论 -
AES加解密工具类,Android端和服务端加解密一致
别处找的AES工具类太坑,用过之后发现明明秘钥一致,前端和后端加解密出来的结果却不一样。下面这个工具类通过了验证,秘钥一致则两个端的加解密一致。import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import java.security.Inv...原创 2018-08-11 16:57:32 · 1966 阅读 · 5 评论 -
解决ScrollView嵌套ListView、GridView默认不停留顶部的问题
ScrollView嵌套了ListView或者GridView时,ListView等子View有时候会抢占焦点,导致ScrollView会自动滑动至其已获取焦点的子控件的顶部。解决方法:可以手动scrollTo()或者smoothScrollTo()。觉得上面方法不好玩不爽的话,那就重写ScroolView的computeScrollDeltaToGetChildRectOnScreen方法原创 2017-11-28 21:20:05 · 304 阅读 · 0 评论