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 项,以及如何使用一个简单的脚本来自动化这个过程。

相关文章
|
1月前
|
Android开发 芯片
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
49 3
|
1月前
|
Android开发
Android stdio 无法新建或打开AIDL文件(解决方法)
Android stdio 无法新建或打开AIDL文件(解决方法)
81 0
|
9月前
|
存储 缓存 前端开发
Android Github 上面优秀的两种阴影方案,完美兼容高低版本问题
Android Github 上面优秀的两种阴影方案,完美兼容高低版本问题
|
10月前
|
存储 Android开发 开发者
#2,Android新建第一个程序 Hello Android 模拟手机
#2,Android新建第一个程序 Hello Android 模拟手机
|
10月前
|
Web App开发 编解码 网络协议
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
310 0
|
12月前
|
Java Android开发
Java、Android 新建类自动添加头部注释以及如何添加函数注释模板和快捷键
Java、Android 新建类自动添加头部注释以及如何添加函数注释模板和快捷键
|
Android开发
Android编译之lunch命令
Android编译之lunch命令
|
Java 测试技术 API
Android透明状态栏和导航栏方案最终版
Android透明状态栏和导航栏方案最终版
624 0
|
存储 Java Android开发
Android11.0(R) MTK 预置可卸载app恢复出厂不恢复(仿RK方案)
Android11.0(R) MTK 预置可卸载app恢复出厂不恢复(仿RK方案)
718 0