Android混合开发该怎么搞

Android混合开发该怎么搞,第1张

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()被禁用。

* /

module.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

}

关于判断android是原生还是混合其实很简单,就是在开发者模式下打开 显示布局边距 就可以,原生控件是会被描出来的,而html5因为其本质是网页,所以只有webview会被描出或者其上面有隐藏的控件被描出

先给HarmonyOS比个心心

随着HarmonyOS2.0发布,HarmonyOS更加地进入大众视野,也越来越多的开发者涉足HarmonyOS领域,HarmonyOS的生态建设也在逐渐扩大、深入。

虽然HarmonyOS有着强大的分布式场景、AI等高级能力,但是毕竟还处于新生面世阶段,对于一些开发组件、生态市场等还有着一定的不成熟。最近想用HarmonyOS开发一款智慧场景的应用,深入了解后,无奈发现HarmonyOS对于相应的场景支持并不给力,所以就打算用Android开发并融合HarmonyOS的智慧能力。这就需要HarmonyOS-Android混合开发,所以也就有了这篇文章。

HarmonyOS-Android混合开发教程分为两个章节,都是干货满满:

当前为第一章节,最后罗列了项目源码的git地址,以及混入过程中可能存在的一系列问题的整理文档,我踩过的坑,我也搭上了桥,希望能够帮助大家顺利通行,头发帮你们掉了。

需要注意的是,混合开发配置HarmonyOS应用证书时,需要绑定HarmonyOS真机,所以有真机的大吉大利,没有的赶快入手一台吧

新建Android、HarmonyOS工程;

两个工程报名必须一致!!!

以适配HarmonyOS

该jar包就在HarmonyOS工程的SDK中,打开文件管理器即可获得:

配置的密码规则要满足如下DevECO生成签名时配置的密码规则:

注: Android工程必须是64位

这里我们在DevECO中生成也是一样的,密码保持一致就行。

文档地址: https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404

默认入口entry作为引入apk的加壳,我们需要创建新的module来作为HarmonyOS应用的入口。

注: 要保证module的version也保持一致。

由于我们新的入口变为myentry,所以我们在启动myentry时需要把entry部署进去,如下:

[图片上传失败...(image-d40ea-1631029456962)]

至此Android apk已成功混入HarmonyOS工程。

怎么检测Android工程被引入进来了呢,


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7875701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存