android混合开发
① 如何判断android程序是原生还是混合开发
关于判断android是原生还是混合其实很简单,就是在开发者模式下打开
显示布局边距
就可以,原生控件是会被描出来的,而html5因为其本质是网页,所以只有webview会被描出或者其上面有隐藏的控件被描出
② android 混合开发 框架有哪些
Cordova是一个广泛使用的Hybrid开发框架,它提供了一套js和Native交互规范
在Cordova的 SystemWebViewEngine 类中可以看到
private static void exposeJsInterface(WebView webView, CordovaBridge bridge) {
if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)) {
Log.i(TAG, "Disabled addjavascriptInterface() bridge since Android version is old.");
// Bug being that Java Strings do not get converted to JS strings automatically.
// This isn't hard to work-around on the JS side, but it's easier to just
// use the prompt bridge instead.
return;
}
webView.addJavascriptInterface(new SystemExposedJsApi(bridge), "_cordovaNative");
}
因此当Android系统高于4.2时,Cordova还是使用 addJavascriptInterface 这种方式,因为这个方法在高版本上安全而且简单,低于4.2的时候,用什么方法呢?
答案是 WebChromeClient.onJsPrompt 方法
WebView可以设置一个 WebChromeClient 对象,它可以处理js的3个方法
onJsAlert
onJsConfirm
onJsPrompt
这3个方法分别对应js的 alert 、 confirm 、 prompt 方法,因为只有 prompt 接收返回值,所以js调用一个Native方法后可以等待Native返回一个参数。下面是 cordova.js 中的一段代码:
/**
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
*/
mole.exports = {
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
},
setNativeToJsBridgeMode: function(bridgeSecret, value) {
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
},
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
}
};
然后只要在 onJsPrompt 方法中使用 CordovaBridge 来处理js的prompt调用
/**
* Tell the client to display a prompt dialog to the user. If the client returns true, WebView will assume that the client will handle the prompt dialog and call the appropriate JsPromptResult method.
* <p/>
* Since we are hacking prompts for our own purposes, we should not be using them for this purpose, perhaps we should hack console.log to do this instead!
*/
@Override
public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {
// Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.
String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);
if (handledRet != null) {
result.confirm(handledRet);
} else {
dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {
@Override
public void gotResult(boolean success, String value) {
if (success) {
result.confirm(value);
} else {
result.cancel();
}
}
});
}
return true;
}
③ 混合开发,安卓和苹果的区别
一个应用的混合版本一定不会跟原生版本一样快,但这无关紧要,只要混合版本足够快。 简单来说,如果你的用户从来不抱怨应用的性能,那么你的应用就是足够快的。作为一个性能狂,知道自己的应用运行得尽可能地快,我理解这种吸引力,但是我们必须小心避免过早发生和过度优化。知道自己的原生应用在页面上渲染 100 张照片比混合应用版本快 8 毫秒,内心可能自我感觉良好,但用户能感觉得到或者在乎吗?不会。
非常耗资源的 3D 游戏或类似的东西,不在我定义的 “应用”范围内。 这种情况下原生应用当然是你的最好选择,因为混合应用想要变快会非常吃力。Canvas 的性能在最近几年已经改善了很多,但是在旧设备上运行耗资源的应用还是会很慢。
设计良好的混合应用,在现代 JavaScript UI 框架上运行,绝对够快。性能差不再是放弃混合方式的借口了。如果你最近尝试做一个混合应用,发现性能不够满意,那你应该认真重新评估一下你选择的设计模式,或者是用了大量像 jQuery 这样不需要的库。学习下现代的 DOM API,如果还没学的话。我们的应用的所有的目标设备都支持它。
④ androidstudio怎样混合开发
androidstudio混合开发就是原生的与html开发相结合,让开发变得更简单流畅的事情、
⑤ 怎样将web与android进行混合开发
web开发与android开发是两个方向,如果单纯是在android中开发网页浏览功能,可参考下面的文章:
http://www.apkbus.com/blog-720227-68263.html
http://www.apkbus.com/blog-822715-68319.html
⑥ android混合式开发和原生是开发的区别
混合开发的App(HybridApp)就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html5来开发,这部分功能不仅能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,让用户的体验更好又可以节省开发的资源。
⑦ 目前安卓app开发利用的混合开发,具体指的是什么呢
可以查一下ionic, 这就是用于混合开发移动app的, 大部分插件能够支持安卓和ios两个平台, 也就是说, 绝大多数情况下, 你能够一次性完成安卓和ios两个版本的移动app开发, 而且不需要你会原生编程语言, 会写html css js就足够, 但是要求会使用angularjs
http://ionicframework.com/
⑧ Android混合开发该怎么搞
Cordova是一个广泛使用的Hybrid开发框架,它提供了一套js和Native交互规范
在Cordova的SystemWebViewEngine类中可以
看到私有静态void exposeJsInterface(WebView webView,CordovaBridge桥){
if((Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)){
Log.i(TAG,“自Android版本以来已禁用addJavascriptInterface()桥接。”);
//错误是Java Strings不会自动转换为JS字符串。
//在JS方面解决这个问题并不困难,但是更容易
使用提示桥来代替。
返回;
}
webView.addJavascriptInterface(新SystemExposedJsApi(桥), “_cordovaNative”);
}
因此当Android系统高于4.2时,Cordova还是使用addJavascriptInterface这种方式,因为这个方法在高版本上安全而且简单,低于4.2的时候,用什么方法呢?
答案是WebChromeClient.onJsPrompt方法
WebView可以设置一个WebChromeClient对象,它可以处理js的3个方法
onJsAlert
onJsConfirm
onJsPrompt
这3个方法分别对应js的警告,确认,提示方法,因为只有提示接收返回值,所以js调用一个Native方法后可以等待Native返回一个参数。下面是cordova.js中的一段代码:
/ **
*实现ExposedJsApi.java的API,但使用prompt()进行通信。
*这是在JellyBean之前使用的,其中addJavascriptInterface()被禁用。
* /
mole.exports = {
exec:function(bridgeSecret,service,action,callbackId,argsJson){
return prompt(argsJson,'gap:'+ JSON.stringify([bridgeSecret,service,action,callbackId]));
},
setNativeToJsBridgeMode:function(bridgeSecret,value){
prompt(value,'gap_bridge_mode:'+ bridgeSecret);
},
retrieveJsMessages:function(bridgeSecret,fromOnlineEvent){
return prompt(+ fromOnlineEvent,'gap_poll:'+ bridgeSecret);
}
};
然后只要在onJsPrompt方法中使用CordovaBridge来处理js的提示调用
/ **
*告诉客户端向用户显示提示对话框。如果客户端返回true,则WebView将假定客户端将处理提示对话框并调用相应的JsPromptResult方法。
* <p />
*由于我们出于自己的目的黑客提示,我们不应该为此目的使用它们,也许我们应该破解console.log来代替!
* /
@Override
public boolean onJsPrompt(WebView视图,String origin,String message,String defaultValue,final JsPromptResult result){
//与@JavascriptInterface桥不同,此方法始终在UI线程上调用。
String processedRet = parentEngine.bridge.promptOnJsPrompt(origin,message,defaultValue);
if(processedRet!= null){
result.confirm(processedRet);
} else {
dialogsHelper.showPrompt(message,defaultValue,new CordovaDialogsHelper.Result(){
@
Override public void gotResult(boolean success,String value){
if(success){
result.confirm(value);
} else {
result.cancel( );
}
}
});
}
return true;
}
⑨ 安卓+h5混合开发 现在怎么样
一次学习,多平台开发。(Android、IOS、Web平台都可以编程开发)。
当前,同时掌握“Android原生开发”+“H5跨平台开发”两大核心技术的复合型移动开发人才严重供不应求,薪资节节攀升,就业及未来职业发展都极具竞争力。
尚硅谷有这个课程,很火爆!