Android APK 中启动特定的 bin 服务

首先参考资料: http://www.2cto.com/kf/201412/363630.html

    日前工作中遇到一个需求:要求在启动App时,启动对应的bin 服务,从而使得实现APK作为Client端,而bin 服务作为 Server端 实现两者socket通信。

    首先bin 服务文件是由同事A君负责用C语言编写实现,完成后编译到Android手机的system/bin 目录下,名称为:cloudtestsuited ;

    至于APK则是由本人负责编写实现,利用socket实现两者的通信。

    为了实现打开apk即打开了对应的bin服务,故需要实现在apk中启动bin服务需求。

在本案中是利用通过init.rc启动系统服务来运行对应的bin服务文件;

1.Android启动文件系统后调用的会调用第一个应用程序是/init,此文件一个很重要的内容就是解析了init.rc和init.xxx.rc,然后执行解析出来的任务。而init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。利用这一点,可以编写简单的关机或重启的sh脚本文件,通过系统init解析,执行相应的操作。

以mtk 6795平台工程为例(后文都是此平台),在device/amt/amt6795_evb_m/init.project.rc 文件中添加如下代码:

on post-fs-data //在此节点下添加如下代码
    chmod 0777 /system/bin/cloudtestsuited

on init // 在此节点下添加如下代码
service cloudtestsuited /system/bin/cloudtestsuited
         class main
         oneshot
         disabled

oneshot选项表示该服务只启动一次,而如果没有oneshot选项,这个可执行程序会一直存在--如果可执行程序被杀死,则会重新启动。

disabled 表示禁用服务,此服务开机时不会自动启动,但是可以在应用程序中手动启动它。

参考代码文件:

# MTK project .rc configure

import init.mt6795.usb.rc

on init
    mkdir /mnt/media_rw/usbotg 0700 media_rw media_rw
    mkdir /storage/usbotg 0700 root root

on post-fs-data

#
# Connectivity related device nodes & configuration (begin)
#

#/dev/ttyMT2 for Connectivity BT/FM/GPS usage
    chmod 0660 /dev/ttyMT2
    chown system system /dev/ttyMT2


# STP, WMT, GPS, FM and BT Driver
#   insmod /system/lib/modules/mtk_hif_sdio.ko
#   insmod /system/lib/modules/mtk_stp_wmt.ko
#   insmod /system/lib/modules/mtk_stp_uart.ko
#   insmod /system/lib/modules/mtk_stp_gps.ko
#   insmod /system/lib/modules/mtk_stp_bt.ko
#   insmod /system/lib/modules/mtk_fm_drv.ko
#   insmod /system/lib/modules/mtk_wmt_wifi.ko

#SMB
    chown system system /proc/smb/ScreenComm
    chmod 0660 /proc/smb/ScreenComm
    
# Create char device file for WMT, GPS, BT, FM, WIFI
#    mknod /dev/stpwmt c 190 0;
#    mknod /dev/stpgps c 191 0;
#    mknod /dev/stpbt  c 192 0;

#    chmod 0660 /dev/stpwmt
#    chown system system /dev/stpwmt
    
#    chmod 0660 /dev/wmtdetect
#    chown system system /dev/wmtdetect
 		
    mknod /dev/wmtWifi c 153 0
    chmod 0660 /dev/wmtWifi
    chown system system /dev/wmtWifi
#Camera
    chmod 0660 /dev/MAINAF
    chown system camera /dev/MAINAF

    chmod 0660 /dev/MAINAF2
    chown system camera /dev/MAINAF2

    chmod 0660 /dev/SUBAF
    chown system camera /dev/SUBAF

    chmod 0660 /dev/GAF001AF
    chown system camera /dev/GAF001AF
   
    chmod 0660 /dev/DW9714AF
    chown system camera /dev/DW9714AF
    
    chmod 0660 /dev/AD5820AF
    chown system camera /dev/AD5820AF
    
    chmod 0660 /dev/BU64745GWZAF
    chown system camera /dev/BU64745GWZAF
    
    chmod 0660 /dev/LC898212AF
    chown system camera /dev/LC898212AF

    chmod 0660 /dev/LC898122AF
    chown system camera /dev/LC898122AF

# BT
#    chmod 0660 /dev/stpbt
#    chown bluetooth radio /dev/stpbt

# Add by Janning begin
    chmod 0777 /system/bin/cloudtestsuited
# Add by Janning end

