Debian squeeze 下 Android Froyo 编译过程小结

从编解码芯片看Tesla T4的隐藏实力:双NVDEC如何实现70路1080P解码? 本文深入剖析了英伟达Tesla T4显卡的隐藏实力,重点解读其独特的双NVDEC硬件解码器设计如何突破性能瓶颈。通过分析Turing架构、对比HEVC/H.264解码差异,并结合驱动与SDK优化,揭示了实现高达70路1080P视频流并发解码的原理与实战配置,为云游戏、直播转码等高并发场景提供高效解决方案。 阅读详情

最近公司在做一个新的Android的项目,需要修改Android的源代码。这就需要自己来搭建一个Linux下的开发环境。

因为之前的Android开发都是Eclipse + SDK,编出APK Package之后,交付客户即可,所以一直没有认真地来做一下Android的编译。这次有机会完整的搞了一下,这里记录一下整个过程,以及自己遇到的一些问题,以备后面查询。


按说现在版本都到3.0了,可是现在主流机型,还是2.2和2.3居多。也许很快大部分机器都升级到3.0甚至更高了,不过换汤不换药,基本的编译流程差别不大。


1.  操作系统和配置

我使用OS是Debian squeeze 版本,没有使用流行的ubuntu,原因很简单,现成的OS,运行也很稳定。CPU是双核的1.8G,硬盘也有几十G的剩余空间。听说4.0编译需要耗费大量资源,恐怕这个机器是没戏了。这个机器还是最好性能好一些,内存越大越好,内核越多越好,响应编译的速度就会有提高。


2.  编译软件的安装

Google android 的官方网站上已经有详细的说明,见网址:http://source.android.com/source/initializing.html .

主要是要安装JDK1.5 (因为是Froyo),python 和 git。要注意的是, python 版本要用2.x的,因为python3.x的语法有变化。

我在安装JDK1.5时遇到了点小麻烦。squeeze版本的默认源里,可能没有JDK1.5的安装包。而google给出的指导中的的方法,因为是ubuntu的源,也不好用。我采用的方法是:修改源/etc/apt/source.list 中的的版本名称squeeze 为 lenny(就是上一个发行版本), 然后就是

sudo aptitude update 
sudo aptitude install sun-java5-jdk

安装JDK1.5 。如果以前安装了JDK1.6,一定要把之前的全部remove,包括sun-java6-jdk, sun-java6-jre等。


接着就要安装编译时需要的一些package,我是32位系统,按照指导应该安装以下的package:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
  libxml2-utils
我在这里就走了一些弯路,因为有些package已经装过,所以最开始的时候没有全部安装,导致编译过程中因为缺少某个package而出错,回头来一个一个安装。所以还是建议全都给装上。

我还遇到一个情况,就是安装的dev的package,比原来安装的版本号要低,我都是强制采用低版本,这样次才能满足编译android代码的需要。


3. 获取源代码

Google的网站上也有详细说明:http://source.android.com/source/downloading.html .

第一步就是下载和配置repo,按照上面说明做就行。因为是下载Froyo,就需要在初始化repo是使用以下的命令

repo init -u https://android.googlesource.com/platform/manifest -b android-2.2.2_r1
各个版本对应的tag名称可以在这里查询:http://source.android.com/source/build-numbers.html .

第二步就是下载代码,repo sync命令会完成所有模块的代码的下载。耐心等待吧~

4.  开始编译代码

Google网站上的说明:http://source.android.com/source/building.html .

一共是三个步骤:初始化环境,设置target,编译代码生成image

第一步:初始化环境,按照说明做。
第二步:选择target。根据需要选择,我是选择的模拟器运行的image,full-eng。
第三步: run make 。我在这个地方陷入误区,指导上说make后加上-jx 参数,可以充分发挥CPU多线程的优势,我也没仔细看,弄了个-j8,没想到编了一会儿就死机了。后来降到-j4也不行,最后干脆不带这个参数了,才保证编译顺利完成。我分析,可能是多线程后,内存不足导致死机,仅仅是猜测了,没有深究。

