




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 在init.rc中创建文件夹实例1: 在/data/misc下建立test1、test2、test3三个文件夹,并设置好相应权限、用户、用户组实现方法:参考init.rc脚本中on post-fs-data阶段中类似的命令,比如mkdir /data/misc/systemkeys 0700 system system其中0700表示权限,system表示用户 system表示用户组所以实现只需在在init.rc中添加如下命令:#创建test1的文件夹,文件权限为0770 ,owner和group均为rootmkdir /data/misc/test1 0770 rootroot#创建test2的文件夹,文件权限为0770 ,owner和group均为wifimkdir /data/misc/test2 0770 wifi wifi#创建test3的文件夹,文件权限为0770, owner为system, group为miscmkdir /data/misc/test3 0770 system misc结果如下:编译固件后重启在串口中敲入ls al /data/misc查看结果如下:这三个文件夹成功创建,且权限、用户以及用户组都跟设定的一样2. 在init.rc中启动服务实例2: 在init.rc中启动shell脚本编写的服务service_test,,该服务会在system下创建文件test.txt,将权限设为644实现步骤(4步):参考init.rc脚本中flash_recovery实现的方法,具体步骤如下(4步):1. 用shell脚本编写service_test服务service_test.sh#!/system/bin/sh/system/xbin/busybox mount -o rw,remount /system/system/bin/touch /system/test.txt /system/bin/chmod 644 /system/test.txt2. 在init.rc中定义服务service service_test /system/etc/service_test.sh class main user root group root oneshot3. 添加service_test.sh的权限,在/android/system/core/include/private/android_filesystem_config.h的androdi_files列表中加入如下定义(参考install-recovery.sh):static const struct fs_path_config android_files = 00755, AID_ROOT, AID_ROOT, 0, system/etc/install-recovery.sh ,+ 00755, AID_ROOT, AID_ROOT, 0, system/etc/init_test.sh ,-4. 将service_test.sh拷贝到小机的/system/etc下第1步:将service_test.sh放到leopardbuildgs702cprebuiltutils下第2步:修改主Makefile,在android_system_img阶段加入如下命令:android_system_img:-+ cp $(PREBUILT_DIR)/utils/init_test.sh $(ANDROID_SYSTEM_DIR)/etc/; 结果如下:完成上述四步以后编译固件烧录重启以后会在/system/etc存在service_test.sh脚本:在/system中生成权限为644的test.xml文件:3. 在应用程序中触发init.rc中的属性启动服务实例3: 在设置的开发者选项中加入一个选择按钮,选中或者未选中按钮时会触发init.rc脚本中的相应的属性,启动相应服务,实现某个应用的隐藏或者未隐藏实现步骤(4步):1. 在init.rc中添加对应的服务(参考实例2)和触发条件1)用shell脚本编写服务#service_hide.sh脚本:隐藏文件管理器apk#!/system/bin/sh/system/xbin/busybox mount -o rw,remount /system/system/bin/mv /system/priv-app/ ActExplore.apk /system/priv-app/ ActExplore.apk_bak#service_show.sh脚本:显示文件管理器apk#!/system/bin/sh/system/xbin/busybox mount -o rw,remount /system/system/bin/mv /system/priv-app/ActExplore.apk_bak /system/priv-app/ActExplore.apk 2)在init.rc中添加服务,其中disabled选项表示该服务不会在init进程中自动运行,必须显式地通过服务器来启动,在这里通过触发属性去启动 #添加service_hide服务 service service_hide /system/etc/service_hide.sh class main user rootgroup rootdisabledoneshot#添加service_show服务:service service_show /system/etc/service_test2.sh class main user rootgroup rootdisabled oneshot 3)将service_hide.sh和service_show.sh添加权限,具体参考实例2的第3步 4)编译时将service_hide.sh和service_show.sh拷贝到小机的/system/etc下,具体参考实例2的第4步 5)经过上面四步,在init.rc中已添加好服务,接下来添加触发条件 #app.phonesky.show=1时,启动service_show服务,运行service_show.sh脚本,显示apkon property:app.phonesky.show=1 start service_show#app.phonesky.show=0时,启动service_hide服务,运行service_hide.sh脚本,隐藏apkon property:app.phonesky.show=0 start service_hide2.将属性app.phonesky.show添加到system/core/init/property_service.c的property_perms列表中,从而添加进程对属性app.phonesky.show的访问权限,具体添加方法如下:struct const char *prefix; unsigned int uid; unsigned int gid; property_perms = - selinux. , AID_SYSTEM, 0 ,+ app.phonesky.show, AID_SYSTEM, 0, NULL, 0, 0 3.在设置的开发者选项中加入一个选择按钮的选项,选中时调用SystemProperties.set()函数将app.phonesky.show置1显示apk,未选中时置0隐藏apk1) 增加一个选择按钮的选项,即Preference:在 android/packages/apps/Settings/res/xml/development_prefs.xml中添加在android/packages/apps/Settings/res/values/strings.xml中添加 Show Apk2) 实现选择按钮对应的接口在android/packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java下 /声明和初始化 private static final String SHOW_PHONESKY = “show_phonesky”;private CheckBoxPreference mShowPhonesky;mShowPhonesky = findAndInitCheckboxPref(SHOW_PHONESKY);/在onPreferenceTreeClick()函数中添加public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) -else if (preference = mShowPhonesky) if ( mShowPhonesky.isChecked() ) /按钮选中时,调用SystemProperties.set将app.phonesky.show置1,从而触发init.rc中service_show服务的执行,从而显示apk SystemProperties.set(app.phonesky.show, 1); else/去掉按钮选中时,调用SystemProperties.set将app.phonesky.show置0,从而触发init.rc中service_hide服务的执行,从而隐藏apk SystemProperties.set(app.phonesky.show, 0); 结果如下:1.重现编译固件烧入后重启,选中设置-开发者选项-Show Apk选项,然后在串口中输入ls al /priv-app,结果如下:2.去掉选中设置-开发者选项-Show Apk选项,然后在串口中输入ls al /priv-app,结果如下:4. 在应用程序中直接启动init.rc中的服务实例:同3实现步骤(3步):1.在init.rc中添加服务,同实例3的步骤1的第1)2)3)4)步,将5)步去掉2.应用程序必须有root或者system权限才能启动init.rc中定义的服务,使应用程序具有system权限的方法:1)在应用程序的AndroidManifest.xml中的manifest节点中加入 android:sharedUserId=android.uid.system这个属性。2)修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行3)使用mm命令来编译3. 在设置的开发者选项中加入一个选择按钮的选项,选中时调用SystemProperties.set()函数通过ctl.start属性启动init.rc中定义的service_show服务,去直接启动显示apk,未选中时启动service_hide服务,隐藏apk1) 增加选择按钮的选项,实现方法同实例3的的步骤5的的第1)步2) 实现选择按钮对应的接口,实现方法类似实例3的步骤5的的第2)步,只是调用SystemProperties.set()函数时,传入的参数不一样 else if (preference = mShowPhonesky) if ( mShowPhonesky.isChecked() ) /属性”ctrl.start”是系统定义的属性,表示启动服务,在这里按钮选中时,调用SystemProperties.set会直接启动init.rc中定义的service_show服务,从而显示apk SystemProperties.set(ctl.start, service_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生活污水管网综合整治工程建筑工程方案
- 现场勘察技术标准与操作方案
- 建设项目投资风险评估
- 2025年医学考试试题题库及答案
- 2025黑龙江绥化海伦市民政服务站招聘46人模拟试卷(含答案详解)
- 多蒙课件包教学课件
- 历城二中体育模拟测试题及答案
- 2025福建省南平闽延电力建设有限公司建阳分公司招聘2人考前自测高频考点模拟试题及一套参考答案详解
- Quinacrine-hydrochloride-hydrate-Standard-生命科学试剂-MCE
- 2025江苏苏州凌晔进出口有限公司招聘7人模拟试卷及完整答案详解
- 2025年国家电网《安规》考试判断题库及答案
- 朝花夕拾-无常解析
- 《人工智能基础第2版》全套教学课件
- 365天艾斯宾浩记忆表格(打印版-背专业课)
- 《名著阅读 艾青诗选》核心素养课件1(第3课时)
- DB14-T 2779-2023 营造林工程监理规范
- 污水处理厂污泥处理处置投标方案
- 手机媒体概论(自考14237)复习必备题库(含真题、典型题)
- 陪诊师资格考试复习题库宝典(含答案)
- 中美关系新时代
- GB/T 17622-2008带电作业用绝缘手套
评论
0/150
提交评论