开发HelloWorld程序(Weex开发)

作者:@guogai

  • 1.新建一个Module(一个Module就相当于一个app)

    1. 如果已经有一个Project,那么可以直接新建一个Module,如果没有先去新建一个Project

    如图:

    7.4 开发HelloWorld程序(Weex开发) - 图1

    创建工程,可以参考“开发HelloWorld程序(Android原生)”

    7.4 开发HelloWorld程序(Weex开发) - 图2

    7.4 开发HelloWorld程序(Weex开发) - 图3

    这里的Minumum SDK要选择API16及以上,Weex目前只支持到API16级以上。

    7.4 开发HelloWorld程序(Weex开发) - 图4

    7.4 开发HelloWorld程序(Weex开发) - 图5

    7.4 开发HelloWorld程序(Weex开发) - 图6

    这个时候我们WXHelloWorld程序的原生壳子就创建好了,接下来进入weex环节。

  • 2.给Module集成WeexSDK

    给module的build.gradle文件添加如下配置

7.4 开发HelloWorld程序(Weex开发) - 图7

  1. 添加完以后,点击Sync Now去同步配置即可,至此,weex sdk已经集成完毕。

7.4 开发HelloWorld程序(Weex开发) - 图8

  1. 集成完sdk以后,我们可以在AS中看到weex的源码。
  • 3.开发.we源码

    使用notepad++或者记事本等开发如下源码,保存文件扩展名为.we即可,自行百度关键字如何显示文件扩展名。

    7.4 开发HelloWorld程序(Weex开发) - 图9

  • 4.编译.we源码为js文件

    打开命令行,cd到.we源码的目录,执行:weex xxx.we

    7.4 开发HelloWorld程序(Weex开发) - 图10

    没有报错,编译成功,会自动打开浏览器,在浏览器显示我们开发的界面,在源码相应的文件夹也会生成js文件。

    7.4 开发HelloWorld程序(Weex开发) - 图11

    在浏览器运行后的效果。

    7.4 开发HelloWorld程序(Weex开发) - 图12

    编译.we源码生成的js文件,可以在源码的同级目录下找到。

  • 5.初始化sdk

    1. 5.1 实现图片下载适配器,如果项目中有图片展示,必须实现,否则图片无法显示。在刚刚的Module新建一个ImageAdapter类,实现IWXImgLoaderAdapter接口。由于我们这里展示的是HelloWorld,所以可以先不写具体的setImage()方法里面的实现。

    7.4 开发HelloWorld程序(Weex开发) - 图13

    1. 5.2 ModuleApplicationonCreate()处初始化WeexSDK
    2. public class HelloWorldApplication extends Application {
    3. @Override
    4. public void onCreate() {
    5. super.onCreate();
    6. //初始化WXSDK
    7. InitConfig config = new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build();
    8. WXSDKEngine.initialize(this, config);
    9. }
    10. }

    7.4 开发HelloWorld程序(Weex开发) - 图14

    1. 5.3 ModuleAndroidManifest文件设置android:name=".HelloWorldApplication"

    7.4 开发HelloWorld程序(Weex开发) - 图15

  • 6.实现渲染

    1. 6.1 先去掉原生的效果,防止干扰,把原生的activity_main.xml里面的TextView控件删除。

7.4 开发HelloWorld程序(Weex开发) - 图16

  1. 6.2 把编译后生成的.js文件复制到Moduleasserts资源文件夹下面

7.4 开发HelloWorld程序(Weex开发) - 图17

  1. 6.3 ModuleActivity实现渲染
  2. public class MainActivity extends AppCompatActivity implements IWXRenderListener {
  3. private WXSDKInstance mWXSDKInstance;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. initWXSDKInstance();
  9. }
  10. /**
  11. * 初始化WXSDKInstance
  12. */
  13. private void initWXSDKInstance() {
  14. mWXSDKInstance = new WXSDKInstance(this);
  15. mWXSDKInstance.registerRenderListener(this);
  16. /**
  17. * WXHelloWorld 可以替换成自定义的字符串,针对埋点有效。
  18. * template 是.we transform 后的 js文件。
  19. * option 可以为空,或者通过option传入 js需要的参数。例如bundle js的地址等。
  20. * jsonInitData 可以为空。
  21. * width 为-1 默认全屏,可以自己定制。
  22. * height =-1 默认全屏,可以自己定制。
  23. */
  24. mWXSDKInstance.render("WXHelloWorld", WXFileUtils.loadFileContent("HelloWorld.js", this), null, null, -1, -1, WXRenderStrategy.APPEND_ASYNC);
  25. }
  26. @Override
  27. public void onViewCreated(WXSDKInstance instance, View view) {
  28. //这里不能少
  29. setContentView(view);
  30. }
  31. @Override
  32. public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
  33. }
  34. @Override
  35. public void onRefreshSuccess(WXSDKInstance instance, int width, int height) {
  36. }
  37. @Override
  38. public void onException(WXSDKInstance instance, String errCode, String msg) {
  39. }
  40. @Override
  41. protected void onResume() {
  42. super.onResume();
  43. if (mWXSDKInstance != null) {
  44. mWXSDKInstance.onActivityResume();
  45. }
  46. }
  47. @Override
  48. protected void onPause() {
  49. super.onPause();
  50. if (mWXSDKInstance != null) {
  51. mWXSDKInstance.onActivityPause();
  52. }
  53. }
  54. @Override
  55. protected void onStop() {
  56. super.onStop();
  57. if (mWXSDKInstance != null) {
  58. mWXSDKInstance.onActivityStop();
  59. }
  60. }
  61. @Override
  62. protected void onDestroy() {
  63. super.onDestroy();
  64. if (mWXSDKInstance != null) {
  65. mWXSDKInstance.onActivityDestroy();
  66. }
  67. }

}

7.4 开发HelloWorld程序(Weex开发) - 图18

  1. 6.4 点击红色箭头指示处,运行程序。

7.4 开发HelloWorld程序(Weex开发) - 图19

Q&A

  • 1.执行weex xxx.we编译报错
  1. 一般报错是端口被占用,可以采用 cdxxx.we然后执行weex xxx.we --qr,或者重启电脑(鬼脸)
  • 2.找不到编译后的.js文件

    1. 建议把we源码放在C盘某个文件夹下,其他盘下会报一些错误,具体原因还没测试。