Categories
android

android 系统打开pdf

android 调用系统注册服务打开PDF

Intent intent  = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags("intent.FLAG_ACTIVITY_NEW_TASK");
Uri uri = Uri.FromFile(new File(pdfPath));
try{
 startActivity(intent);
}catch(Exception e)
 //error handling
}


Categories
android

orangepi PWM

打开pwm15

echo 0 > /sys/class/pwm/pwmchip2/export

设置频率1khz

echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/period                                                                         

设置占空比 10%

echo 100000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle                                                                      

开始pwm

echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable                                                  

关闭pwm

echo 0 > /sys/class/pwm/pwmchip2/pwm0/enable    
echo 0 > /sys/class/pwm/pwmchip2/unexport                                              
Categories
android

aosp 设置系统自启动脚本

安卓系统启动后会执行

/vendor/etc/init/hw/init.rk3588.rc

这个文件来源于

device/rockchip/rk3588/init.rk3588.rc

在on boot后添加执行脚本

on boot
    chmod 0666 /dev/mem
    chown root system /dev/mem

    chmod 0666 /dev/i2c-5
    chown root system /dev/i2c-5

以上是启动后 增加几个文件的读写权限

这几个文件跟GPIO控制有关系

Categories
android

ro.build.fingerprint 过长

ro.build.fingerprint 是在编译时决定的

frameworks/base/core/java/android/os/Build.java

publicstatic final String FINGERPRINT = deviceFingerprint()

private stattic String deviceFingerprint(){
 String finger = SystemProperties.get("ro.vuild.fingerprint");
 if(TextUtils.isEmpty(finger)){
  finger = getString("ro.product.brand")+'/'+
    getString("ro.product.name")+'/'+
    getString("ro.product.device")+'/'+
    getString("ro.build.version.release")+'/'+
    getString("ro.build.id")+'/'+
    getString("ro.build.version.incremental")+'/'+
    getString("ro.build.type")+'/'+
    getString("ro.build.tags")+'/'+
 }
 return finger;

}

fingerprint 格式

make file定义在

build/make/core/sysprop.mk

$(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)

要缩短该fingerprint

新更新

安卓系统会读取 system/build.prop

可以在这个文件设置 build.prop

在源码目录out/target/product/rk3588s_s/system/build.prop

设置

ro.build.fingerprint=rk3588s_s/12/SQ3A.220705.003.A1/eng.robin.20240217:userdebug/release-keys

若没有这个out文件夹(删除了out目录)

则需要在build/make/tools/buildinfo.sh

添加

echo "ro.build.fingerprint=$PRODUCT_BRAND/:$PLATFORM_VERSION/$BUILD_ID"

Categories
android

AOSP 源码修改 前置摄像头 镜像

在AOSP中 前置摄像头 (index=0)默认是镜像显示预览

frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.cpp


previewTransform = degToTransform(0,
            cameraFacing == CAMERA_FACING_FRONT);

int Parameters::degToTransform(int degrees, bool mirror) {

degToTransform 第二个参数 是是否镜像显示

修改所有 degToTransform 第二个参数为false

Categories
android

orange pi 系统应用

第一

签名要用系统platform级别的签名

第二

adb remount 挂在system目录为可读写

mv /data/app/* /system/app*

adb 触发事件

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

am broadcast -a android.intent.action.BOOT_COMPLETED –receiver-include-background

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