android4.4 framework添加第三方调用接口
2015-03-11 15:12
351 查看
近日,将第三方可执行文件封装成接口,移植到了系统中。现将曲折的成功之路做一个总结,与大家共享。
软件平台: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
至此,移植添加完毕。当中遇到了必须切换到可执行文件放置的目录才能正确执行,否则报错,因此脚本需先切换目录,然后执行~~~~~
软件平台: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
至此,移植添加完毕。当中遇到了必须切换到可执行文件放置的目录才能正确执行,否则报错,因此脚本需先切换目录,然后执行~~~~~
相关文章推荐
- 通过调用第三方应用实现彩信或邮件添加附件(Photo,Video,Audio)功能
- android 多媒体文件 支持第三方应用的调用接口
- js调用百度接口api接口添加标注
- 如何给filter添加自定义接口及调用
- 如何给filter添加自定义接口及调用
- 关于通过.NET Framework 2.0 中 SqlDataSource 控件 Select,Update,Delete,Insert 接口调用 存储过程 的粗浅理解。
- 第三方接口调用(xml)
- 【求解释】关于第三方接口调用中安全的疑问
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- 全志文件管理器移植到RK3288(二)----framework添加接口模块
- 【求解释】关于第三方接口调用中安全的疑问
- cocoa xcode 添加 第三方 framework
- 调用第三方接口的具体代码
- Python调用第三方接口实现nagios短信报警 推荐
- 调用webservice接口时出现401错误 添加身份验证
- android添加第三方库以及JNI接口封装
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- .net调用com接口打开已存在的图纸并给图纸中的块添加属性。
- 如何给filter添加自定义接口及调用 分类: DirectX 2014-10-24 14:47 455人阅读 评论(0) 收藏
- 微信公众号客服接口升级 支持第三方平台调用