<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>v8 &#8211; 编程技术记录</title>
	<atom:link href="https://blog.z6z8.cn/tag/v8/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.z6z8.cn</link>
	<description>世界你好!</description>
	<lastBuildDate>Thu, 28 Nov 2019 09:14:32 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>学习笔记：使用Android  V8 （J2V8）JavaScript引擎</title>
		<link>https://blog.z6z8.cn/2019/11/28/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9a%e4%bd%bf%e7%94%a8android-v8-%ef%bc%88j2v8%ef%bc%89javascript%e5%bc%95%e6%93%8e/</link>
					<comments>https://blog.z6z8.cn/2019/11/28/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9a%e4%bd%bf%e7%94%a8android-v8-%ef%bc%88j2v8%ef%bc%89javascript%e5%bc%95%e6%93%8e/#respond</comments>
		
		<dc:creator><![CDATA[holdsky]]></dc:creator>
		<pubDate>Thu, 28 Nov 2019 09:14:32 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascrip]]></category>
		<category><![CDATA[v8]]></category>
		<guid isPermaLink="false">http://blog.z6z8.cn/?p=586</guid>

					<description><![CDATA[集成 在Android Studio的Android工程中，需要在build.gradle文件内容里添加依赖指 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>集成</h1>
<p>在Android Studio的Android工程中，需要在build.gradle文件内容里添加依赖指令，然后gradle构建就会自动化集成J2V8引擎</p>
<pre><code class="language-gradle">dependencies {
    implementation 'com.eclipsesource.j2v8:j2v8:5.0.103@aar'
}</code></pre>
<p>J2V8的最新版本，可以在marven仓库中查看<br />
<a href="https://mvnrepository.com/artifact/com.eclipsesource.j2v8/j2v8">https://mvnrepository.com/artifact/com.eclipsesource.j2v8/j2v8</a></p>
<h1>使用示例</h1>
<p>示例摘自https://eclipsesource.com/blogs/tutorials/getting-started-with-j2v8/</p>
<pre><code class="language-java">import com.eclipsesource.v8.V8;

public static void main(String[] args) {
 V8 runtime = V8.createV8Runtime();
 int result = runtime.executeIntegerScript(""
  + "var hello = 'hello, ';\n"
  + "var world = 'world!';\n"
  + "hello.concat(world).length;\n");
 System.out.println(result);
 runtime.release();
}</code></pre>
<h1>访问JavaScript对象（Object）</h1>
<p>假设有这样一段JS脚本</p>
<pre><code class="language-javascript">var jsobj = {};
jsobj.hello = "world";</code></pre>
<p>在J2V8中可以直接访问jsobj对象</p>
<pre><code class="language-java">import com.eclipsesource.v8.V8;

public static void main(String[] args) {
  V8 runtime = V8.createV8Runtime();
  runtime.executeVoidScript(""
    + "var jsobj = {};\n"
    + "jsobj.hello = 'world';\n");

// 访问jsobj的属性
  V8Object jsobj = runtime.getObject("jsobj");
  System.out.println(jsobj.getString("hello"));
  jsobj.release();

  runtime.release();
}</code></pre>
<p>需要注意，<code>V8Object</code>需要自己手动释放</p>
<h1>执行JavaScript函数</h1>
<p>JS脚本</p>
<pre><code class="language-javascript">
function test(a,b){
    return a+b;
}

var jsobj = {};
jsobj.func = test;
</code></pre>
<p>Java代码</p>
<pre><code class="language-java">V8 runtime = V8.createV8Runtime();
runtime.executeVoidScript("上面js脚本")

//包装参数
V8Array parameters = new V8Array(1).push(2);
//调用js test方法
runtime.executeIntegerFunction("test",parameters);
//调用jsobj.func
V8Object jsobj = runtime.getObject("jsobj");
jsob.executeIntegerFunction("func",parameters);

//释放
parameters.release();
jsobj.release();
runtime.release();</code></pre>
<h1>JS调用Java方法</h1>
<p>需要注册实现了<code>JavaCallback </code>接口的对象</p>
<pre><code class="language-java">JavaVoidCallback callback = new JavaVoidCallback() {
    @Override
    public void invoke(final V8Object receiver, final V8Array parameters) {
        System.out.println("xxxx");
    }
}

V8 runtime = V8.createV8Runtime();
// 注册到 js 全局函数，函数名为 &lt;code&gt;JavaFunc&lt;/code&gt;
runtime.registerJavaMethod(callback, "JavaFunc");</code></pre>
<p>在js中使用</p>
<pre><code class="language-javascript">JavaFunc(1,2,3);</code></pre>
<h2>JS调用Java对象实例方法</h2>
<p>使用<br />
V8Object.registerJavaMethod(object, javaMedthod, jsMethod, paramlist);</p>
<ul>
<li>object  java对象</li>
<li>javaMedthod  object上的方法名</li>
<li>jsMethod  js环境中的方法名</li>
<li>paramlist  这里指参数类型列表</li>
</ul>
<pre><code class="language-java">V8 runtime = V8.createV8Runtime();

Object test = new test();
V8Object v8test = new V8Object(runtime);
runtime.add("test", v8test);

v8test.registerJavaMethod(test, "nativeFunc", "jsFunc", new Class&lt;?&gt;[] { String.class });</code></pre>
<p>在js中使用</p>
<pre><code class="language-javascript">test.jsFunc('hello, world');</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.z6z8.cn/2019/11/28/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9a%e4%bd%bf%e7%94%a8android-v8-%ef%bc%88j2v8%ef%bc%89javascript%e5%bc%95%e6%93%8e/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
