- 博客(304)
- 资源 (12)
- 收藏
- 关注
原创 史上最全Android混淆模版【含海外广告SDK】
---------------------------Part----------------定制化区域----------------------------------------------#------------------------------Part-------------基本不用动区域----------------------------------------###---------------Begin Admob 下 reklamup。
2023-11-23 14:03:32 1169
原创 Android 性能优化篇之SharedPreferences使用优化
SharedPreferences(以下简称SP)`是Android本地存储的一种方式,是以`key-value`的形式存储在`/data/data/项目包名/shared_prefs/sp_name.xml`里。
2023-05-20 17:18:44 1098 1
转载 今日头条 ANR 优化实践系列 - 设计原理及影响因素
再来看一下有序广播的发送和接收逻辑,同样在系统 AMS 服务中,BoradCastQueue 获取当前正在发送的广播消息,并取出下一个广播接收者,更新发送时间戳,以此时间计算并设置超时时间(但是系统在此进行了一些优化处理,以避免每次广播正常接收后,都需要取消超时监控然后又重新设置,而是采用一种对齐的方式进行复用)。ANR 问题,对于从事 Android 开发的同学来说并不陌生,日常开发中,经常会遇到应用乃至系统层面引起的各种问题,很多时候因为不了解其运行原理,在面对该类问题时可能会一头雾水。
2023-05-20 15:13:36 267
原创 Android 动画
android:duration 动画持续时间android:fillAfter 为true动画结束时,View将保持动画结束时的状态android:fillBefore 为true动画结束时,View将还原到开始开始时的状态android:repeatCount 动画重复执行的次数android:repeatMode 动画重复模式 ,重复播放时restart重头开始,reverse重复播放时倒叙回放,该属性需要和android:repeatCount一起使用。
2023-02-01 15:05:38 1258
原创 防止Android点击app图标应用重启
关于app第一次安装,进入主页后再进入一个界面A,然后home键回到桌面,再点击app图标,应该显示哪个界面?1. 第一步:删除第一个Activity的启动模式,或者改为“standard”。第二步:在application中去设置持久化为 true,防止app挂后台被回收。造成这种问题的主要原因:国内手机厂商问题,以及手机自带的第三方手机管家。3. App 重新加载启动页的时候,判断是否已经加载过一次。但是那是相对于Google原生的系统来说,是界面A。有的人肯定说是界面A。
2022-11-03 17:38:28 1074
原创 Android开发中VSS、RSS、PSS、USS的区别
表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。RSS可能会产生误导,因为它报告进程使用的所有共享库的总数,即使共享库只加载到内存中一次,无论有多少进程使用它。表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。
2022-10-20 10:47:16 1307
原创 Kotlin Sealed Class
Sealed Classes 受限制: 必须在同一文件中,或者在 Sealed Classes 类的内部中使用,在Kotlin 1.1 之前,规则更加严格,子类只能在 Sealed Classes 类的内部中使用。正如你所看到的,在 Sealed Classes 内部中,使用 object 声明时,我们可以重用它们,不需要每次创建一个新实例,当这样使用时候,它看起来和枚举非常相似。如果你不需要多次实例化,也不需要不提供特殊行为,或者也不需要添加额外的信息,仅作为单个实例存在,这个时候使用枚举更加合适。...
2022-08-18 14:32:10 468
原创 加固调研实录
背景问题:Appsealing1、启动速度慢 :原 1s左右 ,加固后 3-4 s, 慢 2-3 s目标:保证安全的前提下,启动时间变快,兼容性变好。问题分析:为什么慢——> Dex 加壳, 整体加固,启动慢,兼容问题#1、AppsealingSelect Dex 部分Class加固【作用不显著】Appsealing 研究中,有时间反馈#2、是否有替代技术,加固技术分析。VMP和JAVA2c 技术 #不加固混淆,自己些混淆策略...
2021-11-12 15:55:42 2075
原创 mac环境下Android 反编译
一、需要的工具apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件。 dex2jar:将反编译后的classes.dex文件转化为.jar文件。 jd-gui:用于将.jar文件转换成java代码。二、反编译步骤第一步:使用apktool工具对APK进行反编译1. 下载apktool下载apktool2. 把下载好的apktool脚本和apktool.jar文件移动到 /usr/local/bin 文件夹下菜单栏点击「
2021-10-08 16:43:08 204
原创 Android 加固厂商特征
爱加密libexec.so, libexecmain.so,ijiami.dat娜迦libchaosvmp.so , libddog.solibfdog.so梆梆libsecexe.so, libsecmain.so梆梆企业版libDexHelper.so , libDexHelper-x86.so360libprotectClass.so, libjiagu.solibjiagu.so, libjiagu_art.solibjiagu.so, libjiagu_x86.so.
2021-10-08 15:42:55 1002
原创 Android 轻量级存储方案的前世今生【SharedPreferences、MMKV、Jetpack DataStore】
背景对于 Android 轻量级存储方案,有大多数人都很熟悉的 SharedPreferences;也有基于 mmap 的高性能组件 MMKV,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强;还有 Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和流程(Flow)以异步、一致的事务方式存储数据。本文将一一分析这三个方案的来龙去脉,并深入源码进行分析。(本文基于Android 29 源码
2021-09-18 11:22:03 722
原创 Team leader的几点看法
每年给组员做PR的时候,总会谈及职业规划的问题。也总会被被问到怎样何时才可以做一个lead,为什么自己不能做lead?就从别处收集了一些自己也加了一些作为一个指引。但实际在具体操作时,也是每个manager见仁见智的事情,而且有时需要激励和推动才能挖掘出他/她的潜能。基本1.理解及分解能力,能够准确的理解上级给出的任务并合理的分解2.目标设置能力,能够将任务,时间,注意事项,期望结果,标准等明确的告诉你的组员3.监控进度和质量,收集组员的进度及汇总,评估组员的工作质量4.时间管理能力,合理的安
2021-09-15 10:36:01 218
原创 Android从码农到架构师的技术成长之路
在这里我把攻城狮分成初级、中级、高级和资深四个阶段,分别对研发设计能力、工具使用、系统原理和架构等作出要求。初级我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成一个功能。这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。需要的技能有:掌握android 四大组件知识,深入了解相关生命周期;对于Application、Fragment、Intent也必须掌握。 掌握android 基本布局和控件的属性和使用,常用布局有LinearLayout\Relative
2021-07-07 17:33:01 173
原创 静态和动态代理模式
代理模式,也称委托模式,是结构型设计模式之一,何为代理呢? 在日常生活中就比如叫朋友替你拿个快递,叫朋友替你做一下作业,叫朋友替你买点东西等等,这个朋友就是你的代理,你把事情委托你的朋友做了,同样在代码的世界中也存在代理,而且在你以后阅读到更多的设计模式时,你会发现很多的设计模式中也有代理模式的影子,代理模式是一个非常重要的设计模式,代理模式分为静态代理和动态代理,本文将会通过一个简单的例子讲解静态代理,然后引出动态代理,并且深入的探讨一下动态代理的实现原理。代理模式的定义为其他对象提供一种代理以控
2021-05-24 10:59:23 252 1
原创 一篇文章搞懂android存储目录结构
存储分类内部存储内部存储位于系统中很特殊的一个位置,对于设备中每一个安装的 App,系统都会在 data/data/packagename/xxx 自动创建与之对应的文件夹。如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。对于这个内部目录,用户是无法访问的,除非获取root权限。String fileDir.
2021-03-24 14:51:39 454
原创 Doze和App Standby模式下的Android应用适配
从Android6.0(API23)开始, Google为Android加入了两种省电特性,通过管理Android应用(以下简称应用)在非充电状态下的设备中的运行策略来达到延长用户的Android设备使用时间的目的。这两种特性存在一定的差别,Doze模式通过延缓应用在设备长时间待机状态下对于CPU和网络资源的使用来实现节能;而App Standby则是通过延缓最近未被使用的后台应用对于网络的请求来达到同样的目的。Doze和App Standby在Android6.0及以上的Android设备中可以影响所
2021-03-22 16:10:38 299
原创 Android性能优化 -- Systrace工具
Systrace简介一般来说,我们的机器以60帧/秒显示时,用户会感觉机器很流畅,如果显示时出现丢帧的情况,需要知道当前整个系统所处的状态,这个时候Systrace便是最佳的工具选择。Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、WindowManagerService等framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。Systr...
2021-03-08 16:44:30 603
原创 最强 Android Studio 使用小技巧和快捷键总结
写在前面本文翻译自Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键。 根据这些小技巧的使用场景,本文将这62个小技巧分为常用技巧(1 – 28)、编码技巧(29 – 49)和调试技巧(50 – 62),分成三个部分。每个小技巧都配有 gif 动图,由于原图在 google photo 上,加载较慢,本文全部转存到七牛上了。由于能力有限,翻译过程中难免有所疏漏,如发现错误或问题,请在评论中提出,谢谢.
2021-03-08 16:43:40 250
原创 Android网络安全之NetworkSecurityConfig
google在android p为了安全起见,已经明确规定禁止http协议额,但是之前很多接口都是http协议,我们一般是这样解决的:在res目录下创建xml目录,然后随便创建一个.xml文件,里面内容如下:<span style="color:#000000"><code><?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config clear
2021-01-28 12:47:08 1422
原创 Android Mac 获取 Jks 的 SHA1 和 PKCS12 转换
bogon:Home jonny$ keytool -list -keystore /Users/jonny/Desktop/paytm-sport-fantasy.jks输入密钥库口令: 密钥库类型: jks密钥库提供方: SUN您的密钥库包含 1 个条目fantasy, 2021-1-18, PrivateKeyEntry,证书指纹 (SHA1): 74:6D:14:06:23:1D:79:B5:80:A2:FDF:89:02Warning:JKS...
2021-01-19 16:08:57 377
原创 Android应用优化指南
1.布局优化为什么?Android系统每个16ms发出VSYNC信号,触发对UI的渲染,要想达到界面流畅,必须实现60fps,也就意味着大多数的操作必须在16ms完成.除了上面界面过于复杂导致渲染不能及时完成之外,还存在过度绘制问题.所谓过度绘制就是某个像素在同一帧的时间内被绘制多次.在多层次的UI界面中,如果不可见的UI也在进行绘制,那么这些重合区域的像素就会被绘制多次,从而浪费大量的CPU和GPU资源.过度绘制也发生在背景重叠的情况下,比如Layout中有自己的背景,同时子View中又有自己
2020-12-08 15:06:00 110
原创 Android 进阶 APP优化 包体积优化
一、谷歌官方对流畅度的解释:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms。二、IOS系统比ANDROID系统流畅的原因因为Android系统UI的框架设计的问题。在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,系统会将所有资源用于渲染UI过程。而在Android系统中UI渲染过程的优先级别却没有那么高,也就是说当你触摸Android手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,.
2020-12-02 15:31:21 502 2
原创 ReactNative与Android通信模块及核心实现类
开始之前本文前上部分主要拆解一些基础的原理,由浅到深;后半部分讲解集成模块实现,你也可以直接阅读后半部分,快速实现模块集成。文中着重在Android端帮助大家理解React Native。下方先提前介绍一些关键类。ReactActivity:默认所有的Activity都继承它。 ReactNativeHost:帮你"hold"住ReactInstanceManager。 ReactActivityDelegate:ReactActivity的逻辑代理实现。 ReactRootView:Re
2020-08-08 15:54:54 243
原创 React Native的资源的打包流程
一、引用 使用过React Native的应该知道,依赖的库都是通过npm install安装,安装后的所有源码存在于node_modules文件夹中,如果依赖的库需要原生代码的支持,需要通过react-native link实现原生代码模块的引用注册。 而手动针对Android添加过link的应该熟悉,react-native link实际上是通过脚本,在setting.gradle文件中引入模块在node_modules原生路径,然后在 app 的module的build.gradle中,通过.
2020-08-08 15:50:04 1611
原创 Android获取设备唯一ID(优化方案)
最近,因公司产品及客户需要,领导让我研究免存储设备ID,以及给出一个设备ID最佳的方案(可与存储相结合)。在研究过浏览器的fingerprient2js后,颇有心得,并且看网上似乎木有完美的解决方案,于是写了这篇文章,仅供需要的开发者参考。(该算法暂未进行验证,这里先给出一个jar包,后期我会在SDK中加入调查接口,分两个jar包(测试版和正式版),希望开发者能支持测试版,稳定后使用正式版。)在产品中,首先肯定要尽量避免权限,其次考虑卸载APP后ID不一致的问题,再就是尽量结合存储,降低卸载或重装app时
2020-06-16 17:48:30 2437
原创 Android截屏的几种实现
最近我们的APP要求需要截屏功能,网上看了看大致有一下几种实现的方式,由于我们的机器是特定的设备,(类似于广告机,已经ROOT),所以就采用最简单的方式,只需在代码中执行shell命令即可实现,下面就给大家介绍一下各种截屏的方式。方式一 public static Bitmap capture(Activity activity) { activity.getWindow().getDecorView().setDrawingCacheEnabled(true);
2020-06-16 11:34:24 1809
原创 墨菲定律(设计系统)和康威定律(系统划分)
在设计系统时,应该多考虑 墨菲定律:任何事物都没有表面看起来那么简单。 所有的事都会比你预计的时间长。 可能出错的事总会出错。 如果你担心某种情况发生,那么他就更有可能发生。在划分系统时,应该多考虑 康威定律:系统架构是公司组织架构的反映。 应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本。 如果沟通出现问题,那么应该考虑进行系统和组织架...
2020-05-06 16:06:37 175
原创 语义化版本 2.0.0
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正。先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。Alpha 版Alpha 版功能稳定,但功能可能不完整。 在版本处于 Alpha 版状态时,可以添加、移除或更改 AP...
2020-04-08 17:30:08 123
原创 神秘的Activity 的task属性android:allowTaskReparenting alwaysRetainTaskState
1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。如果一个这个Activity的元素没有设定此属性,设定在上的此属性会对此Activity起作用。例如在一个应用中...
2020-04-07 17:40:46 410
原创 Android-APK签名工具-jarsigner和apksigner
一.工具介绍jarsigner是JDK提供的针对jar包签名的通用工具,位于JDK/bin/jarsigner.exeapksigner是Google官方提供的针对Android apk签名及验证的专用工具,位于Android SDK/build-tools/SDK版本/apksigner.bat不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅...
2020-03-19 14:34:41 725
原创 SSL 证书格式普及,PEM、CER、JKS、PKCS12
根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式:.DER .CER,文件是二进制格式,只保存证书,不保存私钥。 .PEM,一般是文本格式,可保存证书,可保存私钥。 .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。 .PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。 .JKS,二进制...
2020-03-04 19:00:57 956
原创 团队项目的Git分支管理规范
团队项目Git分支管理规范:分支管理创建项目时(一般是服务型项目,工具型或辅助型项目可以简单一些),会针对不同环境创建三个常设分支:develop:开发环境的稳定分支,公共开发环境基于该分支构建。 pre-release:测试环境的稳定分支,测试环境基于该分支构建。 master:生产环境的稳定分支,生产环境基于该分支构建。仅用来发布新版本,除了从pre-release或生产环境B...
2020-02-17 13:21:46 220
原创 Google Play支付失败问题解决
一、确保Google Play配置正确1、在Google Play Console上传测试版本APK,并发布测试版本确定上传APK的包名、版本号、APK签名 确定APK上传时的Public Key2、在Google Play Console上配置物品3、将测试账号加入测试计划4、确保本地测试包与测试版本APK的包名、版本号、APK签名相同二、 用户支付失败可能原因goo...
2019-12-19 15:13:59 17242
原创 Android SDK 开发的一些个人心得
对 SDK 开发的看法SDK 开发和 APP 开发的区别还是很大的。APP 更倾向于用户体验、功能更偏于特定业务、讲究的是快速迭代、快速占领市场。而 SDK 是为 APP 服务的,提供的大多是公共基础服务,如网络请求、打点统计、帐号服务等。下面从几个点说说我的看法。体积和功能可以用三个字形容:小而精。小是指包的体积要尽可能的小,因为业务方接入的时候可能会有这样的抱怨:怎么接了你们的 S...
2019-11-20 11:29:49 955
转载 还在收集资料?我这里有个github汇总
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。国内程序员都喜欢收集资料,但是又不看,github是重灾区。更有莫名其妙fork的,让人不得要领。这些资料其实也代表了收集者的一个思路,还是有不小参考价值的。这里,我整理了一下java后端的一些资料,算是送给大家的福利吧。收集了不看,也无所谓了(排名不分先后)。如何贡献?我把这些信息放在了github上,做...
2019-11-12 16:38:54 193
原创 Android WebView 工作遇坑总结(持续迭代)
微信支付无法拉起微信支付官方文档webview loader url 需要加入Referer做为headeronPageFinished在4.4版本会被多次执行的问题这里不多做赘述,直接参数作者说明参考地址关闭activity视频不停止播放请在activity 生命周期方法中 调用webview 相关的生命周期方法webview.destro...
2019-11-11 18:26:44 348
原创 解决Android Toobar与状态栏重叠
觉得toolbar默认高度太高,给toolbar设了一个固定值。测试时发现在4.4系统上会出现与状态栏重叠的现象。给toolbar设了个margin,但是在7.0的系统上又会出现间隙。最后发现只需要在父view里加上下面两行就解决了。android:clipToPadding="true"android:fitsSystemWindows="true"解释一下上面两个布局属性的意思:a...
2019-10-24 16:55:59 640 1
原创 SharedPreferences优化总结
SharedPreferences(后续简称SP)为我们提供了轻量级存储能力,方便了少量数据的持久化。但是由于项目越来越庞大,SP操作使用不当会导致app卡顿,乃至ANR问题。下面介绍一下操作SP的优化点。SP性能优化点SP性能变差的原因有很多。1.原生API的限制主要有以下两方面:(1)IO瓶颈(2)锁性能差2.对SP的不当封装也会间接造...
2019-10-24 16:22:02 246
原创 Android - Vibrator及VibrationEffect类详解
一、Vibrator类详解在API级别1(Android1.0)中添加1、基本概念在设备上操作振动器的类。如果您的进程退出,您启动的任何振动都将停止。必须使用带有Vibrator.class参数的Context.getSystemService(Class)或带有Context.VIBRATOR_SERVICE参数的Context.getSystemService(String)来...
2019-10-14 15:40:24 7699 2
Textview展示html格式代码,支持图文混排
2018-04-20
播放器demo
2012-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人