![](https://img-blog.csdnimg.cn/0447647425e246768092a2f6bf820e21.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android开发技术专栏
文章平均质量分 63
总结整理Android开发的技术经验,涵盖应用层、framework、native/rumtime,既有常用的关键技术的说明讲解,也有针对实际问题的分析和解决方案分享。在技术的道路上共同学习进步!
抓饼先生
反正也没人看
展开
-
Android native开发:system/core/libutils
文章目录1. AndroidThreads.h2. Atomic.h3. BitSet.h4. ByteOrder.h5. CallStack.h6. Compat.h7. Condition.h8. Debug.h9. Endian.h10. Errors.h11. FastStrcmp.h12. FileMap.h13. Flattenable.h14. Functor.h15. JenkinsHash.h16. KeyedVector.h17. LightRefBase.h18. List.h19.原创 2023-06-28 11:07:55 · 530 阅读 · 0 评论 -
Android native开发:system/core/base
跨平台支持获取thread id,在Linux上调用gettid()或syscal(__NR_gettid)2)ScopedLockAssertion,为了Clang做线程安全分析的辅助类。还提供一些assertion宏。1)一些thread相关的__attribute__宏定义。临时保存errno,作用域结束后恢复。原创 2023-06-19 17:00:17 · 979 阅读 · 0 评论 -
使用lvm命令修改Ubuntu swap分区
lvm命令管理磁盘分区灵活方便。使用这个命令前提是在安装时选择用lvm管理磁盘。原创 2023-05-06 16:28:35 · 752 阅读 · 0 评论 -
把代码添加到git库的几种方式
(1)用git clone --bare下载一个bare的git库,然后通过remote set-url设置为新的url,通过这种方式可以把原有库的提交记录和tag都提交到新的git库。2)已有本地代码,添加到远程代码库:本地已经创开发好代码,在代码目录中init一个本地git库,然后把git远程代码库链接添加到本地代码库中,这样就可以正常的提交代码了。(2)如果不要原有的提交记录,正常clone代码,把.git删除,按照方式2)的流程提交代码。1)先有有代码库,后添加代码。3)导入其他git库中代码。原创 2023-05-05 10:46:27 · 4161 阅读 · 0 评论 -
使用docker (Ubuntu 20.04)编译Android源码AOSP
另外,如果要开发Linux C/C++程序,新版本的系统会支持更新的编译器和对应的语言版本,旧版本的系统原则上可以单独更新编译器及相关依赖库,但操作比较麻烦,而且未必能够成功。编译AOSP源码,使用比较多的是Ubuntu 18.04和20.04,这2个版本的系统可以按照Google官方的操作步骤进行编译。(2)在容器内创建和外面Host OS中同样的用户(相同的uid、gid),这样容器内外修改文件不存在权限不一致的问题。2)把docker内的用户和文件路径和外面系统做好关联,避免权限等问题,方便开发。原创 2023-05-04 16:46:16 · 2031 阅读 · 0 评论 -
Ubuntu 22.04系统git/repo/github/codeup等 无法用ssh方式下载代码问题修复
经调查,在openssh(8.x版本)由于安全原因,替换了默认的加密算法rsa,改为SHA-1。可以通过配置文件修改默认的加密算法,继续使用rsa算法。查看本机安装的openssh-server版本,是8.9版本。首先确认本地和服务器端的sshkey设置都没有问题。git服务器可正常访问。原创 2023-05-04 10:51:03 · 1009 阅读 · 1 评论 -
Linux下获取线程id的方法总结
getpid()Linux系统调用,获取进程id,也是主线程id。gettid()Linux系统调用,获取线程id。C运行库没有封装这个接口…用syscall()方式调用。在主线程中,getpid = gettid。直接调用Linux系统调用(即上面的gettid)。pthread库函数,返回pthread中的线程id。这个id不同于gettid()的值。不同的实现可能返回不同的结果。使用这个函数,需要在编译时链接pthread库。原创 2023-04-21 10:35:26 · 3425 阅读 · 0 评论 -
Android blueprint 1.1 : hello world - cc_binary
注意:当前shell已经设置过aosp编译环境: source aosp/build/envsetup.sh。原创 2023-04-18 15:29:55 · 503 阅读 · 0 评论 -
在Linux上用update-alternatives配置多版本切换
在Linux环境上做开发,经常需要用到不同版本的可执行文件或者动态库。使用update-alternatives工具可以让多个版本的二进制程序或者动态库同时共存,根据需要进行切换。原创 2023-04-17 16:23:16 · 1711 阅读 · 0 评论 -
C++模板特化示例和总结
类型参数特化为具体类型。非类型参数,值参数,特化为具体数值。模板参数列表定义在template关键字后中,特化参数列表定义在模板名称(类名或函数名)后的中。对于特化的模板,模板参数列表中去掉特化的参数。在类定义或者函数定义中,用特化的类型名替换对应的通用类型参数名,用具体的特化值,替换对应的非类型参数名。特化的通用类型和非类型参数名,不再有效。原创 2023-04-05 17:49:36 · 673 阅读 · 0 评论 -
解决repo sync ( git )报错: git: ‘remote-https‘ is not a git command
在Ubuntu 18.04上下载Android源码,遇到报错:git: ‘remote-https’ is not a git command。原创 2023-03-24 13:33:51 · 4307 阅读 · 0 评论 -
用Clion开发Android AOSP native代码(完整操作步骤)
准备一个用Android.bp编译的工程。也可以用已有工程。使用简单的demo程序,相当于生成一个空的模板工程,可以从头开发程序。先已有一个可以用Android.bp正常编译的工程。打开环境变量开关。在aosp中编译工程,生成CMakeLists.txt文件。导入CLion中使用。原创 2023-03-14 13:37:11 · 1923 阅读 · 0 评论 -
Android VNDK:vendor native development kit 引入原因
简单的说,Android提供一个标准系统和驱动(dt),厂商提供dto,覆盖部分驱动dt,适配特定设备硬件。1)引入隔离层HAL(hardware abstract layer),让vendor模块和底层框架没有之间依赖,vendor模块通过HAL使用底层的功能,vendor模块只能依赖于同层级的native库。4)HAL实现框架:hwbinder,结合AIDL,借助底层binder机制,实现vendor模块和底层模块的通信,同时满足效率目标。阶段总结,VNDK的引入就是给vendor开发HAL用的。原创 2023-03-13 10:59:49 · 517 阅读 · 0 评论 -
Android CHRE (Context Hub Runtime Environment)简介
虽然 CHRE 框架可以是多线程的,但给定的 nanoapp 永远不会从多个线程并行执行。CHRE 框架通过三个 nanoapp 入口点之一( nanoappStart() 、 nanoappHandleEvent()和nanoappEnd() )或通过在先前的 CHRE API 调用中提供的回调与给定的 nanoapp 交互,并且 nanoapps 与 CHRE 框架交互并通过 CHRE API 的底层系统。在针对小核的应用开发上,提供给应用开发的支持有限,会依赖硬件接口,导致代码通用性、跨平台有问题。原创 2023-03-11 14:23:28 · 637 阅读 · 0 评论 -
[Android AIDL系列 3] Parcelable在不同语言中的差异
如果在AIDL接口中传递自定义的类型,需要实现Parcelable接口,传输时可以序列号/反序列化对象,目标进程就可以还原对象了。原创 2023-03-11 12:40:24 · 561 阅读 · 1 评论 -
[Android AIDL系列 2] Android源码中编译.aidl文件
说明在Android源码中通过Android.bp文件编译aidl接口文件操作和编译过程。原创 2023-03-09 09:49:13 · 2407 阅读 · 0 评论 -
[Android AIDL系列 1] 手动编译aidl文件,生成Java、C++[android]、C++[ndk]、Rust接口
AIDL文件在Android系统上应用广泛,和底层的Binder机制紧密关联。在Android源码或者Android Studio中通常是自动编译aidl文件,生成对应语言的接口文件。做应用层Java开发,aidl和binder封装的比较“干净”,不用太多的涉及binder的调用细节,也不用太关心aidl的编译过程。如果是做中下层开发,包括framework、native层开发,可能需要编写native service,有必要理解binder的底层机制。先从编译aidl开始。原创 2023-03-08 18:12:19 · 8741 阅读 · 2 评论 -
Linux Shell基础:ln命令
1)在Ubuntu上,同一个软件可以安装多个版本的,安装的是带版本号的名称,通过软链接创建不带版本号的名称。系统和用户默认都是使用的不带版本号的版本(链接),可以起到各个版本兼容的效果。2)在负责的工程源码中,可以通过链接把分散的头文件目录集中到一个include目录下,通过引用这一个include目录就可以把用到的头文件都搜索到。这个命令比较简单,在开发中应用的频次比较高。而且最常用的就是创建软链接的用法。这种方式应用在可执行文件、动态库等。原创 2023-02-27 22:00:11 · 530 阅读 · 0 评论 -
Android上使用tombstone定位问题的示例
1)tombstone文件2)对应的带symbol的可执行文件或者库文件3)stack脚本。原创 2023-02-27 21:50:42 · 1236 阅读 · 0 评论 -
Android源码编译失败,没有具体错误信息
编译Android源码,时不时就会编译不过,而且没有具体的报错信息,error.log / soong.log中没有任何具体的错误信息,和make时打印出来的信息一样。参见下图。此时,重新sync或者restore改动都无效。error.log。原创 2023-02-21 15:29:29 · 1389 阅读 · 0 评论 -
zsh配置
zsh的可扩展性好很多,有很多现成的配置插件,也可以把bash上原有的自定义配置直接平移过来,在.zshrc中source原有的自定义设置,source ~/.bash_aliases(如果是source ~/.bashrc,需要注意避免可能冲突。Terminator供强大,也很稳定,只是界面上不如WindTerm好看、好用(文本高亮在开发中有助于提高效率)。下面这一项上上面autojump插件,执行install.py后最后的输出,可以参见上面的输出结果,提示添加到.zshrc最后。原创 2023-02-21 14:04:02 · 854 阅读 · 0 评论 -
Android源码(AOSP)中C/C++常用库和头文件位置
Android中间层或底层开发中,有很多是natvie开发的,需要使用native的库。这里整理了AOSP中native库和头文件分散的几个主要位置。以供参考。原创 2023-02-21 11:51:50 · 1676 阅读 · 0 评论 -
minicom安装、配置和使用
在开发过程中,我们经常需要通过串口连接Android开发板的底层系统(Linux、QNX)等,minicom是一个常用串口连接终端软件,在命令行终端下通过文本界面进行操作使用。原创 2023-02-20 15:09:28 · 11597 阅读 · 1 评论 -
Android开发常用网站汇总
Android官方代码检索,提供Android,Android, Android Studio,Android-llvm等项目源码检索。原创 2023-02-15 16:14:33 · 2237 阅读 · 0 评论 -
Android中如何为单个log tag设置过滤级别
参考下面的源码,点击textview会打印log,包含2个tag:tag111-1和tag111-2。原创 2023-02-09 15:29:23 · 389 阅读 · 0 评论 -
Ubuntu 18.04运行Android模拟器报错,提示:缺少/dev/kvm访问权限
建议安装更新版本的Ubuntu,比如20.04或者22.04。如果是开发Framework或者底层代码,推荐20.04。如果是做APP开发可以用22.04。回到Android Studio再次启动模拟器,正常。原创 2023-02-09 14:57:56 · 601 阅读 · 0 评论 -
Ubuntu上adb命令提示权限不足,缺少udev rules(adb: insufficient permissions for device: missing udev rules? )
2种方法,1. 手动创建rule文件。2种方法都不复杂,这里介绍第二种(更简单一点)。操作完成后(注意需要注销或者重启的步骤,保险起见可以操作完了重启一次系统),再次使用adb命令,可以正常连接开发板。说明:当前用户已经包含的plugdev群组中,上面输出结果中可以看到46(plugdev)。新搭建的Ubuntu开发环境,用adb连接开发板,提示权限不足,缺少udev规则。注意:需要注销或重启群组变更才能生效。1)当前登录用户在plugdev群组中。2)需要为设备增加udev rule。原创 2023-02-08 09:25:28 · 4214 阅读 · 0 评论 -
手动编译AIDL
通常项目中aidl文件都是Android Studio自动处理的,如果了解具体的处理过程,有助于了解原理,对定位和解决开发中遇到的问题非常有帮助。其实过程很简单,看一遍都明白。当然,这里是最简单的一个例子,后面会深入展开。原创 2023-01-15 23:10:51 · 623 阅读 · 1 评论 -
Android Compose BoM 物料清单
开发中引用很多依赖库,依赖库之间需要特定的版本才能协同工作,通过BoM来解决依赖库的版本约束。原创 2023-01-14 20:18:42 · 1360 阅读 · 0 评论 -
Android Studio Electric Eel提示Gradle插件报错问题的解决方法
Android Studio Electric Eel是比较新的版本,尚未正式发布,最新的RC3,新建工程编译,默认会报错,提示Gradle插件报错问题。原创 2023-01-10 22:45:04 · 14832 阅读 · 1 评论