自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

千里之行始于足下

Keep on self investing.

  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 could not create makefile due to some reason probably lack of necessary cocoapods

cocopods 安装失败。解决办法:因为macos自带的ruby版本较老导致。安装rvm。How to upgrade Ruby versions for your Ruby on Rails app (satchel.works)升级cocoapods到2.7.4。成功。

2021-08-11 17:18:43 2100

原创 test.sh: line 4: syntax error near unexpected token `then‘

#!/bin/bashtype="release"build="prd"if [ $type == "release" ] ;then echo "release" if [ $build == "prd" ];then echo "prd" elif [ $build == "stg" ];then echo "stg" fielif [ $type == "debug" ];then echo "debug" if [ $build.

2021-06-02 17:31:37 799

原创 Leetcode 529. 扫雷游戏 题解

题解见注释:class Solution { //以[0,0]为节点,对应的周围8个节点的delta相对位置的变化 int[] deltaY = {-1,0,1,-1,1,-1,0,1}; int[] deltaX = {-1,-1,-1,0,0,1,1,1}; public char[][] updateBoard(char[][] board, int[] click) { //对应row int x = click[0];

2021-02-27 19:52:03 403

原创 aspectd调试用脚本

aspectd自身也有一些尚未完善的地方,部分注解并不支持,比如对构造函数做一些注解生成。有一些问题,如:1.构造函数带参数类2.构造函数带泛型类3.构造函数带const类型这些就需要修改到aspectd的源码了,修改了源码又要重新生成一些中间产物。如果每次都手动去删除一些文件和目录就很繁琐。写了一个脚本,方便调试。如下:#!/bin/bashprojectPath=/Users/local-admin/Documents/coderm -rf $projectPath/load_m

2021-02-22 14:21:21 172

原创 关于flutter pubspec.yaml动态版本号问题

问题:拉出老的release库的代码,发现flutter部分的代码无法编译通过,打不出老的release包。问题分析:develop分支flutter库代码中的pubspec.yaml中的版本号都是动态模式。加了^符号,会默认指向a.b.c 版本号中c的最高位置。例如: ^0.1.2如果远端的pub库上的最新版本是0.1.3,那么本地使用的实际最终会是0.1.3。在自动对齐的过程中,有可能出现一些三方库的api变更,导致flutter编译的时候第三方库指向了最新版本的不.

2021-01-27 18:57:32 2374

原创 Aspectd 原理浅析

以一个简单的例子来解释aspectd改造后的代码的调用过程。声明一个简单的类Aclass A { int m;}void main() { A a = A(); print('a value :${a.m}'); ...}在main()方法中打印一下。写一个注解,hook 一个名为A的类的构造函数。向该类调用的前后点加注释。import 'package:aspectd/aspectd.dart';@Aspect()@pragma("vm:entry

2021-01-11 00:08:25 645 2

原创 AspectD 构建流程

项目构建流程下面分析一下aspectd是的执行过程是怎样的,我们先看一下aspectd给flutter tools打的git patch上的代码。主要改了两个类。一个新添加的aspectd.dart,另一个common.dart是系统原有的类。我们先看common.dart可以看到对KernelSnapShot类的build方法做了一些修改。也就是修改了原来生成dill的流程。把原来的编译流程抽取出来到buildImpl()方法中。增加了如下判断。 await b

2021-01-10 23:27:16 281 1

原创 AspectD 项目结构分析

应用场景AspectD是一款闲鱼推出的开源的代码插桩工具。使用它需要hook flutter的sdk。因为它需要修改flutter的构建流程。flutter产物有一个从dart代码到app.dill再到kernel.bin的过程。分析项目如何集成我们先以官方的example为例来分析一下。对于普通的flutter工程,你可能以为example是项目的入口,其实不是。aspectd因为要去做一些hook操作。修改了项目的入口,每次都会去找项目中是否有aspectd_impl目录,如果有的

2021-01-10 23:26:34 296

原创 从dill角度解释dart const 与final的区别

const和final来修饰属性field都表示对象不可变。但是const在编译期起到作用。而final则是在运行期起作用。可以通过dart sdk源码中提供的dump_kernel工具来更深刻地认识一下。dart编译的过程,会先扫描dart文件,生成ast树,然后生成dart intermidate language file即app.dill,然后根据aot或者jit生成不同的产物。可以看一下const在ast转换成dil文件后,产物中的形态。static const field asy.

2021-01-07 16:08:40 308

原创 Error 105 received from application: Isolate must be runnable

最近在处理flutter内存泄漏相关的代码。经过一番分析后发现是我通过FlutterJNI获取与VM通信的地址时错误调用FlutterJNI导致。FlutterJNI flutterJNI = new FlutterJNI();flutterJNI.attachToNative(false);String url = FlutterJNI.getObservatoryUri();在flutterJNI调用attachToNative()会导致flutter engine层重新构造一个Flu

2020-09-27 19:47:12 686

原创 x server probably went away vscode ubuntu vnc下无法启动

x server probably went awayvscode vnc下无法启动解决办法:Hack worked vscode works via xrdp in Ubuntu MATE 16.04:make a backup first sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/' /usr/lib/x86_64-linux-gnu/libxcb.so.1地址:https://github.com/microsoft/vscode/issues/

2020-08-19 16:16:15 294

原创 gradle全局设置阿里云仓库

以前总是手动设置,今天在看gradle设置init脚本的时候,看到一个讲可以设置一个gradle启动初试执行脚本,于是想到是否可以在gradle每次初始化时,自动去替换工程中的maven仓库位置,指向阿里云。不然每次run都要开代理。https://www.cnblogs.com/langtianya/p/5220212.html这样我在.gradle下面建一个init.d的文件夹,然后放个build.gradle文件。allprojects { repositories {

2020-07-16 22:50:21 6505

原创 通过analyzer分析dart代码

比如有个需求:通过分析注解,来生成一段dart代码。dart上如果要自动生成代码,那么就需要用到代码生成器,code generator,这和Android里面apt类似。一般我们会引用source_gen声明一些generator,然后放在build.yaml里面,调用build_runner来生成代码。如果不想使用框架,而是自己手写这个过程呢?1.从dart文件读入代码2.分析代码,读出里面的annotation对应的value值。3.根据value值,自己再生成代码字符串.

2020-06-19 16:37:12 3137 2

原创 nginx location问题

想通过jenkins自动构建prd生产和sit测试两套代码,并且分别放在http://www.flutterexample.com/和http://www.flutterexample.com/sit/下面。我在/etc/nginx/aviable-sites/node中配置的路径一直不生效。访问404.于是开始定位问题,刚开始下面的也用的root而非alias。想到查看nginx日志。/var/log/nginx/error.log。发现:请求的时候不是在web2目

2020-05-26 22:21:42 291

原创 Flutter web 跨域问题

背景:用flutterweb工程做了一个产物化平台,现在想在里面去展示aar构建的信息。nexus有api可以对外来访问。通过dio去拿相应的数据即可。问题:80端口下面的flutter web工程访问8081端口下的nexus服务,请求失败。http://127.0.0.1:8081/service/rest/v1/components/bWF2ZW4tcmVsZWFzZXM6Zjg5OGIzOTAzY2I5OWM1OTYyNTVjZGUzNDQ2N2Q0OGE通过postman或者客

2020-05-26 18:58:49 3779

原创 windows远程桌面到蓝屏卡死

现象:ubuntu远程桌面xrdp, tightvnc 等都配好后,远程桌面过去,输入用户名,密码后卡住。解决办法:发现和安装顺序有关系。sudo apt-get remove xrdp vnc4server tightvncserversudo apt-get install tightvncserversudo apt-get install xrdpsudo service xrdp restart...

2020-05-14 20:34:41 1409

原创 Jenkins用户名忘记以及多用户管理

用户名忘记解决办法:1.找到jenkins配置文件sudo gedit config.xml修改为false。2.重新登录删除老用户主面板people--->某个用户--->delete,可以删除老的用户3.新建用户勾选enable security jenkins' own user database 应用后,会引导到重新输入用户名,密码。权限分配权限方法:...

2020-05-13 16:55:03 365

原创 flutter --version卡死解决办法

开启verbose查看信息。flutter --version --verbose看到一直卡在github.com pull这里,于是考虑到修改flutter git镜像到国内。修改_flutterGit的路径为再次运行运行顺利。

2020-05-13 16:44:20 2962

原创 windows、ubuntu一个机器配两套flutter环境方法

如果下两份fluttersdk,然后手动修改.bash_rc就会非常麻烦。而经常会有这样的需求,比如:1.想从旧的sdk 1.9升级代码到新的sdk 1.12.13,需要两个环境都跑2.想在develop、master分支跑flutter web等等有没有简单的办法?利用alias1.修改~/.bash_rc如果没有添加如下脚本则手动加上if [ -f ~/.bash_aliases ]; then. ~/.bash_aliasesfi2.touch .bash_al

2020-05-12 22:51:12 266

原创 Flutter For Web配合Nginx搭建一个简单的网页

Ubuntu上部署的项目多了,想弄个entrance一起管理一下。先看下最终效果:1.开启flutter的web模式//只有master和develop等分支支持flutter web,stable是不行的。flutter channel master//开启支持web模式flutter config --enable-web trueflutter devices可以看到新增了chrome//创建一个新web项目flutter create .flutt

2020-05-12 20:07:47 1495 1

原创 Android工程通过Aar远端集成maven仓库中的flutter产物

1.搭建nexus maven仓库2.搭建jenkins3.修改flutter tool中的源码,改变flutter build aar 执行的代码最开始项目是通过源码来依赖flutter工程的,这样,原生的开发人员,避免不了要不断地拉flutter代码,项目复杂后经常容易报错,而非flutter的开发人员调试起来又感到茫然,而且降低工作效率。于是想到把flutter的通过aar集成到原生中。1.搭建nexus maven仓库最好搭建一台ubuntu的机器,这样服务比较稳定。.

2020-05-12 16:03:23 573

原创 scrcpy无法启动的问题

问题:提示adb连接失败解决办法:调用scrcpy自带的adb tool,否则会执行ubuntu自带的adb。scrcpy.adb kill-serverscrcpy.adb start-serverscrcpy.adb devicesscrcpy.adb --version会看到和Ubuntu 环境变量中的不一样。如果用系统环境变量中的adb去连端上的server,就会出现adb client(xx) doesn't match server(xx)的错误。...

2020-05-09 12:35:16 17996

原创 Ubuntu远程桌面修改

Ubuntu远程桌面修改问题解决办法之一ubuntu中的远程桌面组成那么如何切换呢?问题xfce属于轻量级的远程桌面。但是在使用的过程中,一段时间未使用后,之前在里面启动的进程都被杀了。而我之前在这台机器上部署了一个私有pub服务来满足公司里的flutter pub库的拉取。以前一直很正常,现在非常不稳定。解决办法之一切换回原来的ubuntu桌面。防止多个远程桌面session的存在。u...

2020-05-07 10:53:26 596

原创 ADB server version (36) doesn't match this client (41)

1.adb --version查看当前adb的版本2.先where adb可以查看有几个路径提供了adb,一些模拟器比如mumu player之类的会有提供,但他们的版本可能比较老。就会导致client的version和adb server的version不一致。3.到环境变量中把老的adb路径去掉即可。...

2019-11-25 15:37:38 1559

原创 pub私有仓库相关问题

启动过程端口占用:windows上启动显示端口占用。1.找到8080占用的端口:netstat -aon|finstr "8080"2.killtaskkill /pid 6008 /f3.再次启动dart仓库dart ./example/example.dart...

2019-10-10 11:00:43 372

原创 dart pub私有仓库搭建、私有仓库上传方法、上传工具定制

dart 的官方网站提供了一个simple dart server,具体使用方法参考相关github的地址。https://github.com/dart-lang/pub_server我们选了一个PC作为服务器,24小时不关机。然后在内网中部署服务。配置好后,服务启起来。主要障碍在于上传的过程需要科学上网,科学上网结束后,又需要切回到内网。使用flutter 默认的pub c...

2019-09-29 15:18:01 6023 1

原创 Android AppHost源码挂载flutter,gradle sync失败,源码编译不过的常见排查手段:

每次切库,真是件痛苦的事情,一堆环境问题,特别是项目1.gradle sync失败windows: del /s /q *.iml,删除所有的.iml文件,然后删除AppHost,app等目录下里的.idea文件夹。2.Android宿主找不到flutter类检查AppHost中的app工程的build.gradle对flutter依赖是漏掉implementation pr...

2019-08-20 19:11:08 396

原创 flutter配置相关的bug

2019-07-23 11:35:07.367 11006-11006/? A/DEBUG: r0 00000000 r1 00002a8c r2 00000006 r3 000000082019-07-23 11:35:07.367 11006-11006/? A/DEBUG: r4 00002a8c r5 00002a8c r6 ffaae8fc ...

2019-07-23 11:41:06 872

原创 flutter 上手感悟

Android端flutter开发上手体会:调试效率有了质的提升。flutter上面很多东西比较新,按道理来说从接触dart,到开发出一个flutter页面比Android原生开发要慢很多的,但是很重要一点,flutter支持热重载,dart在debug与release模式下分别是JIT,AOT。开发模式下通过JIT模式,修改代码后,ctrl+s 保存一下,自动刷新到Android手机,1s...

2019-07-17 10:08:49 1278 1

原创 Android jrebel 空指针无法编译

jrebel是热部署的利器,项目中不知道谁升级了gradle版本,导致jrebel无法使用,Android界面开发效率大大降低。亲测将distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip降到distributionUrl=https\://services.gradle.org/...

2019-06-13 17:09:12 351

原创 错误: cannot generate view binders java.lang.NullPointerException

被这个bug折磨了一整天。由于项目前期大量代码使用dataBinding写的,现在做组件化,拆分成了很多library module,部分界面代码放到了入到了library module中,问题是:死活也编译不过。问题原因:从源码分析,旧的dataBinding在生成java代码的时候,对于library工程中引用到的variable不会生成get方法,导致编译失败。解决方案...

2019-04-22 21:06:46 2253 1

原创 Android页面渲染时间定量统计

简介通过Hook系统API实现启动时长、生命周期、UI绘制时间的检测,达到定量分析Activity性能问题的目标。背景:随着项目功能越来越多,存在部分页面启动时长过长的问题。需要一套定量统计启动过程中各个流程耗时多少的方案。解决方案:利用对系统ActivityThread中Instrumentation、Handler等系统API的hook,实现自动检测activity ...

2019-03-22 14:49:22 5457 1

原创 Manifest merger failed with multiple errors, see logs

点进去也没有具体的错误信息显示。这种情况下,就要增加--stacktrace来调试了。找到Error这一行。情况就一目了然了。引入的第三方sdk中的allowBackup属性冲突了。...

2019-03-13 21:51:31 23885

原创 DexarchiveMergerException

Error:java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dexError:java.lang.RuntimeException: com.android.builder.dexing.De...

2019-03-11 18:05:29 532

原创 关于android模拟器

对于调试较小的应用,adb到手机上安装可以很快,但对于较大size,比如50MB,push到手机安装可能就不是一个好的选择了。调试将耗费大量时间。This is unbearable.今天介绍几款android模拟器来boost你的开发效率。1.NoxPlayer本人安装体验了一下,界面简洁,清爽,Android开发者模式,root,都比较方便,没有定制化,没有广告,原生味道比较好。对...

2018-12-22 18:59:30 1822

原创 Received status code 500 from server: Internal Privoxy Error

发现原因是.gradle目录下的gradle.properties文件中包含了代理,导致公司内部maven库指向的地址找不到。在开启shadowsocks客户端,并在android studio中配置gradle指向某个代理地址后,gradleWrapper会走代理,如果此时要访问内部的maven仓库中的资源,可能会访问失败。如果此时只是关闭shadowsocks中的代理,.gradle目...

2018-12-07 18:30:39 3329 1

原创 RxJava 线程切换原理

 RxJava的线程切换主要涉及到observeOn(),subscribeOn()我们来分析一下这两个方法是怎么做到切换的。observeOn()作用于上一个构造好的Observable实例,RxJava设计比较巧妙的地方是,把线程切换的操作也封装成了Observable放在Observable subscribe()方法和Observer onNext()执行链路中。先分析...

2018-11-10 18:08:31 593

原创 RxJava 中observer链是如何形成的?

接着上一篇博客继续分析。Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception { ...

2018-11-10 16:28:45 869 1

原创 RxJava 中的observable链是怎样形成的?

要理解RxJava框架,就需要理清楚其链路是怎样形成的。先看一段简单的代码:Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception...

2018-11-10 15:35:31 851

原创 lottie加载动画,第一次有延迟问题

lottie是airbnb推出的一个直接将AE工程转化为动画的工具。ae.project-->data.json-->LottieComposition-->Lottie动画之前做一个比较复杂的动画,花了两天时间都在画各种弧,计算运动轨迹等等。感觉我不是在编程,我是在算数学。上lottie的过程,花了半天时间调AE动画,因为设计师的电脑上装插件没装成功。所以AE转json文件的过...

2018-04-23 11:41:40 8125 1

PluginTest

DexClassLoader,动态加载,插件

2015-08-06

空空如也

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

TA关注的人

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