集成到Android应用

WARNING

考虑到包大小的问题, 暂不提供 Android x86 so 的支持.

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

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. //support library dependencies
  7. compile 'com.android.support:recyclerview-v7:23.1.1'
  8. compile 'com.android.support:support-v4:23.1.1'
  9. compile 'com.android.support:appcompat-v7:23.1.1'
  10. }

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. <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集成到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 页面。

7. 扩展Android能力

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

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