简介

这个插件将一个七牛提供的demo进行封装,实现了将大量代码隔离到插件的目的,插件能调起demo界面,调起后,demo里的功能均能正常使用。

一、插件短链:

http://yyfr.net/q21

二、源码地址:

https://github.com/apkplug/plugspace/tree/master/QlivePlugUser

三、宿主配置

1 权限配置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.GET_TASKS" />

2 组件配置:无

3 其他配置:无

四、插件使用

登陆接口:

url = "apkplug://qlive/rpc/login"

传入参数:

phone:String:注册的电话号码;

password:String:密码;

context:Context:当前上下文

通信接口方法:

public void login(final Context context, String phone, final String password, Action2 callback)

回调中返回Boolean类型为是否调用成功,后面String为具体信息

五、示例代码

BundleRPCAgent agent = new BundleRPCAgent(FrameworkFactory.getInstance().getFrame().getSystemBundleContext());

    try {
        IQLLogin iqlLogin = agent.syncCall("apkplug://qlive/rpc/login",IQLLogin.class);
        iqlLogin.login(this, "18801245179", "@Aa123456", new Action2<Boolean, String>() {
            @Override
            public void call(Boolean aBoolean, String s) {
                Log.e("callback",aBoolean+"  "+s);
            }
        });
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }

六、快速测试

可以通过如下接口一步从短链下载并测试rpc接口,短链为官方提供示例插件demo。

PlugManager.getInstance().getRPCInstanceByShortLink(true,“http://yyfr.net/q21”, "apkplug://qlive/rpc/login",IQLLogin.class, new OnGetRPCInstanceListener<IQLLogin>() {
        @Override
        public void onDownloadProgress(String s, String s1, long l, long l1) {

            float percent = (float)l/(float) l1;
            Log.e("progress","percent:"+percent)
                      }

        @Override
        public void onInstallSuccess(org.osgi.framework.Bundle bundle) {
            Log.e("install s",bundle.getName());
        }

        @Override
        public void onGetRPCSuccess(IQLLogin t) {
            t.login(this, "18801245179", "@Aa123456", new Action2<Boolean, String>() {
            @Override
            public void call(Boolean aBoolean, String s) {
                Log.e("callback",aBoolean+"  "+s);
            }
        });


        }

        @Override
        public void onFail(String s, String s1) {
            Log.e("fail",s+" "+s1);
        }
    });