android4.4 framework添加第三方调用接口

近日,将第三方可执行文件封装成接口,移植到了系统中。现将曲折的成功之路做一个总结,与大家共享。

软件平台: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

至此,移植添加完毕。当中遇到了必须切换到可执行文件放置的目录才能正确执行,否则报错,因此脚本需先切换目录,然后执行~~~~~

时间: 2024-12-20 23:33:01

android4.4 framework添加第三方调用接口的相关文章

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

Android4.4 Framework分析——Activity窗口的创建过程(一)

学习android的窗口模块一周多了,感觉自己对这个模块的理解还是比较模糊,先把get的知识点记录一下. 下图是学习过程记录的activity窗口启动过程序列图,没有或者没办法完整的描绘出来,整个过程比较复杂: 整个学习过程中是参照老罗的android之旅博客和<深入理解android内核设计思想>一书来辅助的,非常感谢前辈. Activity的整体启动过程可查看Android4.4 framework分析--Launcher中启动应用程序(startActivity)的过程的序列图,本文关注

通过接口调用接口实现类实现松耦合(接口的多态)

项目开发在各个层中通过接口实现松耦合的时候,如何实现接口调用接口实现类? 这里的要求是接口有多个实现类,通过接口调用不的接口实现类! 开始,我想到了IOC(IOC最近忒火),确实有很多开发好的类库unity,ninject等等,但是这些类库都有点太强大了,例 如unity 是可以很容易实现我的要求,那么通过RegisterType<I, N>>(String name)注册:通过Resolve<I>(name) 就可以 用接口调用相应的接口实现类,如果想了解一下unity,

微信公众号调用接口返回码

返回码 说明 -1 系统繁忙,此时请开发者稍候再试 0 请求成功 40001 获取access_token时AppSecret错误,或者access_token无效.请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口 40002 不合法的凭证类型 40003 不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenID 40004 不合法的媒体文件类型 40005 不合法的文件类型 40006 不合法的文件大小 4000

网站添加第三方登陆(PHP版)

这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,Web,IOS,三大模块,现在没有找到人帮忙写安卓,唉...  网站API已经写完了,Web端正在完善开发中,毕业答辩之前会吧基本功能上线,小伙伴们可以访问看看增加人气,不过没有写完,并且看着不咋好看,因为没人写前端,我又不擅长写页面所以有点低端.域名是:http://www.olas.cn 上面说的

微信公众平台开发(31)微信第三方登录接口

原文: http://www.cnblogs.com/imaker/p/5491433.html 第一步:获取AppID AppSecret(不做解释,自己去微信公众平台申请) 第二步:生成扫描二维码,获取code https://open.weixin.qq.com/connect/qrconnect?appid=AppID&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_login&st

微信第三方登录接口

第一步:获取AppID AppSecret(不做解释,自己去微信公众平台申请) 第二步:生成扫描二维码,获取code https://open.weixin.qq.com/connect/qrconnect?appid=AppID&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_login&state=2014#wechat_redirect 第三步:通过code获取access_token

laravel 5.1 添加第三方扩展库

laravel 5.1 添加第三方扩展库 时间:2015-09-07 19:20:34      阅读:1654      评论:0      收藏:0      [点我收藏+] 步骤一:确定你要放第三方库的目录,假设:app/libs,并在该目录下放置类文件common.php. 步骤二:找到根目录下的composer.json文件并打开,找到autoload-dev参数,添加"app/libs/common.php".如图: common.php代码: 步骤三:然后执行命令: ph

在ubuntu12.04下编译android4.1.2添加JNI层出现问题

tiny4412学习者,在ubuntu12.04下编译android4.1.2添加JNI层出现问题: (虚心请教解决方法) trouble writing output: Too many methods: 65540; max is 65536. By package: 26 android 145 android.accessibilityservice 702 android.accounts 436 android.animation 8 android.annotation 3793