用Weex开发Android程序

参考:开发HelloWorld程序(Weex开发)

1、创建Android工程
2、集成WeexSDK,参考[WEEX SDK 集成到 Android 工程](https://weex-project.io/cn/doc/advanced/integrate-to-android.html)
3、开发.we源码
4、编译.we源码为js文件,将js文件复制到Android工程的asset目录下
5、初始化sdk
6、实现渲染

WXSample地址 https://github.com/xkli/WXSample.git

Weex扩展到Android(自定义组件)

自定义组件(Android)

如何自定义 native 组件?

1.自定义组件必须继承自 WXComponent 或者 WXContainer ;
2.weex SDK 可以识别 @WXComponentProp (name = value(value 是 attr 或者 dsl style));
3.方法必须是 public 的;
4.组件类不能是一个内部类;
5.自定义组件不能被 ProGuard 之类的工具混淆;
6.组件方法在 UI 线程被调用,因此不要在里面进行耗时的操作;
7.Weex 的参数类型可以是 int, double, float, String, Map, List 和实现了 WXObject 接口的自定义类;

参考以下例子:

	package com.taobao.weex.ui.component;
// …… public class MyViewComponent extends WXComponent{ public MyViewComponent(WXSDKInstance instance, WXDomObject node,
WXVContainer parent, String instanceId, boolean lazy) {
super(instance, node, parent, instanceId, lazy);
} @Override
protected void initView() {
//TODO:your own code ……
} @Override
public WXFrameLayout getView() {
//TODO:your own code ………
}
@WXComponentProp(name=WXDomPropConstant.WX_ATTR_VALUE)
public void setMyViewValue(String value) {
((TextView)mHost).setText(value);
} }

必须注册组件:

WXSDKEngine.registerComponent("MyView", MyViewComponent.class);

自定义原生API

如何自定义 native API?

Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。

关于 URLHelper 的例子

新建一个 WXModule

public class URLHelperModule extends WXModule{
private static final String WEEX_CATEGORY="com.taobao.android.intent.category.WEEX";
@JsMethod
public void openURL(String url){
if (TextUtils.isEmpty(url)) {
return;
}
StringBuilder builder=new StringBuilder("http:");
builder.append(url);
Uri uri = Uri.parse(builder.toString());
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory(WEEX_CATEGORY);
mWXSDKInstance.getContext().startActivity(intent);
}
}

这里要注意 @JsMethod 这个注解,它表示了你把这个方法暴露给 JavaScript。

	public class URLHelperModule extends WXModule{

    @JsMethod
public void openURL(String url,String callbackId){
//...
//callback to javascript
Map<String, Object> result = new HashMap<String, Object>();
result.put("ts", System.currentTimeMillis());
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, result);
}
}

把module注册到WXSDKEngine:

try {
WXSDKEngine.registerModule("myURL", URLHelperModule.class);
//'myURL' is the name you'll use in javascript
} catch (WXException e) {
WXLogUtils.e(e.getMessage());
}

在 JavaScript 中使用 eventModule:

let URLHelper = require('@weex-module/myURL');//same as you registered
URLHelper.openURL("http://www.taobao.com",function(ts){
console.log("url is open at "+ts);
});

一些注意事项:

定义一个 components 需要继承 WXModule
不要忘记添加 @WXModuleAnno 注解,不然 Weex 没法识别这个方法
定义的方法必须是 `public 的
module 类一定不能是内部类
你定义的 components 不能被混淆,不然会找不到
Module 中的方法会在 UI 线程中被调用,所以一定不要做一些耗时操作
Moudle 中的方法参数类型可以为 int,double,float,String,Map,List,以及实现 WXObject 接口的类。

#Weex与Android交互(一)的更多相关文章

  1. Weex与Android交互(二)

    扩展Android Weex 提供了扩展机制,可以根据自己的业务进行定制自己的功能. 主要分为两类扩展: Module 扩展 非UI的特定功能.例如sendHttp.openURL 等. Compon ...

  2. [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  3. js 与 ios Android交互

    一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...

  4. weex 启动 android 模拟器(mac环境)

    一.android studio和android sdk下载 1.android studio下载并安装https://developer.android.com/studio/index.html ...

  5. WebView之javascript与android交互基础加强

    一.什么是js与android交互? 通俗一点就是使用js代码调用java代码,或者使用java代码调用js代码. 二.为什么要使用js与java代码交互? 1.可以做一些js网页做本身处理不了的事情 ...

  6. 使用Struts2服务端与android交互

    转自:http://www.cnblogs.com/android-html5/archive/2011/09/25/2534107.html android--使用Struts2服务端与androi ...

  7. Unity与Android交互实现

    主要参考了这篇文章: Unity与Android交互方案优化版 链接:https://www.jianshu.com/p/86b275da600e 自己的实现(unity获取内存和温度): andro ...

  8. Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  9. Unity Android交互过坑指南

    Unity Android交互过坑指南 介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考 介绍 本次实现的是在游 ...

随机推荐

  1. LaTeX安装和配置

    1. 下载安装MikTeX(发行版).WinEdt(编辑器): (MikTex自带编辑器,不过太简陋了.另一个可选编辑器是TexStudio.) 2. 打开MikTeX Package Manager ...

  2. TCP/IP学习20180624

    计算机要互相通信.要有标准. TCP/IP协议,很多协议在一起.所以也叫TCP/IP协议族.经常接触的也就十几种. TCP/IP协议族按层次分为四层: 应用层(最上一层,http,ftp,pop3,i ...

  3. [UE4]纯函数的执行时机

    一.纯函数是在需要的时候被调用 二.纯函数内不应当修改任何数据 三.如果同一个函数需要多个得到多个纯函数的返回值,则多个纯函数的调用顺序不是固定的,并且一个纯函数的调用顺序也不应当影响下一个纯函数的返 ...

  4. [UE4]事件驱动的UI更新:事件调度器

    事件调度器就是一个“事件中介”,可以被调用和被关注.

  5. centos7开启端口(永久--permanent)

    1.运行命令:firewall-cmd --get-active-zones运行完成之后,可以看到zone名称,如下: 2.执行如下命令命令: firewall-cmd --zone=public - ...

  6. SpringMVC 请求响应流程

    SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMa ...

  7. vue 父组件给子组件传值 Vue父组件给子组件传方法 Vue父组件把整个实例传给子组件

    Home.vue <template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> <v-header ...

  8. JIT和AOT编译详解

    JIT和AOT编译介绍 JIT - Just-In-Time             实时编译,即时编译 通常所说的JIT的优势是Profile-Based Optimization,也就是边跑边优化 ...

  9. python中转义符&str格式化

    转义字符: 1.将有意义的字符变的无意义 2.将无意义的字符变的有意义 语法: \ + 某个字符 \n, \r\n :    代表换行 \t :      代表一个缩进, (水平制表符) \r :   ...

  10. CRM 插件导出

    CRM插件注册一般有三种方式, 1  database 2 disk 3  GAC 如果注册到disk 应该在会在 C:\Program Files\Microsoft Dynamics CRM\Se ...