当前位置:首页 » 安卓系统 » androidcordova

androidcordova

发布时间: 2022-06-08 09:30:07

‘壹’ android studio集成cordova和安装cordova有什么不同

一般Android项目结构和目录结构一样,是这样的:
MyApp
|--build.gradle
|--settings.gradle
|--app
|-- build.gradle
|-- build
|-- libs
|-- src
|-- main
|--java
| |-- com.package.myapp
|--res
|-- drawable
|-- layout
|-- etc

由Cordova创建的项目的目录结构是这样的(项目结构见上图)

看起来很乱是不是。但是不影响使用,实际上也没必要非要改成标准格式。因为Gradle已经帮我们在配置脚本中写好了相关配置,它知道如何找到需要的文件。
按照标准的Gradle教程,项目即使没有任何模块(mole),Android Studio也会为我们生成一个对应于项目的build.gradle脚本文件的。而观察图1,Android Studio打开的Cordova项目中却没有,编译构建工作也可以正常进行,说明这个文件不是必须的。
它是在andorid、CordovaLib模块中的build.gradle脚本中的android任务的sourceSets的main属性,其中定义了Android Studio项目目录结构和真实目录的对应关系。比如android模块下的build.gradle是这样的:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}

详细请参考G文第一篇 '保持旧的Eclipse文件结构' 部分。
可以看到,Android Studio中目录的逻辑结构和系统中的文件夹结构是分离的,依靠的就是Gradle的配置能力。对比标准的项目目录结构,Cordova项目把android模块直接放在了项目的根下,而不是其他模块那样(比如CordovaLib模块)作为子文件夹存在,这也说明了它为什么不需要项目的build.gradle脚本,因为项目的脚本就是android模块的脚本。之后添加的模块,都是作为根目录的子文件夹存在的。
此外还有一个多出来的cordova.gradle,以及和G文名称不一致的local.properties。
Gradle脚本的详细说明
上面部分让我们对用Android Studio打开的Cordova项目有了些感性了解。它有其自已的独特性:一方面Cordova创建的项目有自己的Gradle配置脚本,另一方面又保留了自己独特的结构。接下来让我们对Gradle脚本的各个部分作较为详细的了解,同样的基础知识请参考G文或《Gradle for Android》一书。
我们看到Gradle脚本相关的文件有build.gradle(CordovaLib模块)、build.gradle(android模块)、cordova.gradle(CordovaLib模块)、settings.gradle(项目)、local.properties(SDK Location)。看起来有些不一样。
不过没关系,我们知道Gradle构建时首先要去找build.gradle脚本的。通过上面的项目结构知道,首先执行的应该是逻辑上属于android模块,但实际上位于项目根目录下的build.gradle。就从这里开始。
android模块的build.gradle脚本
打开build.gradle。首先看到一些Cordova生成的一些注释。原文就不照抄了,大意是一些授权说明信息。最后的单行注释很关键:"生成文件!请不要编辑!"。 虽然不能编辑,但一则其他的文件并没有这么写,二则做为入口文件,我们还是需要对它做一个了解。
注释后紧接着就是buildscript方法。在它里面首先是repositories方法,它告诉我们使用的库是mavenCentral。接下来是依照已经在本地安装的gradle的版本选择使用的Gradle插件版本,并且语句上面有注释可以参考,以后几乎在每条语句上面都有注释帮助我们理解并告诉我们相关参考资料的位置。
// 列表1-1。
buildscript {
repositories {
mavenCentral()
}

// Switch the Android Gradle plugin version requirement depending on the
// installed version of Gradle. This dependency is documented at
// http://tools.android.com/tech-docs/new-build-system/version-compatibility
// and https://issues.apache.org/jira/browse/CB-8143
if (gradle.gradleVersion >= "2.2") {
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0+'
}
} else if (gradle.gradleVersion >= "2.1") {
dependencies {
classpath 'com.android.tools.build:gradle:0.14.0+'
}
} else {
dependencies {
classpath 'com.android.tools.build:gradle:0.12.0+'
}
}
}