在编译完整个项目后,终端会出现如下提示: 
  Install system fs image: out/target/product/generic/system.img 
  Target ram disk: out/target/product/generic/ramdisk.img 
  Target userdata fs image: out/target/product/generic/userdata.img 
  Installed file list: out/target/product/generic/installed-files.txt 

这些生成的image作为emulator的启动参数后,就可以看到效果了。

5. 总结
只要准备充分,软件安装正确,还是比较顺利的,编译时间大概1个多小时吧。编译好后,正对每个app,都可以单独进行编译。

6. 参考的文章:




RK3588部署rtmpose模型 摘要: 本文详细介绍了在RK3588开发板上部署RTMPose模型的全流程。首先在Ubuntu环境中搭建MMCV框架,通过MMPose工具将PTH模型转换为ONNX格式。随后使用RKNN-Toolkit2将ONNX模型转换为RKNN格式,并完成开发板部署。关键步骤包括模型转换(PTH→ONNX→RKNN)、环境配置和推理验证,最终实现人体姿态估计功能。整个过程涉及MMPose、RKNN-Toolkit等工具链的使用,为边缘计算场景下的实时姿态分析提供了可行方案。 阅读详情

相关推荐

将Apollo高精地图中的车道线叠加在多种导航地图上

本文介绍了将Apollo高精地图车道线叠加到普通导航地图的技术方案。高精地图具备厘米级车道精度和丰富的语义信息,叠加可实现可视化验证、调试分析和数据对比等功能。核心技术包括坐标系统转换(UTM/WGS84/BD09/GCJ02)和数据处理流程,通过Python脚本完成Apollo地图解析、坐标批量转换和多格式输出。文章详细提供了环境准备、工作目录创建和坐标转换脚本等操作步骤,实现了高精地图数据在OpenStreetMap、百度地图和高德地图上的可视化展示。

Hi20240217的博客 1334

64位Linux系统编译Android,在64位debian sid 上编译Android 4.0.4详细记录

然后出现错误:error: ‘indexOfKey’ was notdeclared in this scope, and no declarations were found byargument-dependent lookup at the point of instantiation[-fpermissive]frameworks/base/include/utils/KeyedVecto...

weixin_31455121的博客 576

别再傻傻分不清!直流有刷、无刷、步进电机,3分钟教你根据项目需求选对电机

本文深入解析直流有刷电机、无刷电机和步进电机的核心差异与应用场景,提供电机选型的黄金法则。通过性能参数对比、成本分析及典型应用案例,帮助工程师根据项目需求精准选择电机类型,避免常见选型误区。特别适合机器人、3D打印等领域的开发者参考。

weixin_29183637的博客 340

debian android编译,惊鸿哥的港湾——如何在Debian中编译Unity Mono生成Android版的libmono.so...

最近我们有个需求是需要重新编译Github上Unity提供的Mono,重新生成一个新的Android版的libmono.so。在花了很长时间来研究尝试以及踩了数不清的坑之后,终于成功编译出libmono.so。这里打算记录分享一下,供自己以后有需要的时候查看以及有缘的读者们参考少绕弯路。废话不多说,我们先看看当前编译的相关环境:操作系统:Debian-8.10.0-i386Unity Mono版本...

weixin_30737027的博客 357

把开源 Skills 集成到 LangGraph 项目

1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。

lpfasd123的博客 902

【原理图PCB专题】Cadence 17.4版本原理图及PCB 模块复用

在我们设计复杂板卡的时候,往往会遇到一部分电路被反复使用的情况。Cadence允许设计者一开始就将复用模块设计好,以后只要直接调用复用模块就可以直接用以设计更复杂的电路板了。这对于大规模集成设计无疑是非常好的选择,它不仅让设计者不必花费时间在相同模块反复设计上,更有利于电路的模块化设计。

一点硬件 2017

android BroadcastReceiver 生命周期的问题

最近在项目中遇到一个问题,解决的过程记录一下,备忘! 过程: 在系统更改Locale的时候,需要做一些操作。我采用的办法是使用一个BroadcastReceiver,接收ACTION_LOCALE_CHANGE 的广播intent,在onReceive()中做处理。 最初的解决方案,是在主Activity 的onCreate( )函数中,动态注册一个BroadcastReceiver,并在o

