集成到Android应用

WARNING 考虑到包大小的问题, 暂不提供 Android x86 so 的支持. 在执行以下步骤之前,请先确认您的Android开发环境是ok的。 * JAVA环境, jdk7+集成到Android应用 - 图1 * Android Studio集成到Android应用 - 图2 * NDK r18集成到Android应用 - 图3、Cmake 3.9.0+集成到Android应用 - 图4 (可选项:如果需要编译WEEX源码,需要NDK环境支持)

1. 设置gradle依赖

  1. dependencies {
    2.     ...
    3.     // weex sdk and fastjson
    4.     compile 'com.taobao.android:weex_sdk:0.20.0.2@aar'
    5.     compile 'com.alibaba:fastjson:1.1.46.android'
    6.   7.     //support library dependencies
    8.     compile 'com.android.support:recyclerview-v7:23.1.1'
    9.     compile 'com.android.support:support-v4:23.1.1'
    10.     compile 'com.android.support:appcompat-v7:23.1.1'
    11. }

2. 配置混淆规则

混淆规则如下,建议参考最新的源码配置集成到Android应用 - 图5 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. 3. 4. 5. //sd卡读写 6. 7.

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);
    8.
  • demo初始化源码集成到Android应用 - 图6
  • 其它扩展配置看这里

5. 创建WXSDKInstance

WXSDKInstance是weex渲染页面的基本单元, * 通过instance.render(url)拉取bundle, * 在回调IWXRenderListener的onViewCreated返回创建的view, * 将返回的view 添加到Activity的view上(rootView)参见源码: WXPageActivity集成到Android应用 - 图7

  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 页面。 * Hello World Demo 源码集成到Android应用 - 图8 * 提示: 点击二维码, 可以看到最终编译的代码产物。

7. 扩展Android能力

Weex 提供了能力扩展机制,可以根据自己的业务进行定制自己的功能。 主要分为: * Module 扩展, 非 UI 的特定功能。例如 sendHttp、openURL 等。 * Component 扩展, 实现特别功能的 Native 控件。例如:RichTextview,RefreshListview 等。 * Adapter 扩展, Weex 对一些基础功能实现了统一的接口,可实现这些接口来定制自己的业务。例如:图片下载等。