目的:将h5开发的功能模块嵌入到原生android中
打开h5端开发的cordova应用的文件夹
进入platforms文件夹
进入android
将里面的CordovaLib作为一个modle导入我们的原生项目并添加为依赖;
接着将assets目录中的www文件夹复制到我们原生项目里的assets目录下,这里面就是h5小伙伴提供给我们的资源,需要我们去调用;
接着我们打开src目录
将里面的org文件夹复制到我们项目中的java/main文件夹下,注意不要复制到java/test目录下了哦,不然会报ClassNotFound错误
最后将res文件加下xml文件夹里的config.xml文件复制到我们自己项目的res/xml文件夹中。
注意修改一下第二行id=“(这里的包名该为我们自己项目的报名)”
好了,到这里导入就完成了。
接下来就是如何使用h5小伙伴提供给我们的资源了
www文件夹里的这些html就是h5小伙伴写好的各种模块,我们如何调用呢?很简单
比如我要调用homeworkEntry模块:
public class SecondActivity extends CordovaActivity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loadUrl("file:///android_asset/www/homeworkEntry.html"); } }
只需要写一个activity继承cordova提供的CordovaActivity,直接loadUrl就可以啦。
另外,也可以使用cordova提供的systemwebview作为一个控件替代系统原生的webview。
加载远程服务器上的HTML
webView = (SystemWebView) findViewById(R.id.cordova_webview);ConfigXmlParser parser = new ConfigXmlParser(); parser.parse(this);//这里会解析res/xml/config.xml配置文件 SystemWebViewEngine engine=new SystemWebViewEngine(webView); engine.clearCache();//清除旧cookie CordovaWebView cordovaWebView = new CordovaWebViewImpl(engine);//创建一个cordovawebview cordovaWebView.init(new CordovaInterfaceImpl(this), parser.getPluginEntries(), parser.getPreferences());//初始化 String token=LekeStudentApplication.getInstance().mParameters.getToken(); String url="http://192.168.20.71/auth/common/voiceExercise/showStudentAlbumList.htm?"; ICordovaCookieManager cookieManager=engine.getCookieManager(); cookieManager.setCookiesEnabled(true); cookieManager.setCookie(url,"ticket="+token+";domain=voice.leke.cn; path=/");//设置新cookie webView.loadUrl(url); webView.setWebViewClient(new SystemWebViewClient(engine){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
setWebViewClient中重写shouldOverrideUrlLoading是为了能够在cordoca中打开html中的链接,另外还需要自己写一个plugin重写里面的
public Boolean shouldAllowRequest(String url) { return true; } @Override public Boolean shouldAllowBridgeAccess(String url) { return true; }
两个方法,这两个方法返回true的意思分别是允许加载外部网址,和允许外部网址使用cordova提供的plugin。