集成到Android应用

目前,Weex 支持以下 ABI:

  • x86
  • armeabi-v7a
  • arm64-v8a

在执行以下步骤之前,请先确认您的Android开发环境是ok的。

1. 设置gradle依赖

从 0.28.0 开始,Weex 每次 Release 都将会发布两个二进制版本,请阅读文档了解它们的区别

  1. dependencies {
  2. ...
  3. // 以下两个 weex_sdk 版本二选一
  4. //implementation 'org.apache.weex:sdk:0.28.0'
  5. //implementation 'org.apache.weex:sdk_legacy:0.28.0'
  6. // fastjson
  7. implementation 'com.alibaba:fastjson:1.1.46.android'
  8. //support library dependencies
  9. implementation 'com.android.support:recyclerview-v7:23.1.1'
  10. implementation 'com.android.support:support-v4:23.1.1'
  11. implementation 'com.android.support:appcompat-v7:23.1.1'
  12. }

2. 配置混淆规则

混淆规则如下,建议参考最新的源码配置

  1. -keep class com.taobao.weex.bridge.** { *; }
  2. -keep class com.taobao.weex.layout.** { *; }
  3. -keep class com.taobao.weex.WXSDKEngine { *; }
  4. -keep class com.taobao.weex.base.SystemMessageHandler { *; }
  5. -dontwarn com.taobao.weex.bridge.**

3. 声明权限

AndroidManifest.xml中声明权限

  1. //网络
  2. <uses-permission android:name="android.permission.INTERNET"/>
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  4. //sd卡读写
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

4. 初始化sdk

  1. InitConfig config = new InitConfig.Builder()
  2. //图片库接口
  3. .setImgAdapter(new FrescoImageAdapter())
  4. //网络库接口
  5. .setHttpAdapter(new InterceptWXHttpAdapter())
  6. .build();
  7. WXSDKEngine.initialize(applicationContext,config);

5. 创建WXSDKInstance

WXSDKInstance是weex渲染页面的基本单元,

  • 通过instance.render(url)拉取bundle,
  • 在回调IWXRenderListeneronViewCreated返回创建的view,
  • 将返回的view 添加到Activity的view上(rootView)

参见源码: WXPageActivity

  1. public class MainActivity extends AppCompatActivity implements IWXRenderListener {
  2. WXSDKInstance mWXSDKInstance;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. mWXSDKInstance = new WXSDKInstance(this);
  8. mWXSDKInstance.registerRenderListener(this);
  9. /**
  10. * bundleUrl source http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c
  11. */
  12. String pageName = "WXSample";
  13. String bundleUrl = "http://dotwe.org/raw/dist/38e202c16bdfefbdb88a8754f975454c.bundle.wx";
  14. mWXSDKInstance.renderByUrl(pageName, bundleUrl, null, null,WXRenderStrategy.APPEND_ASYNC);
  15. }
  16. @Override
  17. public void onViewCreated(WXSDKInstance instance, View view) {
  18. setContentView(view);
  19. }
  20. @Override
  21. public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
  22. }
  23. @Override
  24. public void onRefreshSuccess(WXSDKInstance instance, int width, int height) {
  25. }
  26. @Override
  27. public void onException(WXSDKInstance instance, String errCode, String msg) {
  28. }
  29. @Override
  30. protected void onResume() {
  31. super.onResume();
  32. if(mWXSDKInstance!=null){
  33. mWXSDKInstance.onActivityResume();
  34. }
  35. }
  36. @Override
  37. protected void onPause() {
  38. super.onPause();
  39. if(mWXSDKInstance!=null){
  40. mWXSDKInstance.onActivityPause();
  41. }
  42. }
  43. @Override
  44. protected void onStop() {
  45. super.onStop();
  46. if(mWXSDKInstance!=null){
  47. mWXSDKInstance.onActivityStop();
  48. }
  49. }
  50. @Override
  51. protected void onDestroy() {
  52. super.onDestroy();
  53. if(mWXSDKInstance!=null){
  54. mWXSDKInstance.onActivityDestroy();
  55. }
  56. }
  57. }

6. 运行app

运行app,您将会看到一个 hello world 页面。

7. 扩展Android能力

Weex 提供了能力扩展机制,可以根据自己的业务进行定制自己的功能。 主要分为:

  • Module 扩展, 非 UI 的特定功能。例如 sendHttp、openURL 等。
  • Component 扩展, 实现特别功能的 Native 控件。例如:RichTextview,RefreshListview 等。
  • Adapter 扩展, Weex 对一些基础功能实现了统一的接口,可实现这些接口来定制自己的业务。例如:图片下载等。