# GPS
#    chown gps gps /dev/stpgps
    chown gps gps /sys/class/gpsdrv/gps/pwrctl
    chown gps gps /sys/class/gpsdrv/gps/suspend
    chown gps gps /sys/class/gpsdrv/gps/state
    chown gps gps /sys/class/gpsdrv/gps/pwrsave
    chown gps gps /sys/class/gpsdrv/gps/status
#    chmod 0660 /dev/stpgps

# WiFi
    mkdir /data/misc/wifi 0770 wifi wifi
    mkdir /data/misc/wifi/sockets 0770 wifi wifi
    mkdir /data/misc/wpa_supplicant 0770 wifi wifi 
    chown wifi wifi /data/misc/wifi

# ANT
	chmod 0660 /dev/stpant
	chown ant radio /dev/stpant

#Disable for one Single loader
# Load WiFi Driver
#   insmod /system/lib/modules/wlan_mt.ko

# Char device for BT 3.0 HS
    mknod /dev/ampc0 c 151 0
    chown bluetooth bluetooth /dev/ampc0
    chmod 0660 /dev/ampc0

#
# Connectivity related device nodes & configuration (end)
#


on init
    # Refer to http://source.android.com/devices/tech/storage/index.html
    # It said, "Starting in Android 4.4, multiple external storage devices are surfaced to developers through 
    #           Context.getExternalFilesDirs(), Context.getExternalCacheDirs(), and Context.getObbDirs().
    #           External storage devices surfaced through these APIs must be a semi-permanent part of the device (such as an SD card slot in a battery compartment).
    #           Developers expect data stored in these locations to be available over long periods of time."
    # Therefore, if the target doesn't support sd hot-plugging (Ex: the SD card slot in a battery compartment), we need to export SECONDARY_STORAGE in 'boot' section
    # 
    # export SECONDARY_STORAGE /storage/sdcard1

service fuse_usbotg /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usbotg /storage/usbotg
    class late_start
    disabled

#
# Connectivity related services (Begin)
#

service wmt_loader /system/bin/wmt_loader
	class core
	user root
	group root
	oneshot

service 66xx_launcher /system/bin/6620_launcher -m 4 -p /system/etc/firmware/
    user system
    group system
	class core

on property:service.wcn.coredump.mode=2
start stp_dump

service stp_dump /system/bin/stp_dump3
	user root
	group root
	class core
	disabled
	oneshot

# Add by Janning begin
service cloudtestsuited /system/bin/cloudtestsuited
    class main
    disabled
# Add by Janning end

#
# Connectivity related services (End)
#

2.添加对应的selinux权限

在device\mediatek\common\sepolicy\file_contexts 文件中添加bin服务对应的权限:

# Add by silead begin
/system/bin/cloudtestsuited u:object_r:fpsvcd_exec:s0  //此行
# Add by silead end
device\mediatek\common\sepolicy\ system_app.te 文件中添加bin服务对应的权限:

# Add by silead 2016/03/18 begin
# add for fp.apk create file under '/data/silead/' file path
allow system_app fpsvcd_data_file:dir { create write add_name remove_name read open search};
allow system_app fpsvcd_data_file:file { unlink getattr create write open read };
# add for starting cloudtestsuited in apk
allow system_app fpsvcd_tmpfs:file { read write open getattr };
allow system_app fpsvcd_exec:file { getattr read execute open execute_no_trans };
allow system_app fpsvcd:dir { read open };
allow system_app tmpfs:dir { read write getattr };
# Add by silead 2016/03/18 end
device\mediatek\common\sepolicy\ 目录下新增一个权限 文件fpsvcd.te:
type fpsvcd_exec , exec_type, file_type;
type fpsvcd ,domain;
init_daemon_domain(fpsvcd)

