• 集成到Android应用
    • 1. 设置gradle依赖
    • 2. 配置混淆规则
    • 3. 声明权限
    • 4. 初始化sdk
    • 5. 创建WXSDKInstance
    • 6. 运行app
    • 7. 扩展Android能力

    集成到Android应用

    目前,Weex 支持以下 ABI:

    • x86
    • armeabi-v7a
    • arm64-v8a

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

    • JAVA环境, jdk7+
    • Android Studio
    • NDK r18、Cmake 3.9.0+ (可选项:如果需要编译WEEX源码,需要NDK环境支持)

    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);
    • demo初始化源码
    • 其它扩展配置看这里

    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 页面。

    • Hello World Demo 源码
    • 提示: 点击二维码, 可以看到最终编译的代码产物。

    7. 扩展Android能力

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

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