Android的自启动

最近要用到这个,所以也花时间看看。

从分层来说,安卓的自启动也分成三种,app的自启动,framework服务的自启动,HAL服务的自启动。现在简单说说这三种吧。当然,我主要关注的还是最后一种。。。

一 App的自启动

1 AndroidManifest.xml中修改

复制代码
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

2 编写广播接收器

复制代码
public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            // 启动应用的主活动
            Intent activityIntent = new Intent(context, MainActivity.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(activityIntent);

            // 或者启动服务
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

3 在AndroidManifest.xml中注册广播接收器

复制代码
<receiver android:name=".BootCompletedReceiver" android:enabled="true" android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

二 Framework的自启动

基本上和app差不多,有一些细微修改。

AndroidManifest.xml中定义是这样的。

复制代码
<service android:name=".MyService" android:enabled="true" android:exported="false" />

在广播接收器中启动服务是这样的。

复制代码
@Override
public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Intent serviceIntent = new Intent(context, MyService.class);
        context.startService(serviceIntent);
    }
}

三 Hal service的自启动

1 增加service.rc

复制代码
service SampleService /system/bin/sampleservice
    class hal
    user system
    group system
    # 如果在rc⽂件中添加了 'class hal',即归类为hal服务,会在init的start hal阶段通过
    hwservice启动所有的hal服务。

在Android.bp中增加这个rc文件。

2 增加Selinux权限

关于这部分,可以看看我之前写的:SEAndroid学习12 -- SELinux-CSDN博客

关于这个部分,有两个部分,是一个系统的配置,一个是服务的配置。

系统配置:

在瑞芯微的平台,是这样获取路径的:get_build_var BOARD_SEPOLICY_DIRS

hwservice.te

复制代码
type vnd_nxpnfc_hwservice, hwservice_manager_type;

hwservice_contexts

复制代码
vendor.nxp.nxpnfc::INxpNfc (对照manifest中增加的instance,别写错)
u:object_r:vnd_nxpnfc_hwservice:s0

file_contexts

复制代码
/vendor/bin/hw/vendor\.nxp\.nxpnfc@1\.0-service u:object_r:nxpnfc_hal_exec:s0

服务配置:

fileservice.te

复制代码
type nxpnfc_hal, domain;
type nxpnfc_hal_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(nxpnfc_hal)
add_hwservice(nfc, vnd_nxpnfc_hwservice) # 如果是通过nfc进程启动新加的服务,才需要添
加

具体可以参考这个:android 实现一个开机自启动的service_android开机自启动service-CSDN博客

下周会具体做部分工作,到时候再更新把。。。

参考:

Rockchip_Developer_Guide_Android_SELinux(Sepolicy)_CN.pdf

相关推荐
叽哥6 分钟前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走25 分钟前
创建自定义语音录制View
android·前端
用户20187928316725 分钟前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户20187928316725 分钟前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
Kapaseker2 小时前
你一定会喜欢的 Compose 形变动画
android
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
zhangphil4 小时前
Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
android·kotlin
程序员码歌10 小时前
【零代码AI编程实战】AI灯塔导航-总结篇
android·前端·后端
书弋江山12 小时前
flutter 跨平台编码库 protobuf 工具使用
android·flutter
来来走走14 小时前
Flutter开发 webview_flutter的基本使用
android·flutter