自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

转载 Flutter动态化 | Fair 2.6.0 新版本特性

Fair是为Flutter设计的动态化框架,通过FairCompiler工具对原生Dart源文件的自动转化,使项目获得动态更新WidgetTree和State的能力。创建Fair的目标是支持不发版(Android、iOS、Web)的情况下,通过业务bundle和JS下发实现更新,方式类似于ReactNative。与FlutterFair集成后,您可以快速发布新的页面,而无需等待应用的下一个发布日期。...

2022-07-29 14:33:54 534 1

原创 Flutter混合开发框架(二)——FlutterEngineGroup使用及原理分析

前序要解决的问题以及现在的常用解决方案就不再详细叙述,主要就是要做混合开发这件事。背景FlutterEngineGroup是由官方推出的Flutter+Native混合开发解决方案,与FlutterBoost不同的是,使用的是多引擎的处理方式,并优化了每个引擎的大小以及数据处理方式,让大部分数据实现共享,只有部分生命周期等内容做了隔离。实现方式相较于单Engine形式,多Engine无需关心页面栈等问题,但新增了一个问题,就是多Engine中的数据共享。多Engine的方式,如果我们自己设计,那

2021-08-18 14:17:34 6041 3

原创 Flutter混合开发框架(一)——Flutter Boost分析

要解决的问题实现Native和Flutter的混合开发,降低native工程接入Flutter的成本。背景Flutter 2.0之前官方没有提供Native+Flutter的混合开发解决方案,开发者有两种实现方式。1、单Engine模式也就是共享Engine的实现方式,当Native启动Activity或者Controller甚至是Fragment时,都将相同的Engine与对应的控制器进行绑定。2、多Engine模式每开启一个页面都启动一个Flutter Engine,是用多Engine配合

2021-07-29 18:01:42 1823

原创 Flutter 状态管理(二)——fish redux源码解析及思考

简介之前我们横向比较了 fish redux、flutter redux以及provider的用法。本文主要以fish redux为例介绍一下其更新机制,以及设计思想。提出问题1、fish redux的更新和setState是否有关系?2、setState到底是全局更新还是局部更新?3、effect 和 reducer 到底有何区别,谁先执行?设计方案介绍首先,我们已知fish redux的用法,关键的对象为effect、reducer、component、connector、page、ada

2021-04-08 16:29:40 759 1

原创 Android系统内存相关—Binder机制(二)

简介通过思维导图和相关分解,简单的介绍对Android系统的认知,方便搭建一套比较整体的Android基础框架。本章主要介绍Android的Binder机制处理跨进程问题,其本质还是对共享内存的处理。描述Binder 实现本质 内存共享 模型 server transact replay 同步返回,挂起进程 client transact replay 同步返回,挂起进程 binder驱动

2021-03-27 11:07:17 151

原创 安装未知来源应用权限申请(Rxjava封装)

安装未知来源需求简介当App需要安装未知来源的应用的时候,需要开启"安装位置来源应用”的权限。实现方案 //跳转到对应的设置页面进行权限操作 private fun gotoSettingsPage() { val packageURI = Uri.parse("package:"+ activity.packageName) val intent: Intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_S

2021-03-12 16:24:53 548

原创 Android 系统内存相关(一)

简介通过思维导图和相关分解,简单的介绍对Android系统的认知,方便搭建一套比较整体的Android基础框架。具体内容主要参考《Android内核设计》从内存基础介绍开始,无论是什么操作系统,都是要处理真正的物理内存去读取执行指令及数据,所以内存肯定是重中之重。描述操作系统 - 内存的游戏 进程间数据共享 共享内存 shared memory 申请内存 shmget shmat shmdt 全部进程需要撤销 shctl 配置共享区..

2021-03-01 17:50:19 176

原创 Flutter web嵌入原有js获取不到节点问题

Flutter web 与原js结合起因由于Flutter最近很火,团队在做flutter-dart的全平台尝试。对于Web这块,由于我们本身有很多react组件的积累,所以想在flutter web上直接使用原有的JS。一开始,因为flutter web的语法可以直接和js语法对标,所以感觉不是什么困难的事情。但是最终发现了有个1.20.4版本flutter,暂时还无法逾越的坑。shadow dom简单说,flutter 在创建web的platform view时,会在node前添加# sh

