Android 新建一个lunch项(全志方案)

简介: Android 新建一个lunch项(全志方案)

前言

Android 开发中,我们经常需要根据不同的硬件平台和产品需求,创建不同的 lunch project项,来编译出对应客户的系统镜像。本文将介绍如何在全志 Android 平台上新建一个 lunch 项,以及如何使用一个简单的脚本来自动化这个过程。

步骤

假设我们要在全志 Android 平台上新建一个名为 a40-c01 的 lunch 项,可以参考以下步骤:

  1. 在源代码中的 device/softwinner 目录下,复制一份已有的目录(如:a40-p1),命名为 a40-c01,文件夹命名随意。
cp -r device/softwinner/a40-p1 device/softwinner/a40-c01
  1. 把 device/softwinner/a40-c01 目录下的 a40_p1.mk 重命名为 a40-c01.mk。
mv device/softwinner/a40-c01/a40_p1.mk device/softwinner/a40-c01/a40-c01.mk
  1. 把 a40-c01.mk 中,目录名及产品信息等,由 a40-p1 修改为 a40-c01。
sed -i "s/a40-p1/a40-c01/g" device/softwinner/a40-c01/a40-c01.mk
  1. 把 device/softwinner/a40-c01 目录下 AndroidProducts.mk 文件中,修改 PRODUCT_MAKEFILES 为 a40-c01.mk。
sed -i "s/a40_p1.mk/a40-c01.mk/g" device/softwinner/a40-c01/AndroidProducts.mk
  1. device/softwinner/a40-c01 目录下 vendorsetup.sh 文件中,修改语句 add_lunch_combo a40-c01-eng,其中 a40-c01 为自己的命名,后面必须有 -eng,否则 lunch 时无法找到编译的选项。
sed -i "s/a40_p1-eng/a40-c01-eng/g" device/softwinner/a40-c01/vendorsetup.sh

  1. device/softwinner/a40-c01 目录下 package.sh 文件 ./pack -c sun4i -p a40 -b a40-c01 -d uart0 其中 a40-c01 为自己的命名,也就是 a40-c01.mk 里的 PRODUCT_MODEL := a40-c01 取的名字。
sed -i "s/a40-p1/a40-c01/g" device/softwinner/a40-c01/package.sh
  1. 根据自己的需求,再修改其他参数。
  2. 进入 lichee/tools/pack/chips/sun8iw11p1/configs 目录下,复制一份已有的目录(如:a40-p1),命名为 a40-c01。
cp -r lichee/tools/pack/chips/sun8iw11p1/configs/a40-p1 lichee/tools/pack/chips/sun8iw11p1/configs/a40-c01
  1. 把 a40-c01 目录下的所有文件中,由 a40-p1 修改为 a40-c01。
find lichee/tools/pack/chips/sun8iw11p1/configs/a40-c01 -type f -exec sed -i "s/a40-p1/a40-c01/g" {} +

脚本

为了方便,可以把上述步骤写成一个脚本,比如 create_new_lunch.sh,然后在源代码根目录下执行 ./create_new_lunch.sh oldname newname 即可完成新建 lunch 项的操作。以下是脚本的内容:

#!/bin/bash
# 用法: ./create_new_lunch.sh oldname newname
# 示例: ./create_new_lunch.sh a40-p1 a40-c001
oldname=$1
newname=$2
# 检查参数
if [ $# -ne 2 ]; then
    echo "用法: ./create_new_lunch.sh oldname newname"
    exit 1
fi
if [[ ! $newname =~ ^a40- ]]; then
    echo "新的名字必须以 a40- 开头"
    exit 2
fi
# 检查旧的名字是否存在
if [ ! -d android/device/softwinner/$oldname ]; then
    echo "旧的名字 $oldname 不存在,请输入正确的名字"
    exit 3
fi
if [ ! -d lichee/tools/pack/chips/sun8iw11p1/configs/$oldname ]; then
    echo "旧的名字 $oldname 不存在,请输入正确的名字"
    exit 4
fi
# 复制设备目录
cp -r android/device/softwinner/$oldname android/device/softwinner/$newname
# 重命名 makefile
mv android/device/softwinner/$newname/${oldname//-/_}.mk android/device/softwinner/$newname/${newname//-/_}.mk
# 在所有文件中替换旧的名字为新的名字
find android/device/softwinner/$newname -type f -exec sed -i "s/$oldname/$newname/g" {} +
find android/device/softwinner/$newname -type f -exec sed -i "s/${oldname//-/_}/${newname//-/_}/g" {} +
# 复制 lichee 目录
cp -r lichee/tools/pack/chips/sun8iw11p1/configs/$oldname lichee/tools/pack/chips/sun8iw11p1/configs/$newname
# 在所有文件中替换旧的名字为新的名字
find lichee/tools/pack/chips/sun8iw11p1/configs/$newname -type f -exec sed -i "s/$oldname/$newname/g" {} +
# 完成
echo "新的 lunch 项 $newname 创建成功。"
$ ./create_new_lunch.sh a40-c003 a40-c04
旧的名字 a40-c003 不存在,请输入正确的名字
$ ./create_new_lunch.sh a40-c03 a40-c04
新的 lunch 项 a40-c04 创建成功。

总结

本文介绍了如何在全志 Android 平台上新建一个 lunch 项,以及如何使用一个简单的脚本来自动化这个过程。

相关文章
|
2月前
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
339 8
|
2月前
|
Web App开发 网络协议 Android开发
Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【9月更文挑战第4天】本文详细对比了在Android平台上实现一对一音视频通话时常用的WebRTC、RTMP及RTSP三种技术方案。从技术原理、性能表现与开发难度等方面进行了深入分析,并提供了示例代码。WebRTC适合追求低延迟和高质量的场景,但开发成本较高;RTMP和RTSP则在简化开发流程的同时仍能保持较好的传输效果,适用于不同需求的应用场景。
159 1
|
3月前
|
Java Android开发
全志 Android 11:实现响应全局按键
本文介绍了在全志平台Android 11上实现响应全局按键的方法,通过修改`TvWindowManager.java`来全局拦截特定的热键事件,并在`FocusActivity`中处理这些事件以启动调焦界面和控制步进电机调整焦距。
35 2
|
3月前
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
92 1
|
3月前
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
76 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值
|
3月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
128 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
3月前
|
Android开发 C++ 开发者
Android经典实战之跨平台开发方案:Kotlin Multiplatform vs Flutter
本文对比了Kotlin Multiplatform与Flutter两大跨平台开发框架,从技术特性、性能、开发效率、UI体验、可扩展性及适用场景等维度进行了详尽分析,帮助开发者根据项目需求和技术背景选择最优方案。
130 2
|
3月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
107 0
|
3月前
|
Web App开发 网络协议 Android开发
### 惊天对决!Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【8月更文挑战第14天】随着移动互联网的发展,实时音视频通信已成为移动应用的关键部分。本文对比分析了Android平台上WebRTC、RTMP与RTSP三种主流技术方案。WebRTC提供端到端加密与直接数据传输,适于高质量低延迟通信;RTMP适用于直播场景,但需服务器中转;RTSP支持实时流播放,但在复杂网络下稳定性不及WebRTC。三种方案各有优劣,WebRTC功能强大但集成复杂,RTMP和RTSP实现较简单但需额外编码支持。本文还提供了示例代码以帮助开发者更好地理解和应用这些技术。
148 0
|
6月前
|
Android开发 芯片
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
263 3