随后又使用了一个repositories任务。注释说:允许插件通过build-extras.gradle声明Maven依赖。通过extra这个名字,以及前面不要编辑的警告,它的作用可能是对这个build.gradle文件的修改或补充。其实在下面的代码中可以看到更多这方面的信息。
// 列表1-2。
repositories {
mavenCentral()
}

接下来有一个wrapper任务,查阅文档得知它用于定制Gradle Wrapper的。如果对Wrapper不了解,请参考《G》文的第一篇"使用Gradle Wrapper"部分。
// 列表1-3。
task wrapper(type: Wrapper) {
gradleVersion = '2.2.1'
}

接下来定义了一个ext属性,其中定义了一些额外属性。注释也说明了其中定义的属性需要通过环境变量、build-extras.gradle或gradle.properties设置。
ext属性中首先引用了cordova.gradle。这样就知道项目中这个文件用在哪里了。但下面并没有用到它。通过后面的代码推测它可能是供build-extras.gradle调用的。接下来一系列条件判断语句分别定义了一些属性并把它们初为null。这些属性是都以cdv开头,表示一些Cordova构建属性。接下来的代码中会看到它们的作用。最后定义了一个cdvPluginPostBuildExtras数组变量,用来向里面追加Gradle插件扩展。
// 列表1-4。
ext {
apply from: 'CordovaLib/cordova.gradle'
// The value for android.compileSdkVersion.
if (!project.hasProperty('cdvCompileSdkVersion')) {
cdvCompileSdkVersion = null;
}
// The value for android.buildToolsVersion.
if (!project.hasProperty('cdvBuildToolsVersion')) {
cdvBuildToolsVersion = null;
}
// Sets the versionCode to the given value.
if (!project.hasProperty('cdvVersionCode')) {
cdvVersionCode = null
}
// Sets the minSdkVersion to the given value.
if (!project.hasProperty('cdvMinSdkVersion')) {
cdvMinSdkVersion = null
}
// Whether to build architecture-specific APKs.
if (!project.hasProperty('cdvBuildMultipleApks')) {
cdvBuildMultipleApks = null
}
// .properties files to use for release signing.
if (!project.hasProperty('')) {
= null
}
// .properties files to use for debug signing.
if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
cdvDebugSigningPropertiesFile = null
}
// Set by build.js script.
if (!project.hasProperty('cdvBuildArch')) {
cdvBuildArch = null
}

// Plugin gradle extensions can append to this to have code run at the end.
cdvPluginPostBuildExtras = []
}

接下来这部分代码,首先判断build-extras.gradle文件是否存在,如果存在则把它应用到构建脚本中。下面的判断语句检查build-extras.gradle是否定义了列表1-4的属性。如果有就使用build-extras.gradle中的,如果没有,则按下面语句设置:
// 列表1-5。
// Set property defaults after extension .gradle files.
if (ext.cdvCompileSdkVersion == null) {
ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget()
}
if (ext.cdvBuildToolsVersion == null) {
ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
}
if (ext.cdvDebugSigningPropertiesFile == null && file('debug-signing.properties').exists()) {
ext.cdvDebugSigningPropertiesFile = 'debug-signing.properties'
}
if (ext. == null && file('release-signing.properties').exists()) {
ext. = 'release-signing.properties'
}

// Cast to appropriate types.
ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean();
ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : Integer.parseInt('' + cdvMinSdkVersion)
ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)

上述代码表示如果没有设置列表1-4中的属性时设置它们,其中调用了cordova.gradle脚本中的方法。如前所述之后会说明这些变量的作用。
接下来这段代码,注释告诉我们,要让cdvBuild的任务依赖于debug/arch-specific,即平台相关,解决的是不同平台构建的问题。首先分成debug和release版,然后根据前面遇到过的cdvBuildMultipleApks和cdvBuildArch的变量判断是否是跨平台构建,如果是则返回一个根据架构名生成的结果。注意到这个cdvBuildArch变量,在上面列表1-4的注释中标明它由build.js设置。这个脚本位于项目目录的cordova/lib/文件夹中,没有纳入到构建中,是cordova cli构建脚本,在这里先不做探讨。
def computeBuildTargetName(debugBuild) {
def ret = 'assemble'
if (cdvBuildMultipleApks && cdvBuildArch) {
def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch
ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1);
}
return ret + (debugBuild ? 'Debug' : 'Release')
}

