基础
文章平均质量分 87
博艺
这个作者很懒,什么都没留下…
展开
-
Kotlin Sealed Class
Sealed Classes 受限制: 必须在同一文件中,或者在 Sealed Classes 类的内部中使用,在Kotlin 1.1 之前,规则更加严格,子类只能在 Sealed Classes 类的内部中使用。正如你所看到的,在 Sealed Classes 内部中,使用 object 声明时,我们可以重用它们,不需要每次创建一个新实例,当这样使用时候,它看起来和枚举非常相似。如果你不需要多次实例化,也不需要不提供特殊行为,或者也不需要添加额外的信息,仅作为单个实例存在,这个时候使用枚举更加合适。...原创 2022-08-18 14:32:10 · 490 阅读 · 0 评论 -
加固调研实录
背景问题:Appsealing1、启动速度慢 :原 1s左右 ,加固后 3-4 s, 慢 2-3 s目标:保证安全的前提下,启动时间变快,兼容性变好。问题分析:为什么慢——> Dex 加壳, 整体加固,启动慢,兼容问题#1、AppsealingSelect Dex 部分Class加固【作用不显著】Appsealing 研究中,有时间反馈#2、是否有替代技术,加固技术分析。VMP和JAVA2c 技术 #不加固混淆,自己些混淆策略...原创 2021-11-12 15:55:42 · 2153 阅读 · 0 评论 -
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 · 213 阅读 · 0 评论 -
Android 轻量级存储方案的前世今生【SharedPreferences、MMKV、Jetpack DataStore】
背景对于 Android 轻量级存储方案,有大多数人都很熟悉的 SharedPreferences;也有基于 mmap 的高性能组件 MMKV,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强;还有 Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和流程(Flow)以异步、一致的事务方式存储数据。本文将一一分析这三个方案的来龙去脉,并深入源码进行分析。(本文基于Android 29 源码原创 2021-09-18 11:22:03 · 797 阅读 · 0 评论 -
Android从码农到架构师的技术成长之路
在这里我把攻城狮分成初级、中级、高级和资深四个阶段,分别对研发设计能力、工具使用、系统原理和架构等作出要求。初级我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成一个功能。这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。需要的技能有:掌握android 四大组件知识,深入了解相关生命周期;对于Application、Fragment、Intent也必须掌握。 掌握android 基本布局和控件的属性和使用,常用布局有LinearLayout\Relative原创 2021-07-07 17:33:01 · 187 阅读 · 0 评论 -
静态和动态代理模式
代理模式,也称委托模式,是结构型设计模式之一,何为代理呢? 在日常生活中就比如叫朋友替你拿个快递,叫朋友替你做一下作业,叫朋友替你买点东西等等,这个朋友就是你的代理,你把事情委托你的朋友做了,同样在代码的世界中也存在代理,而且在你以后阅读到更多的设计模式时,你会发现很多的设计模式中也有代理模式的影子,代理模式是一个非常重要的设计模式,代理模式分为静态代理和动态代理,本文将会通过一个简单的例子讲解静态代理,然后引出动态代理,并且深入的探讨一下动态代理的实现原理。代理模式的定义为其他对象提供一种代理以控原创 2021-05-24 10:59:23 · 275 阅读 · 1 评论 -
一篇文章搞懂android存储目录结构
存储分类内部存储内部存储位于系统中很特殊的一个位置,对于设备中每一个安装的 App,系统都会在 data/data/packagename/xxx 自动创建与之对应的文件夹。如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。对于这个内部目录,用户是无法访问的,除非获取root权限。String fileDir.原创 2021-03-24 14:51:39 · 481 阅读 · 0 评论 -
最强 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 · 290 阅读 · 0 评论 -
Android应用优化指南
1.布局优化为什么?Android系统每个16ms发出VSYNC信号,触发对UI的渲染,要想达到界面流畅,必须实现60fps,也就意味着大多数的操作必须在16ms完成.除了上面界面过于复杂导致渲染不能及时完成之外,还存在过度绘制问题.所谓过度绘制就是某个像素在同一帧的时间内被绘制多次.在多层次的UI界面中,如果不可见的UI也在进行绘制,那么这些重合区域的像素就会被绘制多次,从而浪费大量的CPU和GPU资源.过度绘制也发生在背景重叠的情况下,比如Layout中有自己的背景,同时子View中又有自己原创 2020-12-08 15:06:00 · 114 阅读 · 0 评论 -
Android获取设备唯一ID(优化方案)
最近,因公司产品及客户需要,领导让我研究免存储设备ID,以及给出一个设备ID最佳的方案(可与存储相结合)。在研究过浏览器的fingerprient2js后,颇有心得,并且看网上似乎木有完美的解决方案,于是写了这篇文章,仅供需要的开发者参考。(该算法暂未进行验证,这里先给出一个jar包,后期我会在SDK中加入调查接口,分两个jar包(测试版和正式版),希望开发者能支持测试版,稳定后使用正式版。)在产品中,首先肯定要尽量避免权限,其次考虑卸载APP后ID不一致的问题,再就是尽量结合存储,降低卸载或重装app时原创 2020-06-16 17:48:30 · 2518 阅读 · 0 评论 -
神秘的Activity 的task属性android:allowTaskReparenting alwaysRetainTaskState
1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。如果一个这个Activity的元素没有设定此属性,设定在上的此属性会对此Activity起作用。例如在一个应用中...原创 2020-04-07 17:40:46 · 433 阅读 · 0 评论 -
SSL 证书格式普及,PEM、CER、JKS、PKCS12
根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式:.DER .CER,文件是二进制格式,只保存证书,不保存私钥。 .PEM,一般是文本格式,可保存证书,可保存私钥。 .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。 .PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。 .JKS,二进制...原创 2020-03-04 19:00:57 · 1157 阅读 · 0 评论 -
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 · 17796 阅读 · 0 评论 -
还在收集资料?我这里有个github汇总
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。国内程序员都喜欢收集资料,但是又不看,github是重灾区。更有莫名其妙fork的,让人不得要领。这些资料其实也代表了收集者的一个思路,还是有不小参考价值的。这里,我整理了一下java后端的一些资料,算是送给大家的福利吧。收集了不看,也无所谓了(排名不分先后)。如何贡献?我把这些信息放在了github上,做...转载 2019-11-12 16:38:54 · 198 阅读 · 0 评论 -
Android原生项目集成React Native
开发环境准备首先按照开发环境搭建教程来安装React Native在安卓平台上所需的一切依赖软件(比如npm)。在应用中添加JS代码在项目的根目录中运行:$ npm init$ npm install --save react react-native$ curl -o .flowconfig https://raw.githubusercontent.com/faceb...转载 2019-07-29 12:24:22 · 287 阅读 · 0 评论 -
关于4G网络ip变动
1、重新发起接入,ip会改变重新发起接入,ip会发生改变,ip分配完成应该是在接入之后,dhcp自动分配的;重新发起接入过程,可能是开机重启,飞行模式切换,没有信号到有信号2、同一个区域内切换基站 ip不会改变4g保证了基站间无缝切换,也就是切换基站的过程,只要是在切换的过程中没有断网(4g链路,并不是数据开关),即没重新发起随机接入,ip就还是那个ip;3、从一个区域到另一个区...原创 2019-07-19 14:34:36 · 7121 阅读 · 0 评论 -
AppCompat Toolbar控件去掉阴影
在Android 5.0以上,AppCompat toolbar控件会自带阴影效果,有时候设计的页面toolbar下面会直接跟了一个TabLayout,这时候阴影效果会破坏整体性,我们可以通过elevation去掉阴影。不过,通过代码设置却是无效的getSupportActionBar().setElevation(0);if (Build.VERSION.SDK_INT >...原创 2019-04-17 19:06:17 · 395 阅读 · 0 评论 -
Android:你不知道的 WebView 使用漏洞
目录1. 类型WebView中,主要漏洞有三类:任意代码执行漏洞密码明文存储漏洞域控制不严格漏洞2. 具体分析2.1 WebView 任意代码执行漏洞出现该漏洞的原因有三个:WebView 中 addJavascriptInterface() 接口WebView 内置导出的 searchBoxJavaBridge_对象WebView 内置导出的 accessibi...原创 2019-04-12 17:27:20 · 250 阅读 · 0 评论 -
android WebView 读取sdcard 上 html 报 net:err_access_denied
设置如下属性settings.setAllowFileAccess(true);settings.setAllowContentAccess(true);原创 2019-04-12 17:16:49 · 8354 阅读 · 2 评论 -
理解Android硬件加速原理
硬件加速,直观上说就是依赖 GPU 实现图形绘制加速,同软硬件加速的区别主要是图形的绘制究竟是 GPU 来处理还是 CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在 Android 中也是如此,不过相对于普通的软件绘制,硬件加速还做了其他方面优化,不仅仅限定在绘制方面,绘制之前,在如何构建绘制区域上,硬件加速也做出了很大优化,因此硬件加速特性可以从下面两部分来分析:1、前期策略:...原创 2019-03-18 14:27:51 · 653 阅读 · 0 评论 -
Google Play 开发者注意事项
开发者计划政策:https://play.google.com/intl/zh-CN/about/developer-content-policy/开发者分发协议:https://play.google.com/about/developer-distribution-agreement.htmlGoogle Play 审核制度机器扫描+投诉举报+少量人工监管上线前:由工具进行病毒...原创 2019-03-11 17:09:00 · 1398 阅读 · 0 评论 -
android webview设置自适应任意大小的pc网页
[html] view plain copyAndroid:WebView如何设定支持缩放:需要对WebView和WebSettings做一下设定 WebSettings webSettings = view.getSettings(); webSettings.setJavaScriptEnabled(true); // User settings ...原创 2018-05-10 16:54:14 · 4380 阅读 · 0 评论 -
Android Studio 出包时,抛出Aapt2Exception异常解决方案总结
(1)第一种情况:APPT2 编译问题:解决方案:在gradle.properties中关闭APPT2 编译,增加:1android.enableAapt2=false(2)在 Gradle console 中报 AAPT err(Facade for 1031089232): libpng error: Not a PNG file 解决方案:build.gradle中加入下面两个句...原创 2018-05-18 16:45:20 · 1149 阅读 · 0 评论 -
Git常见问题汇总
平时开发中git操作遇到的问题,分享一下,希望对大家有用。1、gitignore文件无法忽略某些文件在管理一个版本库时,有时候不想要管理某些文件,这个时候我就把这个问件写到.gitignore文件中,这样应该就可以将这个文件忽略,不再进行·版本管理了,但是经常出现的情况是:将这些文件名写到其中了,使用git status1查看发现这些文件并没有被忽略掉。查了资料发现,想要.gitignore起作用...转载 2018-05-22 17:33:29 · 823 阅读 · 0 评论 -
targetSdkVersion 相关记录
targetSDKVersiontargetSdkVersion 是 Android 系统提供前向兼容的主要手段。这是什么意思呢?随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为...原创 2018-05-24 17:30:08 · 574 阅读 · 0 评论 -
UTXO 和 Account 模型对比
在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型,同样 CITA 也采用了 Account 模型。Bitcoin 的设计初衷是点对点的电子现金系统,在比特币中,每个交易消耗之前交易生成的 UTXO 然后生成新的 UT...原创 2018-09-03 10:06:46 · 411 阅读 · 0 评论 -
POST请求慎用301 Moved Permanently
在全站启用HTTPS的过程中,遇到一个坑,在此做下记录。在全站支持HTTPS以后,用户可能还会使用http访问,所以很多建议使用301 Moved Permanently+HSTS( Strict Transport Security Policy)的方式要求用户跳转到HTTPS后再访问。然而,对于有POST请求的域名是不适合用301 Moved Permanently的,关于post请求重定...转载 2018-10-11 11:38:19 · 26590 阅读 · 1 评论 -
解决SwipeRefreshLayout与ScrollView滑动冲突
在页面为了兼容小屏幕设备我们需要嵌套一个ScrollView来让我们的布局可以滑动,此时恰好外层使用了SwipeRefreshLayout那滑动冲突就来了,下面给出解决办法1.方法一:使用NestedScrollView替换ScrollView<android.support.v4.widget.NestedScrollView android:id="@+...原创 2018-09-28 14:39:30 · 1676 阅读 · 1 评论 -
AndroidStudio出现tools:replace="android: authorities",tools:replace="android:resource"
在做项目的时候需要导入第三方库时碰到这个问题;Error:Execution failed for task ':app:processDebugManifest'.> Manifest merger failed : Attribute application@icon value=(@mipmap/ic_launcher) from AndroidManifest.xml:14:9-...原创 2018-10-18 10:18:02 · 9461 阅读 · 1 评论 -
App安全评测笔记
1. Root和存在xposed插件,程序自杀或 产品高危提示2、pin码删除问题。多存几个地方。3、越权密码,kyc等资源,后台权限验证4、签名 私钥放so,定期变5、涉及到敏感信息,加密存储;存储目录和加密私秘要定期换。6、助记词。截屏 android 自己屏蔽截屏,监听第三方屏蔽,提示。7、xpub 加密传输8、存储助记词。尽量不要存,或者用户选择存储?9、输...原创 2018-10-15 16:03:16 · 288 阅读 · 0 评论 -
ViewPager 嵌套 ScrollView 不显示问题
ViewPager 嵌套 ScrollView 不显示问题public class ViewPagerForScrollView extends ViewPager { public ViewPagerForScrollView(Context context) { super(context); } public ViewPagerForSc...原创 2018-12-11 20:27:24 · 341 阅读 · 0 评论 -
TabLayout 文字不显示问题,tabLayout.setupWithViewPager(viewPager)
TabLayout 文字不显示问题 tabLayout.setupWithViewPager(viewPager) 在 ViewPagerAdapter 复写 getPageTitleimport android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;impo...原创 2018-12-11 20:27:57 · 1440 阅读 · 1 评论 -
NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决
前言在开发中我们经常会用到 NestedScrollView 和 RecycleView,一般情况下这两种布局是不需要进行嵌套的,很多情况下 RecycleView 就可以自行解决,但是毕竟是一般情况,因此超出一般情况外的,我们可能就需要进行嵌套了,虽然 Google 大大也不鼓励我们这样使用。这样使用可能会带来一些问题,一如当年的 ScrollView 和 ListView 的矛盾一样。这...原创 2018-12-30 20:55:04 · 425 阅读 · 0 评论 -
NestedScrollView 相关
简介NestedScrollView 即 支持嵌套滑动的 ScrollView。因此,我们可以简单的把 NestedScrollView 类比为 ScrollView,其作用就是作为控件父布局,从而具备(嵌套)滑动功能。NestedScrollView 与 ScrollView 的区别就在于 NestedScrollView 支持 嵌套滑动,无论是作为父控件还是子控件,嵌套滑动都支持,...转载 2018-12-30 20:57:40 · 1609 阅读 · 1 评论 -
Android Jetpack简介
Android Jetpack简介2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。这次发布的 Android Jetpack 组件覆盖以下 4 个方面:Architecture、Foundation、Behavior 以及 UI。包括我们在本次 Android P Beta 中带来的 Slices等新功...原创 2019-01-29 13:54:58 · 710 阅读 · 0 评论 -
给第三方apk进行系统签名的几种方式
一、Android中的签名系统默认的四种签名类型:四组默认签名供Android.mk在编译APK使用:1、testkey:普通APK,默认情况下使用。2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。3、shared:该APK需要和home/contacts进程共享数据。4、me...原创 2019-02-12 11:14:03 · 1907 阅读 · 0 评论 -
Android Studio3.X中dependencies依赖api、compile和implementation的区别
一、依赖变化当我们使用Android Studio3.X新建项目时会发现,默认的依赖由之前的compile更改为implementation了。3.0 以下版本build.gradle中依赖的写法:compile fileTree(dir: 'libs', include: ['*.jar'])1但在3.0后的写法为implementation fileTree(dir: 'l...原创 2019-02-12 16:52:16 · 1970 阅读 · 0 评论 -
Android Studio项目版本号的统一管理
Android Studio项目版本号的统一管理项目前段时间进行了组件化改造,由于分出了很多的model,所以以前的依赖关系也需要变化,所以整理出这一篇版本号管理和依赖关系变更的记录.1.版本号统一管理统一管理的方式有比较多,这里我只介绍项目中的方式.步骤1.首先你需要新建一个版本号记录的文件,我这里是versions.gradle,里面是所有的你需要管理的版本号信息.ext....原创 2019-02-13 11:41:29 · 1620 阅读 · 0 评论 -
访问Web,tcp传输全过程(三次握手、请求、数据传输、四次挥手)
从输入域名到最后呈现经历的过程:域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户 --> 四次挥手结束1.域名解析首先浏览器会解析 www.zipac...转载 2018-03-20 14:45:48 · 393 阅读 · 0 评论