本来无一物 3780

VisionTransformer改进(11):结合CoordAtt注意力机制

​​CoordAtt模块​​:一个轻量级的坐标注意力机制​​ViT模型​​:基于标准Vision Transformer架构,但集成了CoordAtt模块模型最终通过CNNModel函数封装,虽然名称是CNN,但实际上是一个Transformer模型。引入了轻量级的CoordAtt注意力机制,增强了模型对空间位置信息的捕捉能力保持了ViT的主要优势,同时通过注意力机制提升了特征表示能力设计简洁高效,适合作为基础模型进行进一步研究和应用。

2401_82355416的博客 701

Android Preference 初探

前言 做了好几个Android 应用的开发,虽然每次都用到Preference来配置应用程序的参数,但是每次都是套用以前的模式来做的,没有深究。这次遇到一个项目,重新写的PreferenceActivity,发现一些概念自己还是没哟完全搞清楚,就仔细研究了一下Prefenece,PreferenceActivity, SharedPreferences以及Preference Layout XM

本来无一物 2010

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 462

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4085

[JAVA/Android] String, StringBuilder, StringBuffer之间的关系

在项目中遇到了关于字符串操作的问题,简单比较了String , StringBuilder和StringBuffer之间区别和使用场景,这里做一个总结记录。 1. 这三个类的主要区别,可以从以下两个方面来描述: Mutability 差别:      如果改变了他们的值,系统就会另外生成一个String对象。于此相反,StringBuffer 和StringBuilder

本来无一物 832

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 476

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 278

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 开发入门实践(十三):用 Intent、UiState 和 Reducer 理解 MVI 的状态更新

本文记录第141—145课对MVI架构的入门实践,通过“返回列表”功能逐步构建意图(NewsIntent)、状态(NewsUiState)与状态转换(reduce)机制。基于单向数据流,用户操作生成意图,ViewModel通过Reducer根据旧状态计算新状态,并通过StateFlow更新Compose界面。代码实现清晰分离关注点,强化了对状态管理、事件驱动与数据流的理解。

Easyhood的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 201

Android Laya 与 Native Bridge:页面识别、双向通信、协议设计和崩溃定位

Laya 与 Native 通信的难点不在于某个或的写法,而在于边界:页面来源是否可信、协议是否明确、线程是否正确、请求是否幂等、页面是否仍然存在、日志是否能关联一次完整请求。建立这些边界后,才能把“页面白屏”“按钮无响应”“重复消息”和“Native 崩溃”拆成可验证的层次,并沿着真实调用链找到根因。

路在脚下,幸福在手中,莫贪!!!!! 147

BUUCTF-菜刀流量-MISC-学习笔记

从 1970-01-01 00:00:00 UTC 起算的秒数,——Wireshark 直接告诉你它回答的是谁;由表可知道,96帧返回了flag.rar。, 代表删除键,先删了4次,又删了1次。所以密码是:SuperMaster。解析128帧的响应,即133帧。所以这是一个标准抓包文件,用。解压压缩包拿到html代码。:选中 128 帧,展开。:128 和 131 的。能把一问一答放在一起看;是八进制(Oct)的数字。(或 TCP 层)看到。对比一下ASCii 码表。

晓梦林的博客 46

安卓部署Linux性能实测:一颗移动处理器,能否胜任日常 Linux 开发?

本文通过在一加Ace5上部署NimoteCode的ARM64 Linux环境,测试了其在CoreMark、SQLite编译及并行构建中的表现。结果显示,尽管单核性能约2.34GHz,多核扩展比达6.15×,但优化编译耗时仍高达35秒,反映移动处理器虽具备一定开发能力,却受限于文件系统开销与运行环境(如PRoot)。实际开发中,非优化构建效率较高,而并行编译可显著提速。结论:安卓手机可作为轻量级开发辅助工具,但无法替代桌面环境,真正价值在于便携性与即时响应,而非全功能替代。

