![](https://img-blog.csdnimg.cn/2021022109160684.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
android
文章平均质量分 85
android相关内容
潇曜
帅帅的android开发工程师~
展开
-
巧用CountDownLatch实现多线程并行工作
由于手机文件夹目录众多,单线程遍历全部文件夹找出所有的安装包会比较费时,但是假如开启多个线程并行去搜索不同的文件夹,然后再将结果汇总起来返回,那么效率就会明显有所提高。然而开启多个线程去搜索是很容易实现,但是由于每个线程耗时不同,有些线程搜索完毕了,但是有些线程可能还在搜索,怎么确保所有的线程都搜索完毕再把结果汇总起来返回呢?这时候借助这个类就能轻易地实现原创 2023-08-09 17:59:27 · 983 阅读 · 0 评论 -
ConstraintLayout新手玩家避坑指南
对于之前常用、布局的小伙伴,初次使用,因为之前使用习惯的问题,很容易出现各种意想不到的问题的,下面主要列举一下新手常见的坑。原创 2022-11-10 17:54:30 · 1378 阅读 · 1 评论 -
Android应用隐私合规检测实现方案
Xposed Hook实现Android应用隐私合规检测原创 2022-07-25 20:31:46 · 3277 阅读 · 0 评论 -
Openssl3.0 Android平台编译教程
【前言】 Android要想实现RSA/AES之类的加密,最简便的方式是直接使用Android提供的Java层api,但是使用Java层提供的Api去加密,别人很容易通过反编译看到你的加密逻辑原创 2022-04-27 20:13:48 · 4450 阅读 · 6 评论 -
Android 7.0+模拟器Fiddler抓包详细教程
【前言】 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的fiddler用户证书的,所以你就没法抓到应用发起的https请求,然后你在fiddler就会看到一堆200 HTTP Tunnel to xxx.xxx.xxx:443的请求日志,这些都是没有成功抓取的https请求,下面重点介绍一下各种解决方案,相信总有一款解决方案适合你~【懒人快速解决原创 2022-04-22 19:47:43 · 29462 阅读 · 43 评论 -
Android TextView设置跑马灯效果
【前言】 在Textview设置的宽度有限,而需要显示的文字又比较多的情况下,往往需要给Textview设置跑马灯效果才能让用户完整地看到所有设置的文字,所以给TextView设置跑马灯效果的需求是很常见的一、新手设置跑马灯效果...原创 2022-01-25 19:50:55 · 19688 阅读 · 3 评论 -
手游SDK知识详析
一、SDK概念 SDK ,即 Software Development Kit,软件开发工具包的意思,通俗点说,就是辅助开发某一类软件的相关文档、范例和工具的集合,不过我们平时所说到的Sdk其实会更加简单一些,就是一个封装了各种功能模块的依赖库与对接文档罢了,比如,我们接入腾讯语音SDK,那么我们软件就具备了实时语音功能二、游戏SDK涉及对象游戏研发:也称CP(Content Provider, 即内容提供商),开发游戏的公司...原创 2021-09-24 20:15:18 · 7039 阅读 · 4 评论 -
Android V2签名与校验原理分析
【前言】 V1签名作为一种历史悠久的签名方式,弊端也是比较明显的,一方面由于V1签名是对Apk内的单个文件逐一计算摘要进行签名校验的,所以要是Apk内的文件比较多,计算速度是非常慢的,同时又因为只对单个文件的完整性进行校验,那么对apk压缩包包体进行篡改的话,签名依然还是可以校验通过,完整性的校验工作做得不够到位。到了Android 7.0,V2签名方式就应运而生,V2签名一种全文件签名方案,它对压缩包的三大基本组成部分:数据区、中央目录记录区、中央目录记录结尾区进行分块,每小块 1MB,然后并行计原创 2021-09-02 20:08:27 · 3499 阅读 · 1 评论 -
Android V1签名与校验原理分析(全网最全最详细)
【前言】 Android Apk V1签名方式是一开始时使用的签名方案,不过V1签名方式也称作jar签名,顾名思义,就是V1签名并不是Android独有的签名方式,而且在Android还没出来时候,Jar 包也是用这种方式进行签名检验的,直到Android 7.0开始才推出V2签名,这个就是Android独创的签名方案,签名与校验的效率方面提高很多,后面Android 9.0又推出了V3签名,再到Android 11推出了V4签名方案一、V1原创 2021-07-21 19:55:56 · 3691 阅读 · 7 评论 -
Android应用判断是否运行在鸿蒙/Harmony系统手机上
【前言】 最近提出统计有多少鸿蒙系统用户的需求,就研究了一下判断鸿蒙系统的方法,刚开始研究鸿蒙系统的Api文档时,发现ohos.aafwk.ability.Ability应该是鸿蒙系统中比较基础的类,是鸿蒙应用所具备能力的抽象,也是应用程序的重要组成部分,一开始是打算通过判断是否存在这个类来区分是Harmony系统或者是Android系统, 测试发现鸿蒙系统确实是存在这个类,但是尴尬的是非鸿蒙系统的荣耀或者华为手机也存在这个类,初步猜想应该是华为原创 2021-07-12 15:17:29 · 4791 阅读 · 6 评论 -
Default Activity not found问题解决方案
1、今天运行一个android项目时候,一直报错说:Default Activity not found:同时,Android Studio上也显示红色叉叉,没法正常编译反复检查AndroidManifest.xml,里面确实已经声明了默认启动的Activity:2、初步猜想:会不会是AS缓存导致的,尝试clean项目,然后同步一下,重新build一下,结果还是提示上述的错误3、进一步猜想:会不会AS抽风了,之前偶尔会遇到这种情况,尝试点击刷新缓存重启一下AS, 然而还是报同样的错误4、原创 2021-02-21 15:11:11 · 3198 阅读 · 0 评论 -
Android窗体泄露问题解决
【问题起因】 竖屏的MainActivity中有个view是通过WindowManager addView添加上去(onWindowChanged中调用),在某个fragment是需要请求设置为横屏: getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);,这样MainActivity就会重建,即经历onPause - > onStop -> onDestory - >onCr原创 2020-10-19 15:18:39 · 837 阅读 · 1 评论 -
Android Studio 多aar合并
【前言】 一般Android Studio 的library module,点击build或者assemble,会在该module的build/outputs/aar目录下生成.aar文件,但是这aar文件只会把依赖的jar包打进去,依赖的aar或者project是不会打包进去,这样有时候提供给别人项目时候就比较麻烦,还得复制一堆的aar过去给别人,后来,发现一个Android Studio的插件:fat-aar-android支持合并依赖的aar以及依赖的原创 2020-10-17 14:16:13 · 2380 阅读 · 3 评论 -
Android项目发布到本地仓库共享给多个项目使用
【前言】 对于大多数人来说,要把一个Android项目作为依赖库提供给另一个Android项目使用时,都是先编译成aar或者jar,然后复制到另一个项目中,这样子比较繁琐,而且若是作为依赖库的Android项目,还依赖了第三方项目的,打包成aar或者jar之后,另一个项目依然还是需要自己手动添加aar所依赖的第三方项目库。那么,是否有更好的解决办法呢?当然就是把你的Android项目发布的maven仓库中,因为没有搭建自己的线上maven仓库,这.原创 2020-09-17 16:51:17 · 808 阅读 · 0 评论 -
Android代码控制关闭软键盘的骚操作
1、一般在Android代码控制软键盘关闭都是像下面这样实现: public static void hideKeyBoard(Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); //Find the currently focused view, so we can gr原创 2020-09-17 11:18:07 · 1664 阅读 · 0 评论 -
Android Studio创建运行Java SE项目
【前言】 Android Studio以前旧版本需要创建一个Java SE项目,来跑单纯的Java程序是比较麻烦,最近把Android Studio升级到4.0.+版本之后,发现创建一个Java SE项目跟在Eclipse上创建一样简便了,接下来,咱们一起来看看怎么快速地在Android Studio中创建一个Java SE项目吧!1、打开Android Studio之后,点击File-New-New Module注意:这里一定要是New M原创 2020-09-17 10:19:20 · 1061 阅读 · 0 评论 -
Java 字节码编译为Dex,d8比dx更好用!
【前言】d8 是一种命令行工具,Android Studio 和 Android Gradle 插件使用该工具来将项目的 Java 字节码编译为在Android 设备上运行的 DEX 字节码,该工具支持您在应用的代码中使用 Java 8 语言功能。 d8 还作为独立工具纳入了Android 构建工具 28.0.1 及更高版本中:android_sdk/build-tools/version/’1、d8基本用法 d8 [options] <input-files>其中,<i原创 2020-08-08 15:31:07 · 4150 阅读 · 0 评论 -
Android setTheme设置透明主题无效
【问题现象】1、首先,你在AndroidManifest.xml中声明一个activity,不给application或者activity设置android:theme, 例如这样: <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon=原创 2020-07-24 14:49:23 · 6096 阅读 · 3 评论 -
拉取小米MIUI系统的framework.jar实践之旅
【前言】最近在研究插件化技术的实现,本来其他品牌的机子,测试得挺好,后来测试一下小米的机子,发现Resources替换出现问题,试着断点调试一下发现,小米MIUI系统自己继承Resources重写了自己的MiuiResources类来作为资源管理类【尝试一】发现小米MIUI系统实现自己的MiuiResources类之后,想着拉取小米手机里的framework.jar出来看看,它是怎么实现的,正常来说,一般直接进去到system/framework/目录下,就能看到对应framework的jar包,比原创 2020-07-08 17:28:45 · 5228 阅读 · 2 评论 -
Android PopupWindow/悬浮窗适配刘海屏
一、悬浮窗适配刘海屏悬浮窗正常情况下,是不能移动到刘海屏所在的区域,那么你看到结果就是:类似这样如上图所示,刚好是隔了一个刘海屏宽度的距离要解决悬浮窗可以靠边显示到刘海屏所在区域,只要设置一下Flag那个参数为LayoutParams.FLAG_LAYOUT_NO_LIMITS即可,主要如下:mParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_LAYOUT_NO_LIMITS;这个参数指明悬浮窗的位置不受系统屏原创 2020-06-09 21:21:09 · 2776 阅读 · 5 评论 -
Android 实现沉浸式体验
一、实现沉浸式状态栏1、实现Activity沉浸式体验1)先封装实现一个专门设置沉浸式的类public class ImmersiveModeUtils { public static void setImmersiveMode(final View contentView){ if (Build.VERSION.SDK_INT >= 19) { //先调用一次,设置沉浸 contentView.setSystemUiVis原创 2020-06-09 20:48:50 · 1076 阅读 · 0 评论 -
Android抽屉布局DrawerLayout与ToolBar关联
1、首先将根布局设置为:androidx.drawerlayout.widget.DrawerLayout,假如你想你的抽屉布局是在预览图中显示出来的话,可以设置属性 tools:openDrawer="start",start这个可以修改为left、right等,就取决于你的抽屉布局是设置在哪边<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2020-06-02 14:54:42 · 2363 阅读 · 0 评论 -
Android设置背景图延伸到状态栏
1、在Activity onCreate方法中设置以下代码: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0 全透明实现 //getWindow.setStatusBarColor(Color.TRANSPARENT) Window window = getWindow(); window.clearFlags(Win原创 2020-06-02 10:50:20 · 4074 阅读 · 4 评论 -
Android设置渐变色状态栏
1、先在drawable目录下创建一个渐变色的矩形图片xml文件:com_sswl_gradient_yello.xml<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="0"原创 2020-05-29 15:09:51 · 907 阅读 · 1 评论 -
Android PopuWindow实现物理返回键监听
【问题分析】正常情况下,PopuWindow是无法监听到物理返回键事件的,因为PopuWindow的最顶层的PopupDecorView mDecorView在dispatchKeyEvent中将返回键给拦截掉了,我们瞅一瞅PupoWindow的这段源码: @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEY原创 2020-05-12 19:53:26 · 1386 阅读 · 7 评论 -
Android Webview调用系统相册实现多选图片上传
1、首先需要给webview的WebChromeClient设置以下代码,才可以实现h5与Android交互选取图片private ValueCallback<Uri> mValueCallbackUri;private ValueCallback<Uri[]> mValueCallbackUris;this.setWebChromeClient(new WebChromeClient() { //获取网页标题 @Override原创 2020-05-12 19:19:24 · 3451 阅读 · 2 评论 -
Android防止被动态调试的解决方法
1、判断要是BuildConfig.DEBUG为false,但AndroidManifest却声明为debuggable,可认为是被动态调试调试状态,强制退出2、定时轮询,判断在BuildConfig.DEBUG为false时,是否有调试器连接,如果有,可认为是被动态调试调试状态,强制退出3、定时轮询,判断在BuildConfig.DEBUG为false时,是否被其他进程用Ptrace方式跟踪,如果有,可认为是被动态调试调试状态,强制退出public class DebuggerUtils {原创 2020-05-11 15:54:11 · 5587 阅读 · 3 评论 -
Android获取apk签名的MD5值
1、根据包名获取到对应的PackageInfo对象,然后从PackageInfo中获取到签名串/** * @Description:获取apk签名的MD5值 * @Author: jimmyliang * @CreateDate: 2020/5/9 */public class ApkUtils { public static String getApkSignMd5(Context context,String packageName){ if (TextUtils.i原创 2020-05-09 20:45:59 · 1641 阅读 · 0 评论 -
Android应用防止被截图或者录屏
Activity创建时设置WindowManager.LayoutParams.FLAG_SECURE属性,该属性能防止屏幕被截图和录制。以下为修复代码示例: public class DemoActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2020-05-09 20:17:46 · 2794 阅读 · 0 评论 -
Android检测设备是否root
1.通过检测指定目录下是否存在su程序来检测运行环境是否为Root设备public static boolean CheckRootPathSU() { File f = null; final String kSuSearchPaths[] = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/"}; try { for (int i原创 2020-05-09 20:09:13 · 1682 阅读 · 0 评论 -
小米手机dialog(设置了layout-list类型背景图)显示不全的bug
【问题复现】运营说:给我设计个圆角+花饰背景的公告弹窗,设计图甩你1、拿到设计图,首先当然是考虑背景图怎么实现,考虑到其他界面的背景图大部分都是单纯的圆角白色背景,只有公告弹窗以及个别界面的是在圆角基础上加了花饰,自然而然就选择layer-list来叠加图片处理<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">原创 2020-05-09 12:01:18 · 1062 阅读 · 0 评论 -
Android Dagger2快速入门篇
一、什么是Dagger2 Dagger2是编译时依赖注入框架,也就是说,这个框架解决的问题是,在编译阶段动态生成依赖注入代码,有别于其他依赖注入框架是利用反射或者运行时再动态生成字节码。二、什么是依赖注入 通俗点解释就是,a依赖b,但a不控制b的创建和销毁,仅使用b,那么b的控制权交给a之外处理,...原创 2020-04-10 16:09:38 · 4049 阅读 · 1 评论 -
RecyclerView ViewHolder复用错乱解决方案
【前言】 一般而言,要是RecyclerView.Adapter的getItemViewType方法返回相同值时,RecyclerView就会复用已经滑出屏幕变为不可见的ViewHolder,假如被复用的ViewHolder持有的View没有被重新赋值或者恢复原始状态,就会出现显示被复用之前的View状态的这种现象,我们可以认为出现Recycler...原创 2020-03-27 17:48:44 · 6679 阅读 · 1 评论 -
LeakCanary内存泄露检测
【前言】所谓的内存泄露,大多数情况下,都是跟android那些有生命周期的对象有关,比如:在后退栈backstack中添加了一个Fragment,但是这个Fragment并没有在Fragment.onDestroyView()方法中清空它的view字段;(见StackOverflow answer) 把activity上下文保存为一个对象的字段,以便在因为配置改变(横竖屏切换之类)而发...原创 2020-03-27 16:26:49 · 451 阅读 · 0 评论 -
adb实用命令(持续更新中....)
1、获取手机屏幕当前显示的activity名与所属的包名:adb shell dumpsys window windows | findstr Current【延伸阅读】有人会有疑问:adb shell dumsys后面可以接哪些参数呢?其实很简单,我们在cmd中输入以下命令:adb shell service list,就会显示可以显示的参数:Found 178 services:0 ...原创 2020-03-26 17:10:37 · 1905 阅读 · 0 评论 -
ERROR: Manifest merger failed with multiple errors排查思路
【前言】有时,项目比较大,依赖的第三方库比较多时候,一编译就出现以下错误:ERROR: Manifest merger failed with multiple errors, see logs但是,在编译日志里根本看不到哪里有详细的报错位置信息,最详细的就是酱紫的log【排查思路】从上述截图,我们可以看到,报错的打包任务是:channel:oppo_new:processDebug...原创 2020-03-26 16:43:52 · 644 阅读 · 0 评论 -
Android 7.0出现IntentFileUriExposedException异常
一、前言 从Android N(即Android 7.0)开始,Android系统开始限制向其他应用发起file:///开头的URI,因为要是允许传递file:///开头的Uri,那么被你应用启动的其他应用就能够自由地去操作这个文件,但是仔细想想,并不应该是这样,假如要分享操作文件是你应用的私有文件呢?而且通过file:///传递文件路径的话,对于文件访问权限的控制也比较麻烦,需要去修...原创 2019-11-18 19:51:00 · 291 阅读 · 0 评论 -
Android P禁止http明文传输
一、前言从Android P(即Android 9)开始,Android系统会限制了http明文流量的网络请求,若是使用http访问都会抛出java.io.IOException: Cleartext HTTP traffic to ... not permitted异常,使用https就可以正常进行网络请求官方说明二、异常现象1、若是targetSdkVersion >= 28...原创 2019-11-15 19:39:34 · 1117 阅读 · 0 评论 -
Android Q访问公共外部存储受限
一·、前言从Android Q(即 Android 10)开始,应用访问外部存储的私有目录(即Context.getExternalFilesDir())不需要申请READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE权限。同时,正常情况下,就算应用有申请READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE权限,...原创 2019-11-15 18:39:45 · 16044 阅读 · 0 评论 -
Android快速分享文件/文字到QQ/微信
一般来说,要想分享文件/文字到微信朋友圈、QQ,都是需要接入微信、QQ的分享sdk;不过也有个快速分享到QQ、微信的小窍门,就是通过action 为“android.intent.action.SEND”的Intent。> Talk is cheap. Show me the code.1、先看看手Q的AndroidManifest.xml,我们可以看到可以接受“android.i...原创 2019-11-15 16:02:50 · 4286 阅读 · 2 评论