2020-12-20 01:08:02 638 1

原创 flutter web 启动失败报链接Chrome失败

问题:Failed to establish connection with the application instance in Chrome.This can happen if the websocket connection used by the web tooling is unable to correctly establish a connection, forexample due to a firewall.解决方案:配置本地localhost 127.0...

2020-12-17 11:01:32 2469 1

原创 Flutter开发导致mac磁盘存储暴涨问题

现象正常开发,未开启iOS虚拟机,观察磁盘管理工具,发现磁盘存储疯狂减少,最终导致存储完全被占满。重启后发现垃圾箱里面多了个一个文件夹,并且这个文件夹有100G。文件夹中主要文件为:dyld_shared_cache_arm64这样的文件。解决方案官方给出的解决方案是升级到1.17.4以上版本这是官方的ISSUE:https://github.com/flutter/flutter/issues/56826亲测有效。...

2020-12-03 10:57:37 609

原创 Flutter状态管理(一)——框架对比及选择

Flutter状态框架对比及选择(一)简介随着业务需求的持续迭代,对于状态的管理就显得尤为重要,数据导向的页面更新是极有效的方式,但是业务越来越多就会导致各个module之间的依赖会越来越多。这张图就反应了,当页面复杂时,如果全是有中央集权的状态控制就会显得杂乱无章,特别在定位问题时就会很头疼,还有一个很重要的原因是因为flutter在调试时报错会从runApp开始报,如果没有状态管理器输出对应的错误,很难定位是哪个数据问题造成的。本次我们主要针对Flutter-Redux和Fish-Redux的

2020-11-12 17:59:08 965

原创 Android插件化,加载成功后无法找到类的问题

问题现象插件加载可以成功,但是获取类时出现class not found问题原因由于工程使用的是AAB的打包方式,壳子工程代码的classloader与业务线apk的classloader不是相同classloader在加载时,使用的是壳子工程的classloader,查找类时使用的是业务线自己的classloader,导致失败。解决方式使用相同classloader...

2020-10-14 15:51:17 449

原创 Fish Redux同时更新adapter的多个相同type的item时失败

