一个轻量级的app混合开发框架

一个轻量级的app混合开发框架 使用简便

JavaScript 混合移动开发

详细介绍

jsbridge-hostApp

一个轻量级的app混合开发框架 使用简便 ##1、工程引用姿势 1.1、clone 工程到你本地 1.2、在你自己工程的build.grale 文件中加入依赖 ##2、java代码编写姿势(提供给H5调用的java方法) 2.1 编写任一一个java类引用@WebTag注解 例如

package com.lingyi.simplehostapp;

import android.text.TextUtils;
import android.webkit.WebView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.lingyi.easybridge.NativeTOJsResult;
import com.lingyi.easybridge.ProviderToWeb;
import com.lingyi.easybridge.TaskModel;
import com.lingyi.easybridge.WebTag;
import com.lingyi.easybridge.framework.EasyNativeToJsCallBack;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by lingyi on 16/9/8.
 * Copyright © 1994-2016 lingyi™ Inc. All rights reserved.
 */

@WebTag  //使用@WebTag注解  标记该类为提供给H5调用的类
public class NativeToJsClass {

    @ProviderToWeb(taskModel = TaskModel.ASYNC) //用@ProviderToWeb注解 标记该方法是为h5调用的方法 并指定参数 同步还是异步 该方法必须带有三个参数  第一个webview 第二个h5传过来的参数为jsonObject类型,第三个参数为回调h5方法
    public static void getUserInfo(WebView webView, JSONObject param, final EasyNativeToJsCallBack callback) {
        String request = param.optString("ask");
        Log.i("lingyi","来自h5的请求:"+request);
        if (null != callback) {
           User user = new User("lingyi","man","22");
             Gson gson = new Gson();
            try {
                JSONObject object = new JSONObject(gson.toJson(user));
                callback.sendResult(new NativeTOJsResult(NativeTOJsResult.Status.OK,object));
            } catch (JSONException e) {
                e.printStackTrace();
                try {
                    callback.sendResult(new NativeTOJsResult(NativeTOJsResult.Status.ERROR,new JSONObject("{msg:'error'}")));
                } catch (JSONException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
    static  class User{
        String name;
        String sex;
        String age;

        public String getName() {
            return TextUtils.isEmpty(name) ? "" : name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSex() {
            return TextUtils.isEmpty(sex) ? "" : sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        public String getAge() {
            return TextUtils.isEmpty(age) ? "" : age;
        }

        public void setAge(String age) {
            this.age = age;
        }

        public User(String name, String sex, String age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
    }
}

    2.2 activity代码编写姿势
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        EasyFragment fragment = new EasyFragment();
        fragment.init(this);//必须先初始化
        getFragmentManager().beginTransaction().replace(R.id.content_framelayout,fragment).commit();
        fragment.showWebPage("file:///android_asset/hostindex.html");
    }
}

##3、H5代码编写姿势 3.1 给button设置一个点击事件监听

 <input type="button" onclick="getUserInfo();" value="测试从native 获取用户信息" />
	3.2 然后在javascript中调用EasyHdp.do('service','params',success,erro);需要给四个参数第一个参数service指定调用native代码中的哪个类中的哪个方法  例如NativeToJsClass.getUser Info调用的是NativeToJsClass类中getUserInfo方法,第二个参数params 传递给native的参数是一个Jason字符串 例如{'name':'lingyi'}可为空{},第三个参数为成功的回调,第四个参数为失败的回调,具体如下:
 <script type="text/javascript">
        var suc = function(resultMsg){
            alert('name:'+resultMsg.name);
        };

        var err = function(errorMsg){
            alert('html error');
            alert('error');
        };

        var getUserInfo = function(){
        try{
            EasyHdp.do('NativeToJsClass.getUserInfo',{'ask':'please give me a message'},suc,err);
         }catch(e){
          alert(e);
         }
        };
    </script>

##4白名单管理 4.1 在assets目录下有一个叫做config.xml的文件,它可以设置很多初始化的信息例如

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE esaconfig  SYSTEM  "easyconfig-1.1.dtd" >
<esaconfig>
    <name>easyHostApp</name><!--设置你app的名字-->
    <author name="lingyi" email="itwenlingyi@gmail.com" phone="18670088340" /> <!--设置一些开发者信息 例如名字  邮箱 电话等-->
    <description>这是一个轻量级的非常好用的app混合开发框架</description> <!--描述信息-->
    <allow-postfix value="*.lingyi.com/"/> <!--管理地址后缀  访问的url地址必须以这个结尾-->
    <allow-postfix value="*.lingyi.cn/"/>
    <allow-protocol href="http://"/>  <!--管理地址协议, 访问的url地址必须以这些结尾  否则-->
    <allow-protocol href="https://"/>
    <allow-protocol href="esa:"/>
    <interceptRequest-message>  <!--如果捕捉的非白名单以内的网址  给的提示信息  如果text 和 URL 同时有 默认显示重定向网址-->
        <text>对不起!您访问的地址涉嫌违法信息</text>
        <redirection-url>https://www.baidu.com</redirection-url>
    </interceptRequest-message>
</esaconfig>
推荐源码