所有分类创业AI人工智能编程开发科学上网山地自行车论文生活小技巧收藏视频旅游健康与饮食人生经验
Google搜索技巧
Google搜索技巧
https://www.google.com/search?tbs=cdr:1,cd_min:12/31/2016,cd_max:12/31/2019&q=搜索关键字 tbs参数通常用于指定搜索结果的时间范围。在这里,cdr是custom date rang,1表示按自定义日期范围搜索,cd_min:12/31/2016指定了最早日期为2016年12月31日,cd_max:12/31/20
2024-11-12
暂无分类
Github搜索技巧
牛马可见
Github搜索技巧
[没有阅读权限]
2024-10-19
暂无分类
Android系统应用
Android系统应用
App安装方式:install和push。install命令安装到/data/app目录,push命令一般往/system/app或/system/priv-app目录推送 Android中不同应用权限级别从低到高总结场景 (1)/data/app 普通应用。只用到了普通权限,比如上网权限等等。 (2)/system/app 系统应用,用来可以限制无法手动卸载,对系统权限没有要求的情况,无法调用系
2024-10-09
暂无分类
编译Android系统的可执行文件—libcap
编译Android系统的可执行文件—libcap
Linux的Capabilities机制可以对root身份进行更加精细的控制。在研究tcpdump如何在android上运行时,遇到了一个难题:You don't have permission to capture on that device,(socket: Operation not permitted),可是我明明已经把tcpdump文件权限设置成了777,按道理不应该出现这个问题。后来
2024-10-05
暂无分类
Kotlin协程Channel和Flow
Kotlin协程Channel和Flow
先看这里 flow和channel的区别,flow的消息会被消费N次,channel的每个消息只会被消费一次 SafeFlow不是线程共享的,MutableStateFlow和MutableSharedFlow是线程共享的 MutableStateFlow遇到相同的消息不会通知观察者,MutableSharedFlow不管消息是否相同都会通知观察者 SafeFlow 默认情况下,调用kotlin提
2024-09-28
编程开发
解决AndroidStudio编译时Gradle依赖冲突的问题
解决AndroidStudio编译时Gradle依赖冲突的问题
./gradlew :app:dependencies > dependencies.txt 查看模块的依赖关系,保存到文件中 在报错信息中找到报错的依赖,或者版本号,再去刚才保存的dependencies.txt中搜索关键字,这样就能找到问题的根源 在maven版本库可以搜到所有版本号,针对报错的依赖库进行升级或者降级,问题就能解决 补充 有些报错比较抽象,比如下面这个问题: C:/Us
2024-09-25
编程开发
定义和使用AIDL接口
定义和使用AIDL接口
定义AIDL接口 使用场景:在library/module中定义AIDL,打包成sdk,再给其他APP调用 第一步,新建一个module,取名为sdk,在main目录下新建AIDL文件 编辑器报错,无法创建,我们需要在build.gradle文件设置一下,内容如下: 添加之后再sync一下,然后就可以创建AIDL文件了,AIDL文件长下面这个样子 文件名以.aidl结尾,里面的内容跟我们平时
2024-07-27
编程开发
同步锁
同步锁
公平锁: 每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的,最前面的线程总是最先获取到锁。公平锁的优点是按序平均分配锁资源,不会出现线程饿死的情况,它的缺点是按序唤醒线程的开销大,执行性能不高 非公平锁: 每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,所有线程会竞争获取锁。非公平锁的优点是执行效率高,谁先获取到锁,锁就属于谁,不会“按资排辈”以及顺序唤醒,但缺点是资源分配随机性强,可
2024-07-25
暂无分类
Android-View绘制机制-高级
Android-View绘制机制-高级
调用流程:ActivityThread.handleResumeActivity-->WindowManager.addView(DecorView,LayoutParams)-->WindowManagerGlobal.addView-->ViewRootImpl.setView-->requestLayout()-->scheduleTraversals() vo
2024-07-24
暂无分类
Okhttp源码
Okhttp源码
使用方法 val client = OkHttpClient() val builder = Request.Builder().url("https://example.com") // 1.同步请求 client.newCall(builder.build()).execute() // 2.异步请求 client.newCall(builder.build()).enqueue(object
2024-07-12
暂无分类