Categories
android

android so 编译(笨方法)

定义java native文件

package com.robin.spot.jni;

public class WiringOP {

    static {
        System.loadLibrary("WiringOP");
    }

    public final static native int wiringPiSetup();
    
}

生成java native 头文件

 javac -h ./ .\com\robin\spot\jni\WiringOP.java

头文件内容

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_robin_spot_jni_WiringOP */

#ifndef _Included_com_robin_spot_jni_WiringOP
#define _Included_com_robin_spot_jni_WiringOP
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_robin_spot_jni_WiringOP
 * Method:    wiringPiSetup
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_robin_spot_jni_WiringOP_wiringPiSetup
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

复制文件到jni目录并且实现该头文件

执行c文件编译

 ndk-build
Categories
android

orangepi AOSP 修改预装应用

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
可以看到调用路径

Categories
android

orangepi aosp 分区 增加系统存储空间

device/rockchip/common/build/rockchip/Partitions.mk

修改
      #BOARD_SUPER_PARTITION_SIZE ?=  3263168512

默认为3G?
可合理增大  添加默认应用
Categories
android

AOSP 签名信息

证书秘钥保存在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 

Categories
android

android 双屏显示display

https://blog.csdn.net/qq_29848853/article/details/130362129

利用安卓presentation类(相当于一个dialog)

把画面显示到对应显示屏

https://blog.csdn.net/EthanCo/article/details/128662556

https://www.jb51.net/article/273817.htm

https://www.jb51.net/article/179034.htm

Categories
android

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
Categories
linux

树莓派 配置自启动桌面程序

利用aotostart 目录进行配置

创建设置文件/home/pi/.config/autostart/map2output.desktop,如果autostart目录不存在就自己创建。

文件内容如下:

[Desktop Entry]


Type=Application

Name=map2output


Exec=/home/rock/map.sh  #执行脚本

Categories
android

树莓派 安装 android

https://konstakang.com/ 非官方树莓派安卓镜像制作商

https://androidfilehost.com/?w=profile&uid=24665539028713562

在androidfilehost 可以找到其他人做的系统镜像

Categories
linux Uncategorized

树莓派 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

新版树莓派摄像头驱动

Categories
c

JSON-C