out/.module_paths/Android.mk.list
该文件会保存用到的模块
修改该全局变量 PRODUCT_PACKAGES
通常在device.mk
example : device/rockchip/common/device.mk
device/rockchip/rk3588/rk3588s_s/rk3588s_s.mk
device/rockchip/common/modules/rockchip_apps.mk
//查看device/rockchip/common/device.mk
可以看到调用路径
orangepi aosp 分区 增加系统存储空间
device/rockchip/common/build/rockchip/Partitions.mk
修改
#BOARD_SUPER_PARTITION_SIZE ?= 3263168512
默认为3G?
可合理增大 添加默认应用
证书秘钥保存在build/target/product/security/文件夹下
-rw-rw-r-- 1 robin robin 977 7月 13 2022 Android.bp
-rw-rw-r-- 1 robin robin 3179 7月 13 2022 Android.mk
-rw-rw-r-- 1 robin robin 1217 7月 13 2022 cts_uicc_2021.pk8
-rw-rw-r-- 1 robin robin 1464 7月 13 2022 cts_uicc_2021.x509.pem
-rw-rw-r-- 1 robin robin 1484 7月 13 2022 fsverity-release.x509.der
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 media.pem
-rw-rw-r-- 1 robin robin 1217 7月 13 2022 media.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 media.x509.pem
-rw-rw-r-- 1 robin robin 2375 7月 13 2022 networkstack.pk8
-rw-rw-r-- 1 robin robin 2094 7月 13 2022 networkstack.x509.pem
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 platform.pem
-rw-rw-r-- 1 robin robin 1216 7月 13 2022 platform.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 platform.x509.pem
-rw-rw-r-- 1 robin robin 3299 7月 13 2022 README
-rw-rw-r-- 1 robin robin 1679 7月 13 2022 shared.pem
-rw-rw-r-- 1 robin robin 1218 7月 13 2022 shared.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 shared.x509.pem
-rw-rw-r-- 1 robin robin 1675 7月 13 2022 testkey.pem
-rw-rw-r-- 1 robin robin 1216 7月 13 2022 testkey.pk8
-rw-rw-r-- 1 robin robin 1440 7月 13 2022 testkey.x509.pem
-rw-rw-r-- 1 robin robin 524 7月 13 2022 verity_key
-rw-rw-r-- 1 robin robin 1219 7月 13 2022 verity.pk8
-rw-rw-r-- 1 robin robin 1444 7月 13 2022 verity.x509.pem
.pk8 代表私钥 private key
.x509.pem 代表公钥 public key (CERTIFICATE)
.pem 代表rsa 私钥 RSA PRIVATE KEY (pk8 的另一种格式)
主要有四个签名
testKey platform shared media
最重要的是platform 系统签名应用 该签名的app能 获取系统权限
该文件夹下的readme介绍如何生成新的秘钥
删除备份旧的platform秘钥
rm platform.pem
rm platform.pk8
rm platform.x509.pem
生成新的秘钥
development/tools/make_key platform '/C=CN/ST=Guangdong/L=Guangzhou/O=Android/OU=Robin/CN=blog.robinluo.top/emailAddress=1569964920@qq.com'
不输入密码
生成platform 秘钥文件
platform.pk8
platform.x509.pem
生成p12文件
openssl pkcs12 -export -out platform.p12 -inkey platform.pem -in platform.x509.pem
生成jks签名文件
keytool -importkeystore -deststorepass RobinLuo -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12
查看jks文件
keytool -list -keystore platform.jks
android 双屏显示display
orangepi5 android system compile log
第一需要使用ubuntu系统18以上 (最好18)x86 架构 不能是arm架构哈
准备好500G的系统硬盘 16g内存
文件系统确认是区分大小写的 (case sensitive 创建同名大小写差异的文件做测试)
文件系统可以构建硬链接 (ln 命令测试)
当缺少文件 都是因为解压时大小写冲突导致丢失文件和文件为硬链接当前文件系统不支持丢失文件
没有 mkbootfs 需要安装安卓打包工具 build-tools
google address
git clone https://android.googlesource.com/kernel/prebuilts/build-tools
gitee address
git clone https://gitee.com/mirrors_android_googlesource/build-tools.git
然后path 添加上里面的bin目录
没有python2 添加上prebuild 路径下的python2 可执行目录
export PATH=/mnt/d/Android_12/prebuilts/python/linux-x86/2.7.5/bin:/mnt/d/build-tools/linux-x86/bin:$PATH
安装镜像工具
apt install mkbootimg
安装其他依赖包
apt install libssl-dev
apt install openssl
apt insatll libc++1
apt install libelf-dev
kernal vdso 编译错误时
kernel-5.10\arch\arm64\kernel\vdso\gen_vdso_offsets.sh
LC_ALL=C
sed -n -e 's/^00*/0/' -e \
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p'
更改为
LC_ALL=C
sed -n -e 's/^00*/0/' -e \
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2 0x\1/p'
并且修改该文件为可执行的 删除目录下的编译产物vdso.so
提示找不到libcrypto-host.so
cp prebuilts/build-tools/linux-x86/lib64/*.so /usr/lib
libncurses.so.5 not found (因为官方已经把libncurses-dev 取代 libncurses5-dev 所以需要重新安装一次)
sudo apt install libncurses5
官方要求安装依赖包
sudo apt-get update
sudo apt-get install -y git gnupg flex bison gperf build-essential
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install -y u-boot-tools
关闭安卓首页google 查询框
//关闭安卓首页google 搜索栏
packages/apps/Launcher3/res/layout/search_container_workspace.xml
packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java.java
public static final boolean QSB_ON_FIRST_SCREEN = false;
//更改kernel 开机画面
\kernel-5.10\drivers\video\logo
更改该目录下的ppm文件 ppm文件可由bmp转换而来
//更改kernel 开机画面
\kernel-5.10\drivers\video\logo
更改该目录下的ppm文件 ppm文件可由bmp转换而来
//安卓开机动画会读取以后几个文件 frameworks\base\cmds\bootanimation\BootAnimation.cpp
static const char OEM_BOOTANIMATION_FILE[] = "/odm/media/bootanimation.zip";
static const char PRODUCT_BOOTANIMATION_DARK_FILE[] = "/product/media/bootanimation-dark.zip";
static const char PRODUCT_BOOTANIMATION_FILE[] = "/product/media/bootanimation.zip";
static const char SYSTEM_BOOTANIMATION_FILE[] = "/system/media/bootanimation.zip";
static const char APEX_BOOTANIMATION_FILE[] = "/apex/com.android.bootanimation/etc/bootanimation.zip";
static const char PRODUCT_ENCRYPTED_BOOTANIMATION_FILE[] = "/product/media/bootanimation-encrypted.zip";
static const char SYSTEM_ENCRYPTED_BOOTANIMATION_FILE[] = "/system/media/bootanimation-encrypted.zip";
static const char OEM_SHUTDOWNANIMATION_FILE[] = "/odm/media/shutdownanimation.zip";
static const char PRODUCT_SHUTDOWNANIMATION_FILE[] = "/product/media/shutdownanimation.zip";
static const char SYSTEM_SHUTDOWNANIMATION_FILE[] = "/system/media/shutdownanimation.zip";
static constexpr const char* PRODUCT_USERSPACE_REBOOT_ANIMATION_FILE = "/product/media/userspace-reboot.zip";
static constexpr const char* OEM_USERSPACE_REBOOT_ANIMATION_FILE = "/oem/media/userspace-reboot.zip";
static constexpr const char* SYSTEM_USERSPACE_REBOOT_ANIMATION_FILE = "/system/media/userspace-reboot.zip";
适配orangepi 5寸触摸屏
替换kernel-5.10/drivers/gpu/drm/panel/panel-innolux-afj101-ba2131.c
替换那个Android LOGO,直接替换frameworks/base/core/res/assets/images下面的图片
将开机的动画复制到device/rockchip/common/bootshutdown/bootanimation.zip。
这个MK其实是文件复制命令 把该文件复制到安卓系统目录供安卓调用
更新 香橙派5 用的是 bootanimation.ts
替换源码中的ts文件
路径
device/rockchip/common/bootvideo/bootvideo.mk
device/rockchip/common/bootvideo/bootanimation.ts
ffmpeg转TS文件
ffmpeg -i input.mp4 -c:v copy -c:a copy -bsf:v h264_mp4toannexb output.ts
ffmpeg -framerate 1 - start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4
替换默认壁纸
device\rockchip\rk3588\overlay\frameworks\base\core\res\res\drawable-nodpi\
device\rockchip\rk3588\overlay\frameworks\base\core\res\res\drawable-sw600dp-nodpi\
device\rockchip\rk3588\overlay\frameworks\base\core\res\res\drawable-sw720dp-nodpi\
用ROP主页图片当开机画面
切换默认中文输入法
mkdir device/rockchip/rk3588/rk3588s_s/preinstall_del
//该文件夹 存放预装单可手动删除的APK
//复制sogouInput.apk 到该目录
创建两个默认配置
修改
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<string name="def_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME</string>
<string name="enabled_input_method" translatable="false">com.sohu.inputmethod.sogou/.SogouIME:com.android.inputmethod.latin/.LatinIME</string>
修改
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
增加读取两个setting
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
R.string.def_input_method);
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
R.string.enabled_input_method);
设置locale列表第一位
修改
build/target/product/languages_default.mk
//把zh_CN 放在第一位
PRODUCT_LOCALES := \
zh_CN \
添加android properties 修改时区默认语言
修改device/rockchip/rk3588/device.mk
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.timezone=Asia/Shanghai \
persist.sys.language=zh \
persist.sys.country=CN \
ro.product.locale=zh-CN \
ro.product.locale.language=zh \
ro.product.locale.region=CN \
ro.allow.mock.location=1
防止每次编译安卓都清除历史
./build.sh
214 注释 make installclean
编译前准备
export BOARD=orangepi5
export DUAL_LCD=true
export IMAGE_TYPE=cn
source build/envsetup.sh
lunch rk3588s_s-userdebug
lunch rk3588s_s-user
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=12
TARGET_PRODUCT=rk3588s_s
TARGET_BUILD_VARIANT=user
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.15.0-94-generic-x86_64-Ubuntu-20.04.6-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=SQ3A.220705.003.A1
OUT_DIR=out
默认输出目录为out
全量编译
-A表示Android
-U表示uboot
-K表示Kernel
-u表示update.img
./build.sh -AUKu
树莓派 配置自启动桌面程序
利用aotostart 目录进行配置
创建设置文件/home/pi/.config/autostart/map2output.desktop,如果autostart目录不存在就自己创建。
文件内容如下:
[Desktop Entry]
Type=Application
Name=map2output
Exec=/home/rock/map.sh #执行脚本
树莓派 安装 android
https://konstakang.com/ 非官方树莓派安卓镜像制作商
https://androidfilehost.com/?w=profile&uid=24665539028713562
在androidfilehost 可以找到其他人做的系统镜像
树莓派 book worm 安装记录
3B插上网线
sudo raspian-config //开启ssh
sudo apt install python3-pip
sudo apt install python3-opencv
sudo apt install python3-dbus
sudo apt install python3-bluetooth
sudo apt install python3-serial
sudo apt install vim
sudo apt install lrzsz
pip install wiringpi --break-system-wide
开启orthocone 自启动
sudo chmod 777 /etc/init.d/orthocone
sudo update-rc.d orthocone defaults
sudo systemctl enable orthocone.service
sudo chmod 777 recon.out
还需要重新安装opencv_core opencv_imgproc opencv_highgui
用opencv4 重新编译 recon
超级辛苦
多余service 取消自启动
sudo update-rc.d xxx remove
或者
sudo systemctl disable xxx.service
移除windows 字符
vim
:set ff=unix
修改i2c 波特率
config.txt
dtparam=i2c_arm=on,i2c_arm_baudrate=100000
python3.9 后 timer.isAlive() 改为 timer.is_live()
虚拟键盘
https://blog.csdn.net/weixin_37613240/article/details/131095728
https://blog.csdn.net/weixin_46235937/article/details/128966933
https://blog.csdn.net/qq_27865227/article/details/127394944
https://blog.csdn.net/m0_46324847/article/details/128962898
新版树莓派摄像头驱动
C# winform 自定义 UserControl 生命周期
UserControl 类 是C# winform 中自定义控件的基类
所有自定义控件都要继承UserControl
自定义组件结构分为
组件属性 组件事件 和 组件方法
一般来说 在无参构造方法中 调用 InitializeComponent后 就可以执行 自己的初始化(InitializeComponent 后可认为组件已经渲染完毕)
之后一般是执行属性设置和事件绑定
