android4.4 framework添加第三方調用介面

來源:互聯網
上載者:User

標籤:android4.4   init   介面   可執行檔   service   

近日,將第三方可執行檔封裝成介面,移植到了系統中。現將曲折的成功之路做一個總結,與大家共用。

軟體平台:android

硬體平台:marvell

第三方可執行檔:AA, BB;

工作需求:兩個檔案必須按順序依次執行,完成功能,在framework層要提供相應的api介面,供應用程式調用。

由於此介面與wifi相關,因此framework層面將介面添加到了WifiApManager.java中,

--- a/wifi/java/android/net/wifi/WifiApManager.java
+++ b/wifi/java/android/net/wifi/WifiApManager.java
@@ -1213,6 +1213,20 @@ public class WifiApManager {
             return false;
         }
     }

    public boolean startXX() {
        try {
            mService.startXX();
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }
 
    public boolean stopXX() {
        try {
            mService.stopXX();
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }

注意修改相應的aidl檔案,否則無法調用介面。

--- a/wifi/java/android/net/wifi/IWifiApManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiApManager.aidl
@@ -103,6 +103,10 @@ interface IWifiApManager
     void startWifi();
 
     void stopWifi();
+    
+    void startXX();
+
+    void stopXX();

接著是主角部分的改動:

--- a/services/java/com/android/server/wifi/WifiApService.java
+++ b/services/java/com/android/server/wifi/WifiApService.java
@@ -1010,6 +1010,21 @@ public final class WifiApService extends IWifiApManager.Stub {
         return info;
     }
 
+       public void startXX() {
+               SystemProperties properties = new SystemProperties();
+
+               properties.set("ctl.stop", "XX_killer");
+               properties.set("ctl.start", "XX_start");
+
+       }
+
+       public void stopXX() {
+               SystemProperties properties = new SystemProperties();
+
+               properties.set("ctl.stop", "XX_start");
+               properties.set("ctl.start", "XX_killer");
+       }
我們看到相應的方法會開啟或殺死相應的service,兩個service(XX_start, XX_stop) 是在init.rc中聲明定義的。

--- a/copyfiles/root/init.pxa1l88.rc
+++ b/copyfiles/root/init.pxa1l88.rc
@@ -313,6 +313,20 @@ service hostapd2 /system/bin/hostapd -dd -e/data/misc/wifi/entropy.bin /data/mis
      disabled
      oneshot
 
+# XX killer
+service XX_killer /system/bin/wifiapp_helper.sh -k
+    user root
+    group log system
+    class main
+       disabled
+
+# XX start
+service XX_start /system/bin/wifiapp_helper.sh -s
+    user root
+    group log system
+    class main
+       disabled
+

service的執行是通過wifiapp_helper.sh指令碼執行完畢的,指令碼內容如下:

#!/system/bin/sh

WIFIDIR=/data/weixin
SRC=/system/etc/weixin
DNSFILE=$WIFIDIR/blackWhiteDns.conf

APP_LOG0=$WIFIDIR/wifiapp.log
APP_LOG1=$WIFIDIR/wifiapp1.log

LIST_LOG0=$WIFIDIR/list.log
LIST_LOG1=$WIFIDIR/list1.log

MKDIR=mkdir
CHMOD="chmod 777"
CP=cp
CD=cd
MV=mv
RM=rm

function dirExsit() {
if [ ! -d "$WIFIDIR" ]; then
$MKDIR  "$WIFIDIR"
$CP $SRC/blackwhitelist $WIFIDIR
$CP $SRC/blackwhitelist_weixin.conf $WIFIDIR
$CP $SRC/wifiapp $WIFIDIR
$CP $SRC/wifiapp.conf $WIFIDIR


$CHMOD $WIFIDIR/*
fi
}


function execWifiapp() {
$CD $WIFIDIR
echo $PWD

if [ -f $APP_LOG0 ]; then
$MV $APP_LOG0 $APP_LOG1
./AA -c wifiapp.conf &> $APP_LOG0
else
./AA -c wifiapp.conf &> $APP_LOG0
fi
}

function execBlack() {
$CD $WIFIDIR
echo $PWD

if [ -f $LIST_LOG0 ]; then
$MV $LIST_LOG0 $LIST_LOG1
./BB > $LIST_LOG0
else
./BB > $LIST_LOG0
fi
}

case $1 in
"-s" )
dirExsit
execWifiapp
execBlack
exit 0;;

"-k" )
PID=`ps | busybox grep blackwhite | awk ‘{print $2}‘`
kill -9 $PID
PID=`ps | busybox grep wifiapp | awk ‘{print $2}‘`
kill -9 $PID
$RM $DNSFILE
exit 0;;
esac

至此,移植添加完畢。當中遇到了必須切換到可執行檔放置的目錄才能正確執行,否則報錯,因此指令碼需先切換目錄,然後執行~~~~~

android4.4 framework添加第三方調用介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.