Android Studio 通过二维码使用WIFI连接手机原理分析
前言
由于开发需要,下了最新版的 Android Studio(Dolphin) ,发现在选择 Android 设备的时候多了一个 Pair Devices Using WI-FI ,然后这里可以使用二维码和配对码,我使用了二维码进行配对,发现挺方便的,可以不用数据线了。
本文会分析一下实现的过程。
由于开发需要,下了最新版的 Android Studio(Dolphin) ,发现在选择 Android 设备的时候多了一个 Pair Devices Using WI-FI ,然后这里可以使用二维码和配对码,我使用了二维码进行配对,发现挺方便的,可以不用数据线了。
本文会分析一下实现的过程。
一直都想在 Emacs 中做 flutter 开发,早些年用起来非常卡,这两天试了下还挺不错的,记录一下。
内存泄漏是一个开发不得不面对的问题,在 Android 中有许多工具都可以用来检测内存泄漏,比如:MAT、Profile等。
但是这些工具都需要手动操作,比较麻烦,所以我们需要一个能够自动检测的工具,它就是LeakCanary。
今天就来了解一下原理,毕竟面试也是常问的问题。
在 JNI 中如果需要调用 Java 的方法,首先需要使用 FindClass 获取到 jclass ,然后使用 GetMethodID 获取到对应方法的 ID ,字段也是一样的要使用 GetFieldID 来获取。
如果每次都要查找一遍,是比较麻烦和耗时的,今天就来研究一下怎么把它们缓存起来以提高性能。
有过 JNI 开发经历的都知道,在创建局部引用之后要释放。可是我们经常却直接返回 env->NewStringUTF("") 到 Java 没有释放,并且不会有问题,本文就来研究一下局部引用的释放问题。
市面上那么多输入法为什么还要折腾一个新的输入法?
许多年前有爆出输入法泄漏隐私的问题,一些数据没有经过加密传输。
这些想想都让人后怕。经过一段时间的摸索,逐步上手了 RIME ,因为 RIME 并不是那么容易上手,所以我把摸索的一些经验写成文章,希望能帮助到想使用 RIME 的伙伴。
最近在学习 Rust , Rust 中也有引用,这让我有点好奇 Rust 的引用是不是与 C++ 一样,于是便有了此文。
在日常开发中,经常需要调试服务端返回的数据,我们常用的有 Postman 、 PostWoman 等等。
但是我习惯了在 Emacs 中做完这一切,不想去安装其他软件,于是在 Emacs 中也找到了 restclient 这个插件,它能满足我的需求。
所以今天要来分享一下 restclient 的使用。
在上一篇文章go实现文件上传/下载服务中讲到了自己实现一个文件上传服务,然而我发现gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang).也默认提供了文件上传服务。
本文就来看看 Gin 中的文件上传服务。
|
|
我们创建一个 ginupload 的目录用来存放代码,并且使用 go mod 来管理依赖。
在开发的过程中,难免会碰到上传/下载文件的场景。如果这个功能服务端没开发好,就没法进行测试。
所以每次都要自己先实现一遍,本文使用 go 写了一个简单的文件上传和下载服务。
以后再碰到这种场景的时候就可以快速进行开发。
继上一篇用 Rust 开发 iOS 开发折腾之后,我又折腾起 Android 了。
最开始我是先从 Android 上下手的,不过一直没成功,直到最近才成功了。
本文默认你已经把 Rust 安装好了。注意需要使用 stable channel ,我之前使用的是 nightly 所以一直失败。
nightly channel 会报 dl_iterate_phdr can't find 错误,这个错误一直误导了我,我一直以为是链接上的问题,所以折腾了很久。
直到我换了一台电脑试了一下,居然成功了,才发现使用的 channel 是不一样的。
Rust 是近几年特别火的语言,之前学过几次,每次学完之后就不了了之,没有实际用到项目中。
所以每次学习的时候都感觉像是最熟悉的陌生人,所以最近想要在移动端进行实战,于是开始了折腾之旅,这篇就是 Rust 在 iOS 上的探索。
今天来说一下 CocoaPods 的安装。
CocoaPods 是用来管理 iOS 开发中用到的第三方库,类似安卓中的 Gradle 、 Maven 的工具。
在 iOS 的开发中会经常用到,对我这样的 iOS 新手,一段时间不用,不免遗忘,所以用来记录一下,以后查找起来方便。
最近在研究 Cronet 网络库,涉及到 Android 和 iOS ,由于对 OC 不怎么熟悉,所以在使用的时候碰到了 C++ 与 OC 互相调用的问题,于是便有了此文。
最近在下载 chromium 源码,下载完之后需要切换到指定的分支,这时候使用 git fetch 进行切换,但是不是一次就能成功。
所以需要不断执行 git fetch ,但是随着执行的次数增多,我发现磁盘的空间却越来越少。
也就是 git fetch 失败后占用了磁盘空间并没有释放。
在查找资料后发现使用 git prune 可以解决这个问题。
git prune 会删除没有使用的 hash 文件,由于我们这边 fetch 失败了,所以这些文件是没有使用的。
执行之后磁盘瞬间释放70G空间。
Cronet 是 Chromium 浏览器中用于网络请求的库,支持 HTTP1/2 、 SPDY 、 QUIC 等协议。并且还支持移动端。
需要注意的是编译 Android 需要在 Linux 下进行,并且只支持 Ubuntu 和 Debian 的发行版,其它的不支持。
gdb 是 GNU 下的一款调试器,支持常见的语言,例如 C/C++ 、 Go 、 Rust 等等。
调试器对我们开发程序的时候有非常大的帮助,是每一个开发都需要学会的调试技能。
今天来了解一下 gdb 的使用。
在Emacs中使用Forge管理GitHub Pull Request中,我聊到了在 Emacs 中使用 Forge 管理 GitHub Pull Request ,今天来讲一讲怎么管理 GitHub Issue 。
使用之前需要配置 GitHub 相关信息,在Emacs中使用Forge管理GitHub Pull Request中有说过,不了解的可以前往查看,这里不再赘述。