开放代码社区 › Quick Start

Quick Start

开发工具C

把 Android 的 UI 框架逐行移植到 C++ —— 在嵌入式设备上跑出媲美 Android 的 UI,却不需要 Android 运行时;同时也是一面你能真正读懂的 AOSP 内核镜像。 CDroid 是 Android Java UI SDK 的逐行 C++ 移植 —— 涵盖 android.widget、android.view、android.text、android.graphics.drawable、android.animation,基于 Cairo (矢量图形)构建,面向 嵌入式系统 (最低 32M 内存即可运行)。

AI/机器学习Web后端前端工具部署/运维
作者:用户6868语言:C更新:2026-10-27
仓库地址
https://gitee.com/houstudio/Cdroid.git

前往原仓库

README

# CDroid

> **把 Android 的 UI 框架逐行移植到 C++ —— 在嵌入式设备上跑出媲美 Android 的 UI,却不需要 Android 运行时;同时也是一面你能真正读懂的 AOSP 内核镜像。**

CDroid 是 **Android Java UI SDK 的逐行 C++ 移植** —— 涵盖 `android.widget`、`android.view`、`android.text`、`android.graphics.drawable`、`android.animation`,基于 **Cairo**(矢量图形)构建,面向**嵌入式系统**(最低 32M 内存即可运行)。它既不是对 Android 的封装,也不是简单的"类 Android":类名、成员名、方法签名、控制流都紧跟 AOSP 源码,你可以把 Android 参考源码和 C++ 实现并排打开,逐行对照。

只要你能用 Android XML 描述 UI,就能把同一套 UI 跑在机顶盒、车机、工业面板上 —— 用 Android Studio 设计,由 Cairo 渲染,全程没有 JVM。

