Android应用程序怎么通过socket跟守护进程通信?必须写一个framework层?怎么写?

解决方案 »

  1.   

    ANDROID系统支持的守护进程的socket资源可以在 /dev/socket/下找到从下面可见RILD的SOCKET资源
    # cd dev# cd socket# ls -lsrw-rw----    1 1002     1002            0 Jan  1 00:00 dbus
    srw-------    1 1000     1000            0 Jan  1 00:00 installd
    srw-rw-rw-    1 0        0               0 Jan  1 00:00 keystore
    srw-rw-rw-    1 0        0               0 Jan  1 00:00 property_service
    srw-rw----    1 0        1001            0 Jan  1 00:00 rild
    srw-rw----    1 1001     1000            0 Jan  1 00:00 rild-debug
    srw-rw----    1 0        1009            0 Jan  1 00:00 vold
    srw-rw-rw-    1 0        0               0 Jan  1 00:00 zygote
      

  2.   

    android使用socket使底层和framework通信http://fanwei51880.blog.163.com/blog/static/32406740201011150240981/
      

  3.   

    Android APN开发流程分析http://blogold.chinaunix.net/u/23275/showart.php?id=2480373
      

  4.   

    frameworks/services/java/com/android/server/installer.java代码打开了installd这个SOCKET资源并进行了一些操作,可以参考一下
      

  5.   

    init.rc中关于INSTALLD  SOCKET的说明部分service installd /system/bin/installd
    socket installd stream 600 system system installd这个守护进程的源代码在frameworks/base/cmds/installd文件夹下
      

  6.   

    总算在/dev/socket/目录下显示了自己SERVICE的SOCKET名称了。其实参考installd.c文件就好,不要参考网上什么写守护进程并fork两次什么的。
    用PS看也可以看到自己的进程跑起来了# ps
      PID USER       VSZ STAT COMMAND
        1 0         3056 S    init  
        2 0            0 SW   [kthreadd]
        3 0            0 SW   [ksoftirqd/0]
        4 0            0 SW   [events/0]
        5 0            0 SW   [khelper]
        6 0            0 SW   [async/mgr]
        7 0            0 SW   [suspend]
        8 0            0 SW   [sync_supers]
        9 0            0 SW   [bdi-default]
       10 0            0 SW   [kblockd/0]
       11 0            0 SW   [ksuspend_usbd]
       12 0            0 SW   [khubd]
       13 0            0 SW   [kseriod]
       14 0            0 SW   [kmmcd]
       15 0            0 SW   [kswapd0]
       16 0            0 SW   [aio/0]
       17 0            0 SW   [crypto/0]
       27 0            0 SW   [mtdblockd]
       28 0            0 SW   [map_device_spi.]
       29 0            0 SW   [map_device_spi.]
       30 0            0 SW   [TP-scan]
       31 0            0 SW   [MMC_DATA_HANDLE]
       32 0            0 SW   [MMC_DATA_HANDLE]
       33 0            0 SW   [usbhid_resumer]
       34 0            0 SW   [binder]
       37 0            0 SW   [mmcqd]
       43 0         3060 S    -/bin/sh 
       96 0            0 SW   [flush-179:0]
       98 0          220 S    /system/root/init 
      108 0            0 SW   [flush-31:0]
      109 1000       728 S    /system/bin/servicemanager 
      110 0          836 S    /system/bin/vold 
      111 0          592 S    /system/bin/debuggerd 
      112 1001      4520 S    /system/bin/rild 
      113 0        76692 S    zygote /bin/app_process -Xzygote /system/bin --zygote
      114 1013     17904 S    /system/bin/mediaserver 
      115 1002      1192 S    /system/bin/dbus-daemon --system --nofork 
      116 0          720 S    /system/bin/installd 
      117 1017      1636 S    /system/bin/keystore 
      118 0          728 S    /system/bin/MAP100Serial 
      130 0         3060 S    /bin/sh /system/udisk.sh 
      131 0         3068 S    /bin/sh /system/otg.sh 
      186 1000      169m S    system_server                                        
      226 0            0 SW   [ipolldevd]
      238 1001      110m S    com.android.phone                                    
      240 10004     122m S    android.process.acore                                
      269 10012     102m S    com.android.mms                                      
      290 0         2924 S    sleep 3 
      291 10001    96508 S    com.android.alarmclock                               
      297 0         2924 S    sleep 3 
      300 10008    99.3m R    android.process.media                                
      312 10014    98.7m S    com.android.calendar                                 
      323 0         3060 R    ps 
      

  7.   

    在android应用层用下面的代码就可以连到自己的SOCKET了
    1.LocalSocket s =null;
    2.LocalSocketAddress l;
    3.s = new LocalSocket();
    4.l = new LocalSocketAddress(SOCKET_NAME,LocalSocketAddress.Namespace.RESERVED);
    5.s.connect(l);
      

  8.   

    今天连上SOCKET很快就搞好了,但读写数据老是出问题。installd.c文件里面用的是READX但没看到它是自己重新对READ封了一层,搞的半天没明白用READX咋就编译不了的问题。不过最后看到这一点总算通了。算是欣慰!
      

  9.   

    楼上大侠说清楚点啊完整的流程还有怎么把自己的进程加到android机器里面