// Make cdvBuild a task that depends on the debug/arch-sepecific task.
task cdvBuildDebug
cdvBuildDebug.dependsOn {
return computeBuildTargetName(true)
}

task cdvBuildRelease
cdvBuildRelease.dependsOn {
return computeBuildTargetName(false)
}

接下来定义了一个任务,显然作用是输出列表1-4以及后面定义过的属性值。
task cdvPrintProps << {
println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
println('cdvVersionCode=' + cdvVersionCode)
println('cdvMinSdkVersion=' + cdvMinSdkVersion)
println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
println('=' + )
println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
println('cdvBuildArch=' + cdvBuildArch)
println('computedVersionCode=' + android.defaultConfig.versionCode)
android.proctFlavors.each { flavor ->
println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
}
}

接下来就是构建的核心部分,每个使用android插件构建都会有的android方法。里面对android的构建定义了一些配置。这些配置的做用可以参考相关文章,这里就不赘述了。之后是在任务准备就绪后,对需要验证的任务进行验证。再下来定义的addSigningProps函数被android方法调用,用来在需要验证时,为属性文件添加验证配置。最后配置了构建后要执行的方法,并且添加了在自定义配置文件build-extras.gradle中配置的构建后执行方法的入口。
总结
综上,在Cordova项目中的android文件夹中的默认两个模块的内容作为容器和插件的源代码,有其相对于普通Gradle Android特殊的目录结构。android模块把CordovaLib和web内容结合在一起生成Crodova应用,android模块和CordovaLib通过使用共同的配置变量,保证了包括编译SDK版本在内的一致性,并提供了额外配置的入口。但万变不离其宗,这一切都是建立在了解Gradle构建工具的基础上的。
望采纳,谢谢

‘贰’ 运行cordova run android时报错,如图所示

g.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:78)
at org.gradle.wrapper.Install.createDist(Install.java:47)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.(ZipFile.java:220)
at java.util.zip.ZipFile.(ZipFile.java:150)
at java.util.zip.ZipFile.(ZipFile.java:164)
at org.gradle.wrapper.Install.unzip(Install.java:160)
at org.gradle.wrapper.Install.access$400(Install.java:29)
at org.gradle.wrapper.Install$1.call(Install.java:70)
at org.gradle.wrapper.Install$1.call(Install.java:47)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
... 3 more
E:\cordova\hello\platforms\android\cordova\node_moles\q\q.js:126
throw e;
^
Error code 1 for command: cmd with args: /s /c "E:\cordova\hello\platforms\android\gradlew cdvBuildDebug -b E:\cordova\hello\platforms\android\build.gradle -PcdvBuildArch=arm -Dorg.gradle.daemon=true"
ERROR running one or more of the platforms: Error: E:\cordova\hello\platforms\android\cordova\run.bat: Command failed with exit code 1

‘叁’ 怎么在android studio中编写自定义cordova插件

一、编写JS插件
仅提供Javascript接口可供调用,不与native code相交互。
1、创建如下结构的项目,将其push到github方便后续安装

2、编写配置文件
创建项目之后,修改plugin.xml对该插件进行配置,因为该插件为单纯的js插件,与平台无关,所以plugin.xml配置很简单。
<?xml version="1.0" encoding="utf-8"?>
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
id="cordova.plugin.demo"
version="0.1.0">
<name>CordovaPluginJsDemo</name>

<js-mole src="www/jsplugin.js" name="jsplugin">
<clobbers target="JsPlugin" />
</js-mole>

</plugin>

3、编写javascript接口
修改jsplugin.js,加入接口内容
var JsPlugin = function() {};

JsPlugin.prototype.alert = function() {
alert("I am a js plugin");
};

var jsPlugin = new JsPlugin();
mole.exports = jsPlugin;

完成之后将整个插件内容push到github准备后续安装。
二、创建ionic项目
创建空白ionic项目进行插件测试。
1、创建空白项目,使用ios模拟机测试
ionic start testPlugin blank
cd testPlugin
ionic platform add ios
ionic build ios
ionic emulate ios