一个不知名码农的专栏 325

Android 17 全栈性能分析关键字与源码手册

FrameTimeline 找异常帧,ATrace 找阶段,thread_state 找等待类型,ftrace 找内核原因,Simpleperf 找 CPU 热点,驱动源码找最终触发条件;任何根因结论都必须回到同一对象、同一时间窗口和同一条依赖链。

weixin_43228946的博客 375

CTF 命令执行题学习笔记:终端特殊字符 $IFS 与 %09 的用法(HelloCTF RCE-labs)

空格被过滤时:用%09(TAB)或$IFS代替空格关键词被过滤时:用通配符?或字符类[f]拼出被禁的词,让 WAF 在原始字符串里看不到它,shell 在执行时再展开这类技巧在后续的命令执行题里会反复用到,建议亲手在靶机上敲一遍感受一下。

YY888888_的博客 543

云手机私有化部署完整方案:基于ARM服务器搭建私有安卓云集群

ARM 服务器是私有化安卓云集群最优硬件底座,原生架构匹配 Android,高密度、低损耗,非常适合企业内网场景。整套私有化方案的核心,从来不是 “跑起来安卓”,而是隔离可控、可审计、可运维、可扩容。两条路线各有取舍:开源自建灵活、门槛高;商用私有化交付开箱即用、安全能力完备,是当前企业生产环境主流方案。六边云手机私有化方案,补齐了自建方案在驱动适配、管控平台、审计合规、信创适配上的短板,适合对数据主权、内网隔离有强需求的政企、自研 App、垂直行业客户。

a598652的博客 343

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 221

谷歌相机9.2下载(GCam 安卓通用版 安装与使用说明)

谷歌相机9.2版移植自Pixel原生相机,支持Camera2 API的Android 10+设备安装,凭借多帧合成技术在夜景、HDR+与人像模式表现优异。可提升暗光画质、优化动态范围与背景虚化效果,支持视频防抖及配置文件自定义。安装需确认机型兼容性,建议备份原相机,避免冲突。资源可通过kuake链接获取,仅限学习测试使用。

2611_96675819的博客 172

Android 系统启动与调试中的日志抓取方式全解析

│ 用户操作/系统事件 ││ │▼ ▼│ (驱动/硬件/内存管理) │ │ (App/SystemServer) ││ │ │ ││ │▼ ▼│ dmesg 命令 │ │ logd daemon ││ cat /proc/kmsg │ │ (分类存储到分区) ││ │▼ ▼│ 串口 UART │ │ logcat 命令 ││ (硬件直连,最早输出) │ │ adb logcat ││ │▼│ (汇总所有日志+系统状态) │工具最佳用途关键优势主要局限dmesg。

zhaoshuzhaoshu的专栏 269

Android 开发入门实践(十):用 Kotlin 协程完成模拟加载、取消与异常处理

本文记录第118—125课对NewsApp的协程改造:从viewModelScope.launch启动协程,逐步加入delay模拟等待、suspend函数封装、withContext(Dispatchers.IO)切换线程并观察上下文恢复机制。通过日志验证withContext完成后恢复原执行上下文(非自动回主线程),纠正了初始理解偏差。引入Job管理任务,实现加载取消与重复点击防护,结合异常处理与状态管理,完成可观察、可中断的异步流程。

Easyhood的博客 396

【Android】听写播放器改版:中英文书写速度拆项与「正在读」高亮

现象:把播放页主体抽成后,里面给LazyColumn加想让它占满剩余高度,编译报错(weight 不可用)。原因weight不是通用修饰符,是RowScope的扩展函数。是个普通函数,函数体里没有接收者,自然调不到。解决private fun ColumnScope.PlaybackBody(...) { /* 这里就能用 Modifier.weight(1f) */ }调用处仍在原来的Column { }里,无需改动。预防:Compose 的布局修饰符都是作用域绑定。

木头大左的博客 243
上一篇: [转]正则表达式30分钟入门教程
下一篇: GIF格式的介绍,有空准备翻译一下:What's In A GIF - Bit by Byte
mutu
博客等级 码龄24年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值