如果有一个Action想更新两个item,发现不会进行更新了造成原因:AdapterSource copy; for (int i = 0; i < state.itemCount; i++) { final AbstractLogic<Object> result = pool[state.getItemType(i)]; if (result != null) { final Object oldData = state.getIte

2020-09-07 21:30:48 502 1

原创 Flutter No implementation found for method xxx on channel

问题原因很明显就是依赖没有,但是不是flutter的依赖,是Android native缺少这个方法。如果你不是直接在flutter工程生成的Android工程,或者是由其他方式使用flutter依赖时,当flutter工程引入部分带有native插件的第三方库时,就不会主动打到对应的Android工程中,引起改错误。解决方案方案一、将navtive插件当依赖引入到Android 工程,例如://magpie Android SDK debugdebugApi 'com.wuba.magpie:

2020-08-05 11:28:49 3516

原创 Dex动态加载问题

用build-tools的dex打包失败改用d8即可具体使用方式可参照https://developer.android.google.cn/studio/command-line/d8加载时 No such file or directoryprivate static dalvik.system.DexPathList$Element[] dalvik.system.DexPathList.makeDexElements(java.util.List,java.io.File,java.util

2020-07-22 14:40:43 1367

原创 mac解决MySql(8.0.20) 启动后端口是0,无法连接Workbench问题

问题1:未设置my.cnf如果没设置my.cnf配置,将会出现账号密码登录失败系统偏好配置中MySql无法启动或者关闭解决配置my.cnf到/etc/my.cnf中问题2:查看端口号为0mysql> show global variables like ‘port’;±--------------±------+| Variable_name | Value |±--------------±------+| port | 0 |±------------

2020-05-17 22:18:08 4652

原创 从Android视角看数据爬虫

从Android视角看数据爬虫简介从Android客户端视角看数据爬虫,主要分为以下几个步骤1、通过反编译等手段,hook住对应app的网络请求库,得到对应的URL2、根据hook的点打印出当时的header和参数3、模拟APP请求,发起对应的数据请求如何实现通过反编译和Hook获取url这个爬虫的重点步骤,通过此步骤才能的到对应的URL,难易程度取决于APP对自己的保护程度。主要从以下几种情况来说明:1、使用了OkHttp,但未自己进行封装或修改的: 直接通过hook OkHttp的

2020-05-11 19:11:31 355

原创 koa2 ctx.render is not a function

记录一下该BUG,原因主要是因为js的运行是有顺序的,如果先初始化了Router,在访问时先执行了Router但其后面的ctx.render的render方法还没有绑定到上下文上,就会造成该问题。解决方法:将Router移动到其他的中间件后面去即可...

2020-05-07 23:32:17 815

原创 Groovy简介——编译时方法注入

一般只用于编写一些插件或者模板方法的时候使用,编译后的代码还是会合成为静态代码,会比运行时的处理方式效率更高。需要根据AST来添加对应的语法树。Groovy编译器允许我们进入其变异截断,一窥其所处理的AST(Abstract Syntax Tree 抽象语法树)。AST:这就是生成的语法树:Groovy支持开发者在任何阶段介入:初始化、解析、转换、语义分析、规范化、...

2019-11-26 16:31:09 721

原创 Groovy简介——运行时MOP

概况 Groovy是一个动态语言,类型不用定义的语言。它运行与JVM之上,编译器会先将Groovy代码编译为Java语言,然后编译为字节码。Groovy在编译的时候会先生成AST(抽象语法树,Abstract Syntax Tree),同时Groovy也提供了AST的操作方法,也就是说在Groovy编译时可以插入一些模板方法甚至根据AST插入对应的方法。还有一个很重要的...

2019-11-26 16:27:21 873

原创 在安装完了证书和各种配置之后Charles仍然无法抓包问题

文章目录现象解决办法总结现象由于公司开发需要抓包工具,在配置好了charles的证书和手机的证书之后,手机访问https的地址仍然无法访问,一直提示unknownYou may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in th...

2019-10-31 11:35:41 5849

原创 Android 共享元素动画,返回时会闪一下的问题

造成的原因是因为在返回时onResume方法会进行一个共享元素的Alpha赋值,会先赋值为0,再到1,所以会有明显的闪屏。修改方式:在闪屏页面添加callbacksetExitSharedElementCallback(new TransitionCallBack());@TargetApi(Build.VERSION_CODES.LOLLIPOP)public clas...

2019-08-19 15:16:21 3234 1

原创 Android 共享元素动画不生效问题

在使用共享元素动画时,遇到了设置不生效问题,原因在于Activity被设置了全局主题,主题中没有开启共享View的支持,只需要新建Actvity主题即可<style name="TransTheme.CardDetail" parent="Theme.AppCompat.Light"> <item name="android:windowContent...

2019-08-01 11:18:59 1736

原创 Android反编译与Xposed所必须了解的事情(二)

一、Xposed使用步骤Gradle引用依赖 Manifest中添加meta内容识别 添加assets文件夹,创建xposed_init文件,用于hook文件识别 编写hook代码,hook对应的类和方法二、流程解析接上篇内容,依旧以打开LOG为目的,之前我们已经找到了对应的自定义log类,下面只需要打开log开关。添加Gradle依赖compileOnly 'de.rob...

2019-07-05 16:12:34 276

原创 Android反编译与Xposed所必须了解的事情(一)

一、内容的由来最近做了一些反编译的工作,对反编译的理解从模糊到入门,再到感到敬畏。到现在我竟然不确定我是在门外还是在门内,但我对这件事感到兴趣浓厚,所以准备写几篇入门文章记录一下,也顺便梳理一下最近做的事情。二、反编译的目的学习对方的框架、研究实现逻辑 找到想要的数据,爬对方的数据 hook特殊的方法,进行app的功能拓展 快速熟悉新工程,找到对应的Activity或方法调用...

2019-06-28 18:27:35 1204

原创 组件化—依赖注入和服务定位的实践(二)

一、之前遗留的问题在上一篇文章中,提到了服务定位模式是如何一步一步演变最后实现跨包注册及动态匹配的,但也留了三个问题:1、有没有可能再进一步优化此方案,让初始化也变成动态的呢?2、如果实现类现在还要SDK中的其他依赖又该如何处理呢?3、每次我们在调用方法的时候都需要去初始化一下这个类对象,在有些需求里面,这个LoginService的对象其实完全可以是单例或者是在某个作用域下是单例...

2019-06-26 19:18:44 125

原创 组件化—依赖注入和服务定位的实践(一)

一、使用背景随着Android组件化的不断深入,各个模块之间相互分离,尽可能的做到各个module内部强内聚,并且降低对外的耦合度。IOC(Inversion of Control)原则在这个过程中发挥着至关重要的作用,控制权掌握在自己的module内,将我们需要的功能接口对外暴露,让其他业务线实现。但现在问题来了, 1、业务线实现暴露的接口后,在什么时机传递给拥...

2019-06-14 01:38:35 371

原创 NestedScrollView嵌套RecyclerView,firstVisible和lastVisible不好用

因为nestedScrollView嵌套RecyclerView之后,RecyclerView计算的高度大小最总大小,因此firstvisible永远是0,last永远是最后一个。 为了实现视频滑出屏幕就停止播放,只需要监听NestedScrollView的滑动距离,然后获取子View的位置,判断是否在范围内即可。 package com.bizrun.hibao.persona...

2018-12-21 17:01:26 1110

原创 热更新总结--资源文件格式

本文章主要根据阿里出的《深入探索Android热修复技术原理》后的个人总结 资源打包 resources.arsc实际上是由一个个的ResChunk拼接起来的,一般来说一个resources.arsc里面包含多个package,但是由AAPT打包只有一个package,这个package包含了APP中的所有资源信息。每个资源都在APP中都有唯一的编号,编号是一个32位数字,用16进...

2018-12-19 17:10:42 727 1

原创 热更新总结--冷启动热更新

本文章主要根据阿里出的《深入探索Android热修复技术原理》后的个人总结 一、为什么直接补丁类直接导入到补丁包中,运行类加载时会产生异常并退出?首先,因为dex加载到本地内存时,如果不存在odex文件,那么首先会执行dexopt,其中if(doVerify){    if(dvmVerifyClass(class)){        ((DexClassDef*)pCla...

2018-12-19 17:09:47 3200

原创 热更新总结--热部署更新

本文章主要根据阿里出的《深入探索Android热修复技术原理》后的个人总结 打补丁是通过反编译为smali然后新APK跟基线APK进行差异对比,得到最后的补丁包。类替换(关键点ArtMethod)replaceMethod(src,dest)artMethod ptrsizedfields入口Method dispatch from quick compiled cod...

2018-12-19 17:08:17 1553

原创 VS CODE, Props在编译器中提示error

VS CodeProps字段在文件中报错,原因是因为TS/JS的插件暂不支持导致的。可以如下修改:1、安装Flow插件,Flow Language Support  2、二选一:     1)找到已安装插件的TS/JS禁用,并重启    但这样有时候联想会失败。    2)在setting.json里将 javascript.validate.enabl...

2018-09-25 11:31:18 1160

原创 Retrofit 默认encode

Retrofit 在使用QueryMap、Query、Field和 FieldMap时,会自动在OkHttp.HttpUrl的public Builder addQueryParameter(String name, String value)方法中自动替换“ "'&lt;&gt;#&amp;=”为转义字符...

2018-03-15 15:37:47 1000

原创 MAC编译Android源码 prebuilts/misc/darwin-x86/bison/bison出错

错误提示:[  0% 438/72411] //external/one-true-awk:awk yacc awkgram.yFAILED: out/soong/.intermediates/external/one-true-awk/awk/android_arm64_armv8-a_core/gen/yacc/external/one-true-awk/awkgram.c out/s

2018-01-11 16:14:12 2343 1

原创 WARNING: Only bash is supported, use of other shell would lead to erroneous results

编译envsetup.sh出现Only bash is supported, use of other shell would lead to erroneous results看了一下脚本内容if [ "x$SHELL" != "x/bin/bash" ]; then case `ps -o command -p $$` in *bash*)

2018-01-08 15:33:26 3756 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除