* 运行环境:32M 以上内存的嵌入式系统。
* 主仓库: [https://gitee.com/houstudio/cdroid](https://gitee.com/houstudio/cdroid)
* 镜像仓库: [https://github.com/houstudio/cdroid](https://github.com/houstudio/cdroid)
* 技术支持:QQ:1225012331 微信:calfhou

## 为什么要有 CDroid?

嵌入式团队总在重复造 UI 框架,而造出来的东西很少比 Android 的更好。CDroid 走了另一条路:**把真东西移植过来**,留住 Android 十几年的 UI 工程积累,把它送到 Android 本身跑不了的地方。核心准则是 *保真优先于重设计* —— 忠实翻译 Android 的逻辑,而不是另起炉灶。(见 [AGENTS.md](https://gitee.com/houstudio/Cdroid/blob/master/AGENTS.md)。)

## 它适合谁?

- **嵌入式工程师**:在受限硬件(32M+)上需要精致、可动画、Material 风格的 UI,而完整 Android 太重。
- **Android 开发者**:想真正搞懂框架*底层怎么运转* —— View 的 measure/layout/draw、Choreographer、输入分发、文本布局、Drawable —— 通过读干净的 C++ 来理解,而不是和 AOSP 编译系统搏斗。CDroid 是目前能找到的、最易读的 AOSP framework 内部镜像。
- **C++ 工程师**:在找一个有分量的、架构良好的代码库 —— 真实的所有权/生命周期挑战、现代特性(ConstraintLayout/MotionLayout、RecyclerView、fragment、转场)、基于 Cairo 的渲染。

## 特性

- **100+ 控件 & 50 个 Drawable**,API 与 Android 兼容 —— 可在 Android Studio / Eclipse 中设计。
- **完整的 AndroidX 移植**:RecyclerView、ConstraintLayout + MotionLayout、FragmentManager + Navigation、Flexbox、CoordinatorLayout、ViewPager2。
- **Fragment + Transition 框架**,含共享元素转场。
- **二进制 AXML 资源全链路** —— aapt2 编译的 XML + `resources.arsc` 打进 `.pak`,生成的 `R.h` 用真实资源 id,支持构建期资源 overlay。
- **android.app 服务进程内化** —— AlarmManager(感知系统挂起、零专用线程)、对话框、最小版 PendingIntent。
- **进程内无障碍** —— AccessibilityService + 节点树,UiAutomation 语义测试驱动(`--auto-test` 扫描 / `--test-script` DSL)。
- **基于 Cairo 的矢量图形** —— 没有 `Bitmap` 类,由 `Cairo::ImageSurface` 承担该角色。
- **多窗口 / 多层合成器**,脏区驱动渲染。
- **忠实的文本栈**:spans、`StaticLayout`/`DynamicLayout`、minikin 断行、fonts.xml 字体族/回退链、CBDT 彩色 emoji、`KeyCharacterMap`、输入法。
- **跨平台后端**:DRM、fb、DirectFB、SDL、XCB/Xlib、VNC。

## 参与贡献 👋

CDroid 是一个庞大的移植工程 —— 永远有更多 AOSP 代码等着翻译,非常欢迎你的加入。

- 🆕 **[新手任务清单](https://gitee.com/houstudio/Cdroid/blob/master/docs/contributing/good-first-issues.cn.md)** —— 具体、独立的小任务,每个都标好了对应的 AOSP 源码位置。
- 📖 **[贡献指南](https://gitee.com/houstudio/Cdroid/blob/master/CONTRIBUTING.cn.md)** —— 如何构建、保真移植方法论、如何认领第一个任务。
- English: [README.md](https://gitee.com/houstudio/Cdroid/blob/master/README.md).

# **Quick Start**
* 虚拟机体验:https://pan.baidu.com/s/1-v-rLcHxo5W5TXvJ2NUWxA 提取码:spux (虚拟机登录用户:cdroid 密码:123456)
* 登录后请重新pull cdroid更新代码
* 每次更新代码建议干掉cdroid/outXXXX 然后重走 build.sh构建流程。
# **IDE(AndroidStudio/Eclipse)** 
![IDE](https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/9c47b8b95c4ea0c95a34828d.png)

# **ScreenShots**
![demo0](https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/a3ceeaf48d796ccb9e0c9555.gif)
![输入图片说明](https://foruda.gitee.com/images/1696897258873801535/181bd53c_8310459.png "coffee1.png")
![输入图片说明](https://foruda.gitee.com/images/1696897274979265997/cb22d7c6_8310459.png "coffee2.png")
![输入图片说明](https://foruda.gitee.com/images/1696897128191287720/7754542e_8310459.png "kdz10.png")
![输入图片说明](https://foruda.gitee.com/images/1696897669710472636/454e7f63_8310459.png "asd1.png")
![输入图片说明](https://foruda.gitee.com/images/1696897695571432137/8f6d2169_8310459.png "asd2.png")
![输入图片说明](https://foruda.gitee.com/images/1696897705672262478/c8736598_8310459.png "asd3.png")
![输入图片说明](https://foruda.gitee.com/images/1696897716776731960/47e420c7_8310459.png "asd4.png")
![Pott](https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/92b5f890b6a2ff118a236003.png)

# **UI Components:**

| View           | TextView             | Button               | ImageView    | ImageButton |
|----------------|----------------------|----------------------|--------------|-------------|
| CompoundButton | ToggleButton         | CheckBox             | RadioButton  | ProgressBar |
| SeekBar        | Chronometer          | AnalogClock          | ViewGroup    | RadioGroup  |
| ScrollView     | ViewPager            | SimpleMonthView      | Switch       | RatingBar   |
| NumberPicker   | ListView             | GridView             | RecyclerView | ViewFlipper |
| ViewAnimator   | AdapterViewAnimator  | CalendarView         | TabLayout    | DatePicker  |
| TimePicker     | NestedScrollView     | HorizontalScrollView | DateTimeView | ViewPager2  |
| YearPickerView | WearableRecyclerView | Toolbar              | QRCodeView   | CardView    |

# **Supported Layouts:**
| FrameLayout      | LinearLayout   | RelativeLayout | TableRow           | DrawerLayout      |
|------------------|----------------|----------------|--------------------|-------------------|
| TableLayout      | AbsoluteLayout | GridLayout     | GestureOverlayView | CoordinatorLayout |
| ConstraintLayout | MotionLayout   | FlexboxLayout  | SlidingPaneLayout  |                   |

# **Supported Drawables:**
| ColorDrawable     | BitmapDrawable     | NinePatchDrawable          | InsetDrawable        |
|-------------------|--------------------|----------------------------|----------------------|
| ShapeDrawable     | TransitionDrawable | AnimatedVectorDrawable     | StateListDrawable    |
| LevelListDrawable | ClipDrawable       | AnimatedRotateDrawable     | RotateDrawable       |
| GradientDrawable  | ScaleDrawable      | AnimatedImageDrawable      | VectorDrawable       |
| RippleDrawable    | AnimationDrawable  | AnimatedStateListDrawable  | LayerDrawable        |
| BadgeDrawable     | PictureDrawable    | AnimationScaleListDrawable | AdaptiveIconDrawable |

# **Porting guide:**

* 1 A new product porting should be placed to src/porting/xxx(where xxx is you chipset name)
* 2 implement your porting api to xxx directory
* 3 modify build.sh to support your port(you should configure sysroot toolchain...).
* 4 call build.sh --product=xxx
* 5 make y