通过jni写二进制文件失败总结

在Android系统中,由于权限限制,JNI通过动态库写入/dev/ubi0_miscdata失败。解决方案包括:1) 将数据同步到其他文件再读取;2) 使用Runtime.exec()执行bin文件进行写操作;3) 创建具有root权限的service执行写操作。最终采用第三种方案,通过property_set启动service,解决了权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:
产线用到的CIT、PCBA、RUNIN等标志位,工模apk做完测试之后调用so动态库文件写入二进制文件。Write方法失败。
问题分析:
之前的项目标志位是存在productinfo/producinfo.bin二进制文件中,可以直接写成功,SC8830 android2.3平台是存在/dev/ubi0_miscdata 裸分区中,使用ubi方案,该裸分区必须root权限才可以去写,但是我们工程模式apk具有system权限,通过jni调用底层so动态库文件去写,该so库文件也是system权限,导致写操作失败。返回-1.
问题解决:
1. 在产线down完版本PC端发AT指令去写sn号时,将/dev/ubi0_miscdata同步到productinfo/producinfo.bin文件(这两个二进制文件的结构相同),结构定义如下所示:
typedef struct _tagSP09_PHASE_CHECK
{
unsigned long Magic;                 // "SP09"   (ÀÏ\u0153Ó¿ÚΪSP05)
char     SN1[SP09_MAX_SN_LEN]; // SN , SN_LEN=24
char     SN2[SP09_MAX_SN_LEN];    // add for Mobile
int     StationNum;                 // the test station number of the testing
char     StationName[SP09_MAX_STATION_NUM][SP09_MAX_STATION_NAME_LEN];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值