allow fpsvcd fpsvcd:capability { sys_nice dac_override net_admin};
allow fpsvcd fpsvcd:capability2 { block_suspend };
allow fpsvcd init_tmpfs:file {getattr read open};
allow fpsvcd tmpfs:dir { write add_name };
allow fpsvcd fpsvcd_tmpfs:file { write create read open};
allow fpsvcd silead_fp_dev_device:chr_file { read write ioctl open };
allow fpsvcd uhid_device:chr_file { write open ioctl};
allow fpsvcd fpsvcd:netlink_kobject_uevent_socket {create read write setopt bind };
allow fpsvcd sysfs_wake_lock:file {write read open};
allow fpsvcd system_app:dir { read open };
#allow fpsvcd system_data_file:dir { create write add_name read open };
#allow fpsvcd system_data_file:file { create write open read };
allow fpsvcd fpsvcd_data_file:dir { create write add_name remove_name read open search};
allow fpsvcd fpsvcd_data_file:file {unlink getattr create write open read };
#allow fpsvcd silead_data_file:dir { search create write add_name read open };
#allow fpsvcd silead_data_file:file { create write open read getattr };
allow fpsvcd platform_app_tmpfs:file { open read write };
allow fpsvcd fingerprintd:dir { open read  };
allow fpsvcd fuse:dir { search open add_name remove_name read write create};
allow fpsvcd fuse:file { unlink open read write create getattr setattr rename};
allow fpsvcd property_socket:sock_file { write };
allow fpsvcd init:unix_stream_socket { connectto };
allow fpsvcd system_prop:property_service { set }; 
具体参考代码:

#
#############################
# Custom files
/custom(/.*)?		u:object_r:custom_file:s0

/dev/block/mtd(.*)?     u:object_r:mtd_device:s0

#############################
# Executables
# Meta/Factory Mode multi_init
/sbin/multi_init		u:object_r:init_exec:s0


#############################
# Data files
#
/data/aee_exp(/.*)?  u:object_r:aee_exp_data_file:s0
/data/agps_supl(/.*)?    u:object_r:agpsd_data_file:s0
/data/misc/gps(/.*)?   u:object_r:gps_data_file:s0
/data/anr/SF_RTT(/.*)? u:object_r:sf_rtt_file:s0
/data/app/mcRegistry(/.*)? u:object_r:mobicore_data_file:s0
/data/ccci_cfg(/.*)? u:object_r:ccci_cfg_file:s0
/data/flashless(/.*)? u:object_r:c2k_file:s0
/data/core(/.*)? u:object_r:aee_core_data_file:s0
/data/dontpanic(/.*)? u:object_r:dontpanic_data_file:s0
/data/dumpsys(/.*)?    u:object_r:aee_dumpsys_data_file:s0
/data/extmdl(/.*)? u:object_r:mdlog_data_file:s0
/data/http-proxy-cfg(/.*)? u:object_r:http_proxy_cfg_data_file:s0
/data/log_temp(/.*)? u:object_r:logtemp_data_file:s0
/data/lost\+found(/.*)? u:object_r:lost_found_data_file:s0
/data/mdlog(/.*)? u:object_r:mdlog_data_file:s0
/data/mdl(/.*)? u:object_r:mdlog_data_file:s0
/data/mdl3(/.*)? u:object_r:mdlog_data_file:s0
/data/mediaserver(/.*)? u:object_r:mediaserver_data_file:s0
/data/misc/acdapi(/.*)? u:object_r:acdapi_data_file:s0
/data/misc/akmd_set.txt u:object_r:akmd8963_access_file1:s0
/data/misc/mblog(/.*)? u:object_r:logmisc_data_file:s0
/data/misc/xlog(/.*)? u:object_r:xlog_data_file:s0
/data/misc/PDC.ini u:object_r:akmd8963_access_file2:s0
/data/misc/ppp(/.*)? u:object_r:ppp_data_file:s0
/data/.tp(/.*)? u:object_r:thermal_manager_data_file:s0
/data/misc/radvd(/.*)? u:object_r:radvd_data_file:s0
/data/misc/sensor.log		u:object_r:bmm050_sensor_log_file:s0
/data/misc/sensor(/.*)?		u:object_r:sensor_data_file:s0
/data/misc/stp_dump(/.*)? u:object_r:stp_dump_data_file:s0
/data/misc/wide-dhcpv6(/.*)? u:object_r:wide_dhcpv6_data_file:s0
/data/misc/wpa_supplicant(/.*)? u:object_r:wpa_supplicant_data_file:s0
/data/nfc_socket(/.*)? u:object_r:nfc_socket:s0
/data/nvram(/.*)? u:object_r:nvram_data_file:s0
/data/cct(/.*)? u:object_r:cct_data_file:s0
/data/md3(/.*)? u:object_r:c2k_file:s0
/nvdata(/.*)? u:object_r:nvdata_file:s0
/data/SF_dump(./*)? u:object_r:sf_bqdump_data_file:s0
/data/ipsec(./*)? u:object_r:wod_ipsec_conf_file:s0
/data
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值