2、安装插件
cordova plugin add https://github.com/lissdy/CordovaPluginJSDemo.git

‘肆’ cordova android图标不变是什么原因

你替换的位置或者方法不准确吧!
在应用目录下找到platforms\android\res目录,在res目录下找到所有有icon.png文件的,然后把icon.png文件覆盖成你的。
命令窗口下执行cordova build android即可生成带有自己图标应用的android程序。

‘伍’ cordova android监听在哪里添加

app切换到后台运行时监听的事件。
使用中发现 监听 只能进行 一次监听,否则会多次执行, 并且 采用单页面应用SPA开发 后,出现了无法移出 返回键监听,导致无法单独 控制 物理返回键 返回到 指定的 页面和路由。

‘陆’ android使用cordova进行混合开发怎么截里面h5部分的屏幕

下载安装Node.js ,这样我们可以在终端执行npm命令。
下载安装git Client ,这是可选的,如果以后需要使用git 连接添加一个Cordova 插件的话需要使用到。
在终端中使用如下命令安装Cordova
$ sudo npm install -g cordova

完成以上步骤以后,我们就可以在终端使用Cordova命令,如果打印如下信息,则表示已经安装成功:
Chans-MacBook-Pro:YuntxCient kevinchan$ cordova
Synopsis

cordova command [options]

Global Commands
create ............................. Create a project
help ............................... Get help for a command
telemetry .......................... Turn telemetry collection on or off

Project Commands
info ............................... Generate project information
requirements ....................... Checks and print out all the requirements
for platforms specified

platform ........................... Manage project platforms
plugin ............................. Manage project plugins

prepare ............................ Copy files into platform(s) for building
compile ............................ Build platform(s)
clean .............................. Cleanup project from build artifacts

run ................................ Run project
(including prepare && compile)
serve .............................. Run project with a local webserver
(including prepare)

查看当前系统安装的Cordova版本:
Chans-MacBook-Pro:~ kevinchan$ cordova --v
6.4.0

‘柒’ 怎么cordova设置android模拟器



废话不多说。cordova是目前较流行的移动开发平台,其可以仅仅利用前端的知识就可以开发跨平台app,是不是很酷。对于小团队或仅仅是app开发爱好者,这是一个不错的选择。具体步骤如下:

一、cordova安装
0、下载java sdk 1.6以上版本 建议下载最新的版本 比如1.8以上

1、下载Android Development Tools

已经包括了Android sdk、esclipe,解压即可使用。下载里面更新完成sdk的版本
http://bbs.phonegap100.com/thread-1456-1-1.html
2、设置系统变量

系统变量 Path后面添加:
D:\Program Files\ADT\sdk\tools;
D:\Program Files\ADT\sdk\platform-tools;
D:\Program Files\ADT\sdk\eclipse\plugins\org.apache.ant_1.8.3.v201301120609\bin

新增 JAVA_HOME,设置值为Java sdk 根目录:
C:\Program Files (x86)\Java\jdk1.6.0_10\

‘捌’ cordova android 怎样真机调试

1. 设置android手机为USB调试模式。步骤: menu--->设置 --->应用程序 --->开发 , 选择【USB调试】

2. 用USB连接手机和电脑,并确保成功。步骤: 在windows下执行c:adb devices, 查看手机是否已经连接成功。

3. 设置应用程序为调试模式。操作: 编辑AndroidManifest.xml 增加调试参数android:debuggable="true", 如下:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

4. 执行真机调试操作:ECLIPSE调试对话框中,Target窗口中选择Manual,点击【debug】按钮,选择真机设备,开始调试。

注:不管是否启用ECLIPSE环境,任何Android软件只要在真机上运行发生异常,都可以在命令行窗口下查看具体异常信息:

执行:.adb logcat 可以查看到更多的系统异常消息。在这些消息中要注意查看Caused by:打 头的行,这些行指明了在哪行代码出的错误

‘玖’ android cordova config.xml 在什么地方

在生成文件的根目录下呢

‘拾’ crodova怎么直接调用android原生方法

crodova直接调用android原生方法的时候要了解一些东西,你可以看下!我发你看下,
一.总体结构
Cordova的目标是用HTML,JS,来完成手机客户端的开发,并且是只开发一次可以在各种手机平台上跑,所以理想状态是用JS去控制所有事件。Cordova基于WebView组件。每个继承自DroidGap的Activity对应一个独立的CordovaWebView。Cordova提供了一些列的JS接口来访问Android的native。以插件(Plugin)的形式提供自定义接口给JS端访问。
二.一些疑问
1. Cordova框架是如何启动的?
2. 插件是怎么回事?如何工作的。
3. Cordova的官方文档都是说JS如何访问Android的native,那么在Android的native中是否可以访问JS的函数?如何访问?
三.结构解剖
1.Cordova的启动

1) 如何启动

Cordova提供了一个Class(DroidGap)和一个interface(CordovaInterface)来让Android开发者开发Cordova。一般情况下实现DroidGap即可,因为DroidGap类已经做了很多准备工作,可以说DroidGap类是Cordova框架的一个重要部分;如果在必要的情况下实现CordovaInterface接口,那么这个类中很多DroidGap的功能需要自己去实现。

继承了DroidGap或者CordovaInterface的Activity就是一个独立的Cordova模块,独立的Cordova模块指的是每个实现了DroidGap或者CordovaInterface接口的Activity都对应一套独立的WebView,Plugin,PluginManager,没有共享的。(我觉得这样是很不爽的,没有共享,如果plugin和Activity很多的情况下这样是相当的耗资源)

当在实现了DroidGap或者CordovaInterface接口的Activity的onCreate方法中调用DroidGap的loadUrl方法即启动了Cordova框架。

2)启动过程

public class A extends DroidGap{}

a. 在A的onCreate方法中首先调用super. onCreate()

这一步中创建了一个LinearLayout(.class)布局,以及计算这个Layout的大小及显示的一些方式。在后面的过程中会将一个WebView加到这个LinearLayout中。

b. 再次调用DroidGap 的loadUrl()方法

DroidGap. loadUrl()中首先判断A的CordovaWebView是否实例化,如果没有回实例化一个CordovaWebView对象并将该对象添加到父LinearLayout中去,同时将该LinearLayout添加的ContentView。见以下代码:

public void onCreate(Bundle savedInstanceState) {



root = new (this, width, height);



}

public void init() {

CordovaWebView webView = new CordovaWebView(DroidGap.this);

this.init(webView,

new CordovaWebViewClient(this, webView),

new CordovaChromeClient(this, webView));

}

public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {

this.appView = webView;

this.appView.setId(100);



this.root.addView(this.appView);

setContentView(this.root);

}

public void loadUrl(String url) {

if (this.appView == null) {

this.init();

}



}

这样就完成了我们在一般开发中使用的模式:
public void onCreate(Bundle savedInstanceState) {

super. onCreate(Bundle savedInstanceState);

setContentView(resID);



}

在初始化完CordovaWebView后调用CordovaWebView.loadUrl()。此时完成Cordova的启动。

c. 在实例化CordovaWebView的时候, CordovaWebView对象会去创建一个属于当前CordovaWebView对象的插件管理器PluginManager对象,一个消息队列NativeToJsMessageQueue对象,一个JavascriptInterface对象ExposedJsApi,并将ExposedJsApi对象添加到CordovaWebView中,JavascriptInterface名字为:_cordovaNative。

d. Cordova的JavascriptInterface

在创建ExposedJsApi时需要CordovaWebView的PluginManager对象和NativeToJsMessageQueue对象。因为所有的JS端与Android native代码交互都是通过ExposedJsApi对象的exec方法。

在exec方法中执行PluginManager的exec方法,PluginManager去查找具体的Plugin并实例化然后再执行Plugin的execute方法,并根据同步标识判断是同步返回给JS消息还是异步。由NativeToJsMessageQueue统一管理返回给JS的消息。

e. 何时加载Plugin,如何加载

Cordova在启动每个Activity的时候都会将配置文件中的所有plugin加载到PluginManager。那么是什么时候将这些plugin加载到PluginManager的呢?

在b中说了最后会调用CordovaWebView.loadUrl(),对,就在这个时候会去初始化PluginManager并加载plugin。PluginManager在加载plugin的时候并不是马上实例化plugin对象,而是只是将plugin的Class名字保存到一个hashmap中,用service名字作为key值。

当JS端通过JavascriptInterface接口的ExposedJsApi对象请求Android时,PluginManager会从hashmap中查找到plugin,如果该plugin还未实例化,利用java反射机制实例化该plugin,并执行plugin的execute方法。

2.Cordova插件

在‘1’中已经接触了些Cordova插件的东西,这里总结下Cordova的插件

Cordova插件只是一个普通的java类,没有什么特殊之处。插件中的execute方法只是Cordova框架的一个规定。

Cordova为了方便于插件的管理,所以引进了一个PluginManager来管理插件。在ExposedJsApi中,PluginManager起一个代理作用。

在原生态的WebView开发中,我们可以给WebView添加一个JavascriptInterface对象来使JS可以访问android的代码;在Cordova也有一个这样的对象ExposedJsApi。

在ExposedJsApi中,它将请求转发给我们的PluginManager,这个时候PluginManager会根据给的service的名字来查找具体的Plugin并执行。

所以,我认为Cordova插件是android端的API,提供给JS。

在Cordova虽然有JavascriptInterface对象ExposedJsApi,但在JS端并不是真正通过android提供的window.JavascriptInterface.request这种方式来请求。在JS端,Cordova是通过JS的prompt()函数触发ChromeClient中的onJsPrompt方法,通过onJsPrompt去获取到请求,再将请求转发给ExposedJsApi。

注:在Cordova中,Java端和JavaScript端都准备了代码来使用特殊URL('http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson;)的方式交互请求,但并没有真正使用。

3.Cordova的数据返回

Cordova中通过exec()函数请求android插件,数据的返回可同步也可以异步于exec()函数的请求。

在开发android插件的时候可以重写public boolean isSynch(String action)方法来决定是同步还是异步。

Cordova在android端使用了一个队列(NativeToJsMessageQueue)来专门管理返回给JS的数据。

1)同步

Cordova在执行完exec()后,android会马上返回数据,但不一定就是该次请求的数据,可能是前面某次请求的数据;因为当exec()请求的插件是允许同步返回数据的情况下,Cordova也是从NativeToJsMessageQueue队列头pop头数据并返回。然后再根据callbackID反向查找某个JS请求,并将数据返回给该请求的success函数。

2)异步

Cordova在执行完exec()后并不会同步得到一个返回数据。Cordova在执行exec()的同时启动了一个XMLHttpRequest对象方式或者prompt()函数方式的循环函数来不停的去获取NativeToJsMessageQueue队列中的数据,并根据callbackID反向查找到相对应的JS请求,并将该数据交给success函数。

注:Cordova对本地的HTML文件(file:// 开头的URL)或者手机设置有代理的情况下使用XMLHttpRequest方式获取返回数据,其他则使用prompt()函数方式获取返回数据。

4.Android代码访问JS

翻了Cordova的官方文档和Cordova代码,发现Cordova并未提供一种方式来让我们在Android中去访问JS。现在想来可能是这样的道理(个人观点),因为Cordova框架的性质就是一个用HTML+JS来开发APP的,相当于java用的虚拟机层(比喻不是很恰当),所以Cordova未提供Android访问JS的方式。

如果需要Android访问JS,只有使用原生态WebView开发的方式

loadUrl(“javascript:xxx”)

因为在Cordova框架中需要访问JS的时候也是使用的这种方式,如下(Activity的onResume事件):

public void handleResume(boolean keepRunning, boolean activityResultKeepRunning)

{

// Send resume event to JavaScript

this.loadUrl("javascript:try{cordova.fireDocumentEvent('resume');}catch(e){console.log('exception firing resume event from native');};");

// Forward to plugins

if (this.pluginManager != null) {

this.pluginManager.onResume(keepRunning);

}

// Resume JavaScript timers (including setInterval)

this.resumeTimers();

paused = false;

}

热点内容
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:784
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197