Android7.1开机自启动APP

本文介绍在全志A40i平台的Android7.1系统中实现APP开机自启动的方法。主要分为两步:一是预装APP,包括在特定目录下创建文件夹并放置APK和android.mk文件;二是修改源码,通过编写shell脚本并将其加入系统启动流程,实现在系统初始化完成时自动启动指定APP。

Android7.1开机自启动APP

平台:全志A40i 、Android7.1
安卓开机自启动APP,一般都是获取开机广播,实现APP自启动的,但有写客户不会获取开机广播,可以使用下面方法启动APP。实现过程是编写一个shell的启动脚本,开机自动运行这个脚本,通过脚本启动APP。
实现方法分为两个步骤,第一是预装app,第二是修改android源码,用脚本启动app。
一、 app预装
1、 在android/device/softwinner/a40-p1/目录下创建一个myapp的文件夹,把APP放到myapp文件夹上,App文件夹包含appname.apk安装包和一个android.mk文件。

###############################################################################
# android.mk文件
LOCAL_PATH := $(call my-dir)

################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := name
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)

2、 修改android/device/softwinner/a40-p1目录下的a40_p1.mk文件,在PRODUCT_PACKAGES+=下添加App名,添加文件的路径,使编译的时候能编译的App文件。
到这里预安装就完成了。
二、 脚本启动app
1、卓的终端中,我可以用am start -n 包名类名的方式启动App,具体操作流程可以查看readme文件。就是我们可以写一个脚本文件运行am start -n 命令,现实开机自启动app。
2、写一个shell 脚本
其中com.tyjxsm.androidgpiodemo是APP的包名,com.tyjxsm.eprfbc.MainMenu是APP的类名。

#!/system/bin/sh
am start -n com.tyjxsm.androidgpiodemo/com.tyjxsm.eprfbc.MainMenu   

把脚本app.sh文件放在android/device/softwinner/a40-p1目录,并在当前目录下的a40_p1.mk文件添加一下代码,目的是把当前的app.sh文件编译到系统的system/bin/目录中。

PRODUCT_COPY_FILES += \
 	device/softwinner/a40-p1/app.sh:system/bin/app.sh

3、 在android/system/core/rootdir/ init.rc文件中添加

service app /system/bin/sh  /system/bin/app.sh
    class main
    user root
    group root 
    oneshot
on property:sys.boot_completed=1
    start app
    exec /system/bin/sh /system/bin/app.sh

这里是开机运行app.sh脚本,同过脚本启动APP

<think>嗯,用户的问题是关于在Android 7.1系统中设置开机自动校准电量。这个问题涉及到系统级硬件管理,需要谨慎处理。 用户可能正在开发定制ROM或系统应用,也可能是遇到设备电量显示异常的问题。从技术深度来看,这属于Android底层电源管理模块(BatteryService)的功能扩展,普通用户通常不会触及这个层面。 核心难点在于:Android原生系统并没有提供开机自动校准的开关,需要修改系统服务代码。关键点包括: 1 找到BatteryService的校准触发点(通常是`updateBattery`方法) 2 添加开机完成的广播接收器(ACTION_BOOT_COMPLETED) 3 需要系统签名权限 安全风险需要特别注意:错误修改可能导致电池数据异常甚至硬件损坏。用户如果没有系统开发经验,建议优先考虑应用层方案(如Tasker脚本触发校准)。 用户可能忽略的细节:部分设备需要先重置电池统计文件(/system/bin/reset_battery_stats.sh),且Android 7.1的selinux策略会限制脚本执行。 在提供解决方案时,必须强调: - 需要root权限 - 需要反编译系统服务 - 不同厂商的硬件差异 如果用户只是普通使用者,应该警告风险并建议官方校准方法(放电至关机后充电12小时)。但根据问题表述,用户更可能是开发者或高级用户,所以还是给出技术方案,但用分级警告标出风险。</think>在 Android 7.1 系统中实现开机自动校准电量需要修改系统级代码,**普通用户无法直接设置**,需系统开发者或设备制造商级别操作。以下是技术实现路径(⚠️ 警告:需系统源码编译环境及签名权限): --- ### 核心步骤 1. **修改 `BatteryService` 源码** 文件路径:`frameworks/base/services/core/java/com/android/server/BatteryService.java` 在 `systemReady()` 方法中添加校准逻辑: ```java @Override public void systemReady() { // 原有代码... calibrateBatteryOnBoot(); // 添加开机校准函数 } private void calibrateBatteryOnBoot() { File batteryCalibration = new File("/sys/class/power_supply/battery/calibrate"); if (batteryCalibration.exists()) { try { FileWriter writer = new FileWriter(batteryCalibration); writer.write("1"); // 写入校准指令(具体值因硬件而异) writer.close(); } catch (IOException e) { Slog.e(TAG, "Failed to trigger battery calibration", e); } } } ``` 2. **添加内核文件访问权限** 在 `device/<厂商>/<设备>/sepolicy/file_contexts` 中添加: ``` /sys/class/power_supply/battery/calibrate u:object_r:sysfs_battery:s0 ``` 3. **编译并刷写系统镜像** ```bash source build/envsetup.sh lunch <设备型号> make -j8 fastboot flash system system.img ``` --- ### 关键注意事项 1. **硬件依赖性** 校准文件路径 (`/sys/class/power_supply/battery/calibrate`) **因芯片平台不同而异**: - Qualcomm 平台:通常为 `/sys/module/qpnp_fg/parameters/recalc_soh` - MTK 平台:可能为 `/proc/fg_state` *需查阅具体芯片文档确认[^1]* 2. **安全风险** - 错误校准可能导致电量显示异常 - 频繁校准加速电池老化 - 需系统签名(平台密钥)否则无法修改系统服务 3. **替代方案(非系统级)** 普通用户可通过 ADB 命令临时校准: ```bash adb shell dumpsys battery reset ``` *需每次手动执行且要求 USB 调试权限* --- ### 技术原理 Android 电量校准本质是重置 **库仑计数据** 与 **电压-电量映射表**。系统通过内核接口(如 `/sys/class/power_supply/`)写入校准标志位,触发电池 IC 重新计算剩余容量(RM)和满充容量(FCC)[^2]。公式简化为: $$ SOC_{\text{new}} = \frac{RM_{\text{calibrated}}}{FCC_{\text{calibrated}}} \times 100\% $$ ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值