avatar
文章
97
标签
33
分类
13
首页
归档
标签
分类
友链
关于
Fleming's Blog
搜索
首页
归档
标签
分类
友链
关于

Fleming's Blog

Soong 构建系统原理
发表于2022-08-26|系统
Soong 构建系统原理非常好的问题!我们来深入解析 AOSP 的 Soong 构建系统,它的编译原理、设计思想以及与传统构建系统的区别。 🌟 一句话总结 Soong 是 Google 为 AOSP 量身打造的下一代构建系统,它使用 Go 语言编写,基于 Ninja 构建引擎,通过 Android.bp 文件描述模块依赖和构建规则,目标是替代旧的 Make 系统(Android.mk),实现更快、更清晰、更可维护的系统级编译。 🔧 Soong 的核心组成 组件 作用 soong_ui 用户接口,替代 make,调用 soong_build soong_build (Go) Soong 的核心逻辑,解析 Android.bp Blueprint Soong 的底层框架(由 Google 开发),用于解析 .bp 文件 Android.bp 构建配置文件(类似 JSON 的语法) Ninja 实际执行编译命令的底层引擎 Kati 将旧的 Android.mk 转成 Ninja 规则(兼容层) 🔄 Soong 的编译流程(原理详解)✅ 阶段...
Kotlin语法糖
发表于2022-02-08|Code
Kotlin语法糖Kotlin 是一种现代编程语言,它引入了许多语法糖和特性,旨在提高代码的简洁性和可读性。以下是一些 Kotlin 中常用的语法糖和特性: 1. 数据类(Data Classes)Kotlin 的数据类自动生成常见的方法,如 equals(), hashCode(), toString(), copy() 等。 1data class User(val name: String, val age: Int) 2. 属性委托(Property Delegates)属性委托允许你将属性的 getter 和 setter 代理给另一个对象。 12345class User { var name: String by Delegates.observable("John Doe") { prop, old, new -> println("$old -> $new") }} 3. 智能转换(Smart Casts)Kotlin 的智能转换允许你在类型...
ip定位
发表于2022-02-08|经验
1、自有搭建IP 定位框架 GeoIP2 for Java:https://blog.csdn.net/GodSuzzZ/article/details/108095385官网:https://www.maxmind.com/en/geoip2-services-and-databasespy:https://pypi.org/project/geoip2/#description 2、免费转接寻找免费获取ip信息站点经过我们自己服务转一下https://ipapi.co/218.104.82.74/json 3、付费接口https://timezoneapi.io/api/ip/?token=aeLjNqtdVzUgQeiYumTC
图片下载及保存
发表于2022-02-08|Code
图片下载及保存 确定文件的下载路径,context.getExternalFilesDir(“images”),即app外部存储的files路径,无须动态权限声明 创建URL对象,val url = URL(path),由图片的下载地址创建 通过url.openConnection()打开连接,获取连接对象 连接conn.connect() 获取输入流,val input: InputStream = conn.getInputStream() 创建输出流,准备写入val fos = FileOutputStream(out) 标准io操作,将读到的字节写入到文件中 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253try { val buf = ByteArray(1024) var numRead: Int fos.run { while ((inpu...
国内镜像地址
发表于2022-02-08|Code
国内镜像地址1234567891011121314151617181920buildscript { repositories { maven { url 'https://mirrors.huaweicloud.com/repository/maven/' } maven { url 'https://maven.aliyun.com/repository/public/' } }}allprojects{ repositories { maven { url 'https://mirrors.huaweicloud.com/repository/maven/' } maven { url 'https://maven.aliyun.com/repository/public/' } }}
Retrofit面试问题
发表于2022-02-08|经验
Retrofit面试问题介绍下Retrofit框架,Retrofit为什么要包装okhttp呢? Retrofit 是一个类型安全的HTTP客户端,用于Android和Java应用。它允许你通过定义接口来描述HTTP请求,包括URL、请求方法(GET, POST等)、请求头以及请求体等内容。 Retrofit 包装了 OkHttp 主要是为了提供更高级别的抽象,简化网络请求的配置与执行。OkHttp 是一个高效的HTTP客户端,而 Retrofit 在其基础上提供了对REST API更加友好的支持,如动态代理、注解配置请求、数据转换等。 Retrofit主要实现机制?Retrofit的作用、原理 Retrofit 的核心是使用动态代理来创建接口的实现类,将HTTP请求的方法调用转化为实际的网络请求。它的作用是让开发者以一种声明式的方式来定义网络请求,并且可以很容易地进行扩展和修改。 底层是如何用 OkHttp 请求的? 在底层,Retrofit 使用 OkHttp 发送网络请求。当你构建了一个 Retrofit 实例时,你可以为其指定一个 OkHttpClient 对象,这样...
core-ktx及appcompat是什么
发表于2022-02-08|经验
core-ktx及appcompat是什么core-ktx是Android官方发布的一个Kotlin扩展库,主要提供了对Android原生API的Kotlin语言扩展和优化。 core-ktx的主要作用包括: 为Android原生API提供了惯用的Kotlin语法扩展,使代码更简洁。比如View.show()隐藏了findViewById。 提供了一些Kotlin特有的语言功能来优化Android API,如空安全、高阶函数等。 加入了一些Kotlin协程相关的扩展,可以更方便地使用协程。 提供了部分标准库函数的扩展,如集合相关的扩展函数。 简化了资源访问,避免重复代码。 支持了一些Kotlin版本更新带来的新特性。 向下兼容旧版本Android API。 总之,使用core-ktx可以写出更优雅简洁的Android代码,提高开发效率。它降低了从Java转换到Kotlin的学习成本,是一个非常值得引入的库。主流的Android项目基本上都会依赖该扩展库。 appcompat是AndroidX中的一个重要支持库,它主要提供了向后兼容旧版Android系统的功能。...
VideoView视频播放
发表于2021-12-16|Code
VideoView视频播放123456789101112131415val videoView = findViewById<VideoView>(R.id.videoView)val videoUri = Uri.parse("android.resource://$packageName/${R.raw.my_video}")videoView.setVideoURI(videoUri)// 添加播放控制val mediaController = MediaController(this)videoView.mediaController = mediaControllermediaController.setAnchorView(videoView)// 循环播放videoView.setOnCompletionListener { videoView.start()}videoView.start()
创建前台服务通知
发表于2021-11-28|Code
创建前台服务通知ANR(Application Not Responding) 错误,是 Android 系统中一个典型的 前台服务启动违规 问题。具体错误信息如下: 12Reason: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{... com.hansong.orion.sipclient/.service.SipAidlService} 🔍 问题原因从 Android 8.0(API 级别 26)开始,Google 对 前台服务(Foreground Service) 的使用做了严格限制: 如果你通过 Context.startForegroundService() 启动一个服务, 那么该服务 必须在 5 秒内 调用 startForeground(int id, Notification notification), 否则系统会抛出 ANR,并可能杀死你的应用。 你的 SipAidlService 被通过...
列表匹配
发表于2021-11-21|Code
列表匹配12345calendarEvent?.userList?.let { list -> // 先转成map,时间复杂度从 O(n×m) 降到 O(n + m),性能更好 val relatedUserMap = users.associateBy { it.uid } mAdapter.setNewInstance(list.mapNotNull { relatedUserMap[it.uid] }.toMutableList())}
1…345…10
avatar
Fleming Chen
不积跬步无以至千里,不积小流无以成江海。——《荀子·劝学》
文章
97
标签
33
分类
13
Follow Me
公告
欢迎来到我的博客,有任何疑问可以随时联系我交流讨论!
最新文章
音频流处理过程
音频流处理过程2026-01-16
AOIP和VOIP
AOIP和VOIP2026-01-06
AudioFlinger的基本概念
AudioFlinger的基本概念2025-08-28
音频领域基本概念
音频领域基本概念2025-08-20
Unicast、Multicast、Broadcast的含义及关系
Unicast、Multicast、Broadcast的含义及关系2025-08-19
分类
  • ADB9
  • Code18
  • Flutter1
  • Git10
  • Grep1
  • Linux3
  • Repo2
  • Unity 3D1
标签
Markdown 架构 unity adb 学习路线 Android Studio 日常 系统广播 git UI 缓存 AlertDialog Dialog Handler LruCache BroadcastReceiver 音频 MVP SQLite flutter 数据库 经验 AsyncTask Message EditText 系统 IDE 扩展 开发工具 代码 linux Android 自学
归档
  • 一月 2026 2
  • 八月 2025 3
  • 七月 2025 5
  • 六月 2025 1
  • 四月 2025 2
  • 十一月 2024 1
  • 七月 2024 2
  • 二月 2024 3
网站信息
文章数目 :
97
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2016 - 2026 By Fleming Chen框架 Hexo 6.1.0|主题 Butterfly 5.5.4
搜索
数据加载中