GithubHelp home page GithubHelp logo

bmfe / eros Goto Github PK

View Code? Open in Web Editor NEW
2.0K 95.0 287.0 12 MB

📱 一套 Vue 代码,两端原生应用 ,或许可以叫我 weex-native。

Home Page: https://bmfe.github.io/eros-docs

License: MIT License

JavaScript 13.96% Java 4.21% Shell 5.62% Ruby 0.71% Objective-C 0.71% Vue 71.38% CSS 1.85% HTML 1.56%
weex vue ios android weex-eros vuejs app vue-native eros

eros's Introduction


Markdownify
WEEX-EROS  

 :iphone: 一套 Vue 代码,两端原生应用。  

Based in Weex and Vue. Support By Bytemaster.

欢迎

介绍

eros 不是框架,是基于 weex 封装、面向前端的 vue 写法的一整套 APP 开源解决方案。

目前 eros 均由来自美团,今日头条,DCloud 等数十个开发者组成的 Bytemaster 公益开源团队 来共同维护,如果您想加入我们,或者有好的开源项目寻求平台,不妨联系我们,加入我们(完全免费)。

简单来说,在 weex 提供的强大支持下,用一份 vue 写法的代码,编译成 iOS/Android 两端原生 APP,并且通过我们内置的热更新逻辑和开源的服务器逻辑,可以使开发者以极快的速度开发 APP ,并赋予 APP 热更新能力(不用经过 appStore/android market 市场审核)。

那么 eros 开发有多快呢?我们收集了一些问卷,在复杂度不高,首次使用 eros 开发的某些场景下:

页数 开发周期统计
0 - 50 最晚一个月开发完成
50 - 100 最晚两个半月开发完成

当然,这都得益于 weexvue

想看看 EROS 开发了多少应用?

面向人群

要非常注意,eros/weex 并不太适合无客户端能力的个人或者团队,当然也有独立前端开发者使用 eros 做出了一定复杂度的 app,这完全取决于开发者能否有独立解决问题的能力,请谨慎思考。

适用场景

首先你需要熟悉 weex 的基础 api,部分机制和与 web 开发的差异性,同时需要知道 eros 提供了哪些原生能力,在根据自身业务来判定是否能加入到技术选型。

  • 实时交互性,与键盘交互等功能复杂度不高的项目。
  • 在 app 中接入 eros/weex,让某条业务线的部分流程达到快速迭代的目的,这也是 weex 的初衷

文档

帮助我们完善和翻译文档

Demo

开发者可以扫描二维码来下载 eros app 来进行体验,iOS首次打开App需要在 设置->通用->设备管理 信任开发证书。

Eros iOS demo Eros Android demo
【ios 下载】 【android 下载】
【预览录屏】 【预览录屏】
【下载链接】 【下载链接】

使用之前

请详细阅读以下须知

  • 虽然 weex 支持三端,但 eros 只支持两端 iOS/Android,意味着你不可以像开发 Web 那样开发 APP。
  • 开发者必须熟练开发 Vue,熟悉 Weex 文档,遇到问题要善于 google 和stackoverflow
  • weex 虽然提供了 weex run android/ios 等指令让开发者不打开对应开发者工具(AndroidStudio, xcode)来直接运行模拟器,打包到真机上开发,但 eros 并没有做相关功能,原因是每次修改 eros.native.js 配置文件也好,每次添加客户端三方插件也好,包括各种日志(特别崩溃日志)等使得开发者不得不操作开发者工具来进行打包和调试,而如若没有详细的日志,在出了问题之后也无法搜寻或者向我们反馈。

选择了 EROS 可以得到什么?

原生能力

暴露给前端大量便捷实用的 原生能力 ,拓展了 非常有用的事件

  • 路由
  • 原生事件
  • 本地化存储
  • 发布订阅
  • Restful 请求,支持 Cookie
  • 图片处理
  • 拍照上传
  • 浏览图片
  • 操作本地图片
  • 拨打电话
  • 发短信
  • 选择联系人
  • 定位
  • 原生弹窗
  • 拷贝
  • 扫一扫
  • Echart
  • 日历
  • Bindingx
  • 手势解锁
  • 访问本地图片,html等
  • ...

插件化

eros 在重做插件化后目前 github 上已经开源了近 20 多个由开发者自行拓展的插件,非常感谢这些开发者的支持并开源,当您使用他人拓展的插件时希望能顺便给他们一个小小的 star 。

  • 个推
  • 支付宝
  • 微信支付
  • 微信分享
  • 友盟分享
  • 阿里云移动推送(android)
  • 腾讯防水墙
  • 高德地图
  • 日期选择增强
  • 网络监控插件
  • 安卓端增强(文件的查看,下载,预览;本地缓存的获取,清除;跳转至应用市场评分页;获取软键盘的高度)
  • 二维码插件
  • 短信验证码插件
  • 健康相关,步数统计插件
  • 刮刮卡,抽奖插件等等

具体可在 github 搜索 eros-plugin 查阅。(https://github.com/search?p=1&q=eros-plugin&type=Repositories

而在纯净(pure)的开发模板中,是没有地图,个推等三方插件的,eros 有自己的插件体系,使得开发者在需要的时候,写入几行代码即可,不引用就不打包,减少安装包的大小,pure 纯净版本只有 10 MB 出头

开发过程中

  • 详细的文档
  • iOS/Android 模拟器/真机热刷新(区别于热更新,热刷新是保存即刷新 APP)
  • 支持 weex debug
  • 一套 Vue 代码,两端原生应用
  • 通过 appboard JS bundle 极大的减少了公共代码冗余
  • 为大型项目内置了中介者服务,方便管理业务间的事件交互

脚手架 eros-cli

  • 随时初始化最新的开发项目模板。
  • 简单而且快速的依赖更新。
  • 支持生成内置包,全量包,增量包。
  • 支持随时更新模板内容。
  • 支持 Weex 两种入口开发方式 JS/Vue
  • 内置与增量服务器的交互逻辑。

热更新机制

由于 Weex 的机制,我们能在远端发布代码,客户端更新并生效,并不需要审核发布流程,给 APP 提供了强大的迭代动力。

UI 库

使用 UI 库,开发效率也会大大提升:

现有 app 接入

我们也有热心的开发者分享了现有 app 接入 eros 的方案:

开源现状

在 EROS 开源的一年时间,已帮助上千位开发者开发了属于自己的原生应用,支持了数百个 app,如:

  • 金宣公寓
  • 多利农庄
  • mmphoto
  • StarLife
  • 大嘴吧拼读
  • 韩语入门-早道网校
  • 德语入门-早道网校
  • 赢商大数据
  • 多逛逛
  • 区块学院
  • 易送
  • 蜂觅
  • JEX
  • 1234TV
  • FoD chain
  • 博山头条
  • 新长宁慧生活
  • 辽河油田
  • 连云港政协
  • 连云港古树
  • 亿康通
  • 本木医疗助手
  • 本木医生助理
  • 京医通 APP
  • ...

涉及行业分布于区块链、资讯、医疗、招商、购物、政府、办公、直播等各行各业。

同时也有越来越多的团队加入到 eros 开发和讨论行列:

  • StarLife 大前端团队
  • 早道网校 大前端团队
  • 车保姆 大前端团队
  • 车国 大前端团队

支持性

跟随着 weex 的支持性,但 eros 并不支持开发代码兼容 web 端

  • Android 4.1 (API 16)
  • iOS 8.0+
  • WebKit 534.30+

快速开始

周边系统

以下项目,全部开源:

Project Description
eros-cli 简单的 eros 项目构建工具,可以提供搭建,开发,调试和发布等功能。
eros-publish 简单的服务器差分包更新逻辑,需要和脚手架搭配使用。
eros-widget 二次封装 module。
eros-ios-library eros ios Weex 项目依赖库。
eros-ios-sdk eros ios Weex sdk。
eros-android-framework eros weex 移动解决方案安卓端框架。
eros-android-widget eros 安卓组件库。
eros-android-sdk eros 安卓移动解决方案安卓端 WeexSDK。

你还可以尝试其他开发者贡献的服务器增量发布逻辑:

当然,开发者可以自己制作自己的发布逻辑。

讨论组

eros 正式开源到现在已经有了一个拥有大量开发者的群(微信群已满),群里有大量开发者已经有 eros 产品在开发中和已上线,为了维护一个良好的环境,还请先熟知以下群规:

  • 此并不是流量群,也并非广告群,是为了大家一起成长,保证信息的有效性,如果发黄赌毒,不和谐言语,与学习无关的广告,推广内容,无关小程序,不会商量,直接会被踢,且不会再有入群机会。
  • eros开发中遇到任何问题可以随时发到群里 weex开发相关可以一起讨论。
  • 如果不能及时回答也请耐心等待,群里开发丰富经验的同学会帮您一起看问题。
  • 除了 eros 自身紧急 BUG 外的问题,均需要提 issue,我们会按 issue 处理,目的是为了更好的给其他开发者参考,紧急问题请直接抛到群里,我们会直接远程帮助您调试。

QQ群:
开发者1群 667379588 (满员)
开发者2群 798677297

赞赏我们

感谢在 eros 开源过程中赞赏我们的开发者,你们一直是 eros 继续下去的最大动力!

Awesome Eros

以下是部分 eros 产品的使用截图,我们会进行不定期更新:

世界邦-mmphoto (iOS/Android 市场均可下载)


多利农庄 (iOS/Android 市场均可下载)


金宣公寓 (iOS/Android 市场均可下载)


star life new.


star life old.(内测)


大嘴吧拼读-上海才隽前端团队(安卓/苹果市场搜索)






区块学院(iOS/Android 市场均可下载,可自行搜索)


 蜂觅(企业级 app)


 某企业级 app (c 端 app 开发中)


 其他 app 集合(还有很多,后续会慢慢添加)

License

MIT

Copyright (c) 2017-present, Byte Master.

eros's People

Contributors

hejie20170930 avatar lw1024 avatar myliuyx avatar perseverancez avatar stone-wang avatar sunorry avatar xiaohuapunk avatar yangguangqishimi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eros's Issues

安卓 list 上滑加载不触发

简略的描述你的问题。

使用list 做更多加载,loadmore 事件无法执行,@loadmore="loadmore" 事件无法触发
#

<list class="list" @loadmore="loadmore" loadmoreoffset="0">

#        <cell class="cell" v-for="item in items">
  #          <div class="goods" v-if="item.object_type=='goods'" >
    #            <div class="title flex-row">
                    <div class="line" ></div>
                    <div class="point"></div>
                    <text class="text-title full-rest">{{item.create_date}}</text>
                </div>
                <div class="content flex-row">
                    <div class="line"></div>
                    <div class="full-rest">
                       # <ydh-goods viewStyle="list"  
                            #:title="item.obj.title" 
                            #:price="item.obj.price" 
                            #:numIid="item.obj.num_iid" 
                            #:couponMoney="item.obj.coupon_money" 
                            #:couponStartTime="item.obj.coupon_start_time"
                            #:couponEndTime="item.obj.coupon_end_time"
                            #:couponStatus="item.obj.coupon_status"
                          #  :picUrl="item.obj.pic_url" 
                        #    :comment="item.obj.comment" 
                      #      :volume="item.obj.volume" 
                    #        :buyPrice="item.obj.buy_price" 
                  #          v-if="initShow" :customSet="local.config.skin.common"
                #        />
              #      </div>
            #    </div>
          #  </div>
        #</cell>
      #  <loading class="loading" @loading="onloading" :display="showLoading">
            <loading-indicator>
                <text class="indicator">加载中...</text>
            </loading-indicator>
        </loading>
    </list>
    <wxc-loading :show="!isShow" type="trip"></wxc-loading>
</div>
<script> if(process.env.NODE_ENV === 'development') require('Config') import util from '../../utils/util'; export default { components: { 'ydh-goods':goodsBox, WxcResult,WxcLoading,WxcMinibar ,YdhMinibar,YdhResult,YdhRefresh,CommonUtils,Tools }, created() { util.initIconFont() this.init() }, data() { return { local:{}, initShow:false, isShow:false, hasItems:false, items: [], showLoading: 'hide', min_time:'', max_time:'', }, } }, computed : { showList : function() { return this.isShow; } }, methods: { init_query(){

    },
    loadmore(){
        this.$notice.loading.show("加载中..")
        this.showLoading = 'show';
        this.queryItems({
            min_date:this.min_time
        },resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push.apply(this.items,resData.items)
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
        })
    },
    onloading() {
        
    },
    loadingDown() {
        this.queryItems({},resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        })
    },
    queryItems(options,success,reject){
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: options
        }).then(resData => {
            success(resData);
        }, error => {
            reject(error);
        })
    },
    queryInitItems() {
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: {}
        }).then(resData => {
            this.items = resData.items;
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
            this.isShow = true;
            if(this.items.length>0){
                this.hasItems = true;
            }

        }, error => {

        })
    },
    wxcResultButtonClicked(){
        this.queryItems();
    },
    onchange(index) {
        // console.log(index);
        // dom.scrollToElement(this.$refs[`page_${index}`][0], { animated: false })
    },
}

}
</script>

<style scoped> .wrapper { /* width:750px; */ position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* justify-content: center; */ /* flex-direction: column; */ } .list{ margin-bottom:0px; background-color: #ffffff; } .loading{ /* flex-direction: row; */ justify-content: center; align-items: center; width:750px; /* flex: 1; */ /* height:0px; */ } .indicator { /* background-color: black; */ color: #888888; font-size: 30px; padding-top: 20px; padding-bottom: 20px; } .history{ } .flex-row { flex-direction: row; } .full-rest { flex: 1; } .root { padding-top: 28px; padding-bottom: 24px; background-color: #ffffff; } .title { height: 40px; } .content { padding-top: 9px; padding-bottom: 42px; } .last-one-content { padding-bottom: 0; } .title, .content { padding-left: 60px; padding-right: 0px; } .line { position: absolute; top: 0; bottom: 0; left: 38px; width: 2px; background-color: #FFC300; } .first-one-title-line { top: 20px; } .last-one-title-line { bottom: 20px; } .last-one-content-line { width: 0; } .point { position: absolute; top: 13px; left: 32px; width: 14px; height: 14px; background-color: #FFF0BD; border-style: solid; border-width: 2px; border-color: #EE9900; border-radius: 100px; } .highlight-point { top: 7px; left: 26px; width: 26px; height: 26px; background-color: #EE9900; border-style: solid; border-width: 6px; border-color: #FFE78D; } .text-title { font-size: 30px; color: #3d3d3d; } .text-highlight-title { color: #EE9900; } .text-desc, .text-date { font-size: 24px; color: #a5a5a5; } .text-desc { margin-bottom: 12px; } </style>

安卓 list 上滑加载

安卓 使用list 做更多加载,loadmore 事件无法执行,@loadmore="loadmore" 事件无法触发

{{item.create_date}}
加载中...
<script> if(process.env.NODE_ENV === 'development') require('Config') import util from '../../utils/util'; export default { components: { 'ydh-goods':goodsBox, WxcResult,WxcLoading,WxcMinibar ,YdhMinibar,YdhResult,YdhRefresh,CommonUtils,Tools }, created() { util.initIconFont() this.init() }, data() { return { local:{}, initShow:false, isShow:false, hasItems:false, items: [], showLoading: 'hide', min_time:'', max_time:'', }, } }, computed : { showList : function() { return this.isShow; } }, methods: { init_query(){
    },
    loadmore(){
        this.$notice.loading.show("加载中..")
        this.showLoading = 'show';
        this.queryItems({
            min_date:this.min_time
        },resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push.apply(this.items,resData.items)
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
        })
    },
    onloading() {
        
    },
    loadingDown() {
        this.queryItems({},resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        })
    },
    queryItems(options,success,reject){
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: options
        }).then(resData => {
            success(resData);
        }, error => {
            reject(error);
        })
    },
    queryInitItems() {
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: {}
        }).then(resData => {
            this.items = resData.items;
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
            this.isShow = true;
            if(this.items.length>0){
                this.hasItems = true;
            }

        }, error => {

        })
    },
    wxcResultButtonClicked(){
        this.queryItems();
    },
    onchange(index) {
        // console.log(index);
        // dom.scrollToElement(this.$refs[`page_${index}`][0], { animated: false })
    },
}

}
</script>

<style scoped> .wrapper { /* width:750px; */ position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* justify-content: center; */ /* flex-direction: column; */ } .list{ margin-bottom:0px; background-color: #ffffff; } .loading{ /* flex-direction: row; */ justify-content: center; align-items: center; width:750px; /* flex: 1; */ /* height:0px; */ } .indicator { /* background-color: black; */ color: #888888; font-size: 30px; padding-top: 20px; padding-bottom: 20px; } .history{ } .flex-row { flex-direction: row; } .full-rest { flex: 1; } .root { padding-top: 28px; padding-bottom: 24px; background-color: #ffffff; } .title { height: 40px; } .content { padding-top: 9px; padding-bottom: 42px; } .last-one-content { padding-bottom: 0; } .title, .content { padding-left: 60px; padding-right: 0px; } .line { position: absolute; top: 0; bottom: 0; left: 38px; width: 2px; background-color: #FFC300; } .first-one-title-line { top: 20px; } .last-one-title-line { bottom: 20px; } .last-one-content-line { width: 0; } .point { position: absolute; top: 13px; left: 32px; width: 14px; height: 14px; background-color: #FFF0BD; border-style: solid; border-width: 2px; border-color: #EE9900; border-radius: 100px; } .highlight-point { top: 7px; left: 26px; width: 26px; height: 26px; background-color: #EE9900; border-style: solid; border-width: 6px; border-color: #FFE78D; } .text-title { font-size: 30px; color: #3d3d3d; } .text-highlight-title { color: #EE9900; } .text-desc, .text-date { font-size: 24px; color: #a5a5a5; } .text-desc { margin-bottom: 12px; } </style>

安卓端bmchart组件改变高度没变化

简略的描述你的问题。

安卓端bmchart组件改动高度没变化,宽度是可以修改的。

环境信息

例子:

  • 开发平台:darwin/windows/linux
  • node 版本:6.10.2
  • npm 版本:5.4.2
  • 调试类型:模拟器/真机
  • 调试系统版本: Android 7.1.2
  • 开发工具及其版本 Android Studio 3.0.1

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

应该是系统兼容问题吧,IOS没试过。

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

安卓端bmchart组件改动高度没变化,不管是从行间样式修改还是在<style>修改都没变化。
代码部分:
image
展示部分:
image

ios 打开拦截器读取本地的gif图片不会动

简略的描述你的问题。

关闭拦截器调用本地的资源路径的gif图片,gif不会动。
打开拦截器调用调试服务器上的gif是可以动的。
代码如下:

 <image class="messageEgg" src="bmlocal://assets/index/[email protected]" @click="annualBegin"></image>

环境信息

例子:

  • 开发平台:mac
  • node 版本:v7.2.0
  • npm 版本:5.6.0
  • 调试类型:模拟器/真机都是
  • 调试系统版本: ios 全版本 (android 没看)
  • 开发工具及其版本 xcode 9

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例: gif的原理是图片叠加, ios中单单用imageWithContentsOfFile 应该只会读出gif的第一张
-->WXImgLoaderDefaultImpl

         NSString *imgPath = [NSString stringWithFormat:@"%@/%@%@",K_JS_PAGES_PATH,imgUrl.host,imgUrl.path];
            
            UIImage *img = [UIImage imageWithContentsOfFile:imgPath];
            NSError *error = nil;
            
 ....

建议针对.gif后缀的图片进行特殊处理。

什么场景下会复现这个问题,复现率是多少。

例:百分百复现,调用即复现。

提供一些bug

1.下拉刷新界面下拉刷新头不回去,而且下面的内容也滑不出来
开发平台:你们的demo
测试机信息:所有安卓手机
截图:
image
说明:我已修改AndroidSDK源码解决这个问题,需要的话可以联系我。
2.发布订阅页面不能传递0开头的数据
开发平台:你们的demo
测试机信息:vivo Y51 Android 5.1.1
截图:
image
image

调用 this.$image.upload 拾取图片后 ,ios 的 顶部时间状态条的时间文字以及其他系统图标就消失了

调用 this.$image.upload 拾取图片后 ,ios 的 顶部时间状态条的时间文字以及其他系统图标就消失了

环境信息

  • app 顶部背景色是黑色,文字是白色
  • this.$navigator.setNavigationInfo。。。(略)。。。 statusBarStyle: 'LightContent' 。。。
  • 调用 this.$image.upload
  • 接下来选拍照不会引发这个bug
  • 选择从相册拾取图片并取消,不会出现bug,如果点确定选择并预览图片,会立即出现这个bug

极有可能是图片预览窗口重置了 statusBarStyle ,但没有改回 app 所需要的 statusBarStyle

ios的$fetch没有根据content-type对数据进行处理。

环境信息

  • 开发平台:mac
  • 开发工具及其版本 xcode 9

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

ios没有根据content-type对数据进行处理,一直是json格式,手动更改BMBaseRequest.m代码后,eros install就会被还原。还希望从根本解决一下

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

初始化完新项目后用as导入项目后出现错误

简略的描述你的问题。

初始化完新项目后用as导入项目后出现错误
Error:Execution failed for task ':bmwidget:processDebugAndroidTestResources'.
No slave process to process jobs, aborting

环境信息

  • 开发平台:windows
  • node 版本:8.9.0
  • npm 版本:5.5.1
  • 调试类型:模拟器
  • 调试系统版本: android 5.0
  • 开发工具及其版本 android studio 3.0.1

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:
_20171219104534

图片预览组件功能优化

简略的描述你的问题。

  图片预览组件功能优化:
   1、头部期望有个返回按钮
   2、图片加载的时候,期望有个loading

mac安装教程初始化项目导入xcode报错

mac安装教程初始化项目导入xcode报错
RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired);
‘swift_name’ attribute cannot be appiled to this declaration

scroller 不执行start和end事件

简略的描述你的问题。

scroller 不执行start和end事件

环境信息

  • 开发平台:windows
  • node 版本:8.9.0
  • npm 版本:5.5.1
  • 调试类型:模拟器/真机
  • 调试系统版本: android 5
  • 开发工具及其版本 xcode 9

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

使用weex官方的例子 在playground中可以使用。在eros中新建頁面 内容相同 无法调起scrollstart和end事件

什么场景下会复现这个问题,复现率是多少。

weex例子:http://dotwe.org/vue/8711a2004bc7f55c83f0ff741f216a39

list 组件,下滑加载 loadmore 方法不执行

list组件下滑加载,loadmore 方法 不执行,下面是相关代码部分

加载中...
<style scoped> .wrapper { /* width:750px; */ position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* justify-content: center; */ /* flex-direction: column; */ } .list{ margin-bottom:0px; background-color: #ffffff; }

关于weex.config.eros参数问题

简略的描述你的问题。

例:在获取设备的高宽度时,deviceHeight,deviceWidth,发现ios下通过weex.config.eros能获取到,但是安卓下找不到,weex.config.env可以获取到
Uploading WX20180306-111020.png…

环境信息

例子:

  • 开发平台:darwin/windows/linux
  • node 版本:8.x.x
  • npm 版本:5.x.x
  • 调试类型:模拟器/真机
  • 调试系统版本: ios 8
  • 开发工具及其版本 xcode 9

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:bmImage module 中不支持传递参数的类型,导致的崩溃。

什么场景下会复现这个问题,复现率是多少。

例:百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:

用as打开新建项目后报错Error:Cause: org/apache/commons/lang/StringUtils

简略的描述你的问题。

Error:Cause: org/apache/commons/lang/StringUtils
Gradle 'WeexFrameworkWrapper' project refresh failed

环境信息

例子:

  • 开发平台:windows7
  • node 版本:6.11.4
  • npm 版本:5.6.0
  • 调试类型:模拟器/真机
  • 调试系统版本:
  • 开发工具及其版本 as 2.3.3

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

按照步骤新建项目后然后eros install完成
重as打开后发现该问题。

新建项目出错

简略的描述你的问题。

新建项目安装时覆盖之前的项目

环境信息

例子:

  • 开发平台:Windows
  • node 版本:8.0
  • npm 版本:5.3.0
  • 调试类型:模拟器
  • 调试系统版本: Android 4.0
  • 开发工具及其版本 vs code

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:新建项目后安装时会覆盖之前安装的项目,改了applicationid以及category两个仍然报错,百度搜索一波发现是 android:authorities="downloads.${APP_ID}" 这一句的问题,${APP_ID}删除后改成就正常安装

什么场景下会复现这个问题,复现率是多少。

例:百分百

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:
image

errCode->wx_network_error msg->Unable to resolve host 'app.weex-eros.com':No address associated with hostname

简略的描述你的问题。

wx_network_error msg->Unable to resolve host 'app.weex-eros.com':No address associated with hostname

环境信息

例子:

  • 开发平台:darwin/windows/linux
  • node 版本:8.x.x
  • npm 版本:5.x.x
  • 调试类型:模拟器/真机
  • 调试系统版本: ios 8
  • 开发工具及其版本 xcode 9

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:bmImage module 中不支持传递参数的类型,导致的崩溃。

什么场景下会复现这个问题,复现率是多少。

例:百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:如图
image

安卓 list 组件 ,上滑加载事件无法触发

简略的描述你的问题。

使用list 做更多加载,loadmore 事件无法执行,@loadmore="loadmore" 事件无法触发

{{item.create_date}}
加载中...
<script> if(process.env.NODE_ENV === 'development') require('Config') import util from '../../utils/util'; export default { components: { 'ydh-goods':goodsBox, WxcResult,WxcLoading,WxcMinibar ,YdhMinibar,YdhResult,YdhRefresh,CommonUtils,Tools }, created() { util.initIconFont() this.init() }, data() { return { local:{}, initShow:false, isShow:false, hasItems:false, items: [], showLoading: 'hide', min_time:'', max_time:'', }, } }, computed : { showList : function() { return this.isShow; } }, methods: { init_query(){
    },
    loadmore(){
        this.$notice.loading.show("加载中..")
        this.showLoading = 'show';
        this.queryItems({
            min_date:this.min_time
        },resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push.apply(this.items,resData.items)
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
        })
    },
    onloading() {
        
    },
    loadingDown() {
        this.queryItems({},resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        })
    },
    queryItems(options,success,reject){
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: options
        }).then(resData => {
            success(resData);
        }, error => {
            reject(error);
        })
    },
    queryInitItems() {
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: {}
        }).then(resData => {
            this.items = resData.items;
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
            this.isShow = true;
            if(this.items.length>0){
                this.hasItems = true;
            }

        }, error => {

        })
    },
    wxcResultButtonClicked(){
        this.queryItems();
    },
    onchange(index) {
        // console.log(index);
        // dom.scrollToElement(this.$refs[`page_${index}`][0], { animated: false })
    },
}

}
</script>

<style scoped> .wrapper { /* width:750px; */ position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* justify-content: center; */ /* flex-direction: column; */ } .list{ margin-bottom:0px; background-color: #ffffff; } .loading{ /* flex-direction: row; */ justify-content: center; align-items: center; width:750px; /* flex: 1; */ /* height:0px; */ } .indicator { /* background-color: black; */ color: #888888; font-size: 30px; padding-top: 20px; padding-bottom: 20px; } .history{ } .flex-row { flex-direction: row; } .full-rest { flex: 1; } .root { padding-top: 28px; padding-bottom: 24px; background-color: #ffffff; } .title { height: 40px; } .content { padding-top: 9px; padding-bottom: 42px; } .last-one-content { padding-bottom: 0; } .title, .content { padding-left: 60px; padding-right: 0px; } .line { position: absolute; top: 0; bottom: 0; left: 38px; width: 2px; background-color: #FFC300; } .first-one-title-line { top: 20px; } .last-one-title-line { bottom: 20px; } .last-one-content-line { width: 0; } .point { position: absolute; top: 13px; left: 32px; width: 14px; height: 14px; background-color: #FFF0BD; border-style: solid; border-width: 2px; border-color: #EE9900; border-radius: 100px; } .highlight-point { top: 7px; left: 26px; width: 26px; height: 26px; background-color: #EE9900; border-style: solid; border-width: 6px; border-color: #FFE78D; } .text-title { font-size: 30px; color: #3d3d3d; } .text-highlight-title { color: #EE9900; } .text-desc, .text-date { font-size: 24px; color: #a5a5a5; } .text-desc { margin-bottom: 12px; } </style>

vivo X3L闪退

简略的描述你的问题。

例:启动项目闪退

环境信息

例子:

  • 开发平台:darwin
  • node 版本:8.9.0
  • npm 版本:5.6.0
  • 调试类型:真机
  • 调试系统版本: android 4.3
  • 开发工具及其版本 android studio 3.0

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:启动项目就闪退 可以看见启动页
wechatimg870

组件目录 `js/components` 下可添加相关配置文件,方便使用

在使用中我发现 js/components 目录下的组件没有配置文件,使用的时候有点不方便,是否可以添加一些配置文件以方便使用。

比如,目前要使用里面的 TabBar组件得这样使用:

import Home from 'Components/tabs/bar.vue'

如果添加上 package.jsonindex.js 配置文件的话,那么可以这样使用:

import { TabBar } from 'Components'

加上这些配置文件后,也可以作为以后添加组件的模版,方便新手学习。

全局变量属性部分获取不到

简略的描述你的问题。

qq 20171220094245

环境信息

例子:

  • 开发平台:windows
  • node 版本:8.x.x
  • npm 版本:5.x.x
  • 调试类型:模拟器
  • 调试系统版本: android 5
  • 开发工具及其版本 android studio 3

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

如图,新增的那些属性都没有

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

添加定位后刷新没用

简略的描述你的问题。

例:下拉刷新添加定位后失效

环境信息

例子:

  • 开发平台:windows
  • node 版本:8.0.0
  • npm 版本:5.3.0
  • 调试类型:模拟器
  • 调试系统版本: 安卓4.4.3
  • 开发工具及其版本 vscode

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:下拉刷新添加定位后失效

什么场景下会复现这个问题,复现率是多少。

例:百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:
image

图片上传功能,快点点击完成按钮,会重复上传图片

简略的描述你的问题。

图片上传功能,快点点击完成按钮,会重复上传图片

环境信息

例子:

  • 开发平台:mac
  • node 版本:8.9.2
  • npm 版本:5.6.0
  • 调试类型:真机
  • 调试系统版本: 安卓7.0 Redmi Note 4X

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:image.upload 图片上传功能快速点击完成 ,会重复上传图片

什么场景下会复现这个问题,复现率是多少。

例:非必现

image
image

相关问题列表

问题一:this.$image.upload,参数有问题,查看源码,source应该改成images ,status应该为0.

问题2:上传图片后返回json数组,应该返回对象.

问题3:友盟组件及分享使用说明;

问题4:集成支付宝更好.

mac安装教程初始化项目导入xcode报错

mac安装教程初始化项目导入xcode报错
RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired);
‘swift_name’ attribute cannot be appiled to this declaration

mac安装教程初始化项目导入xcode报错

mac安装教程初始化项目导入xcode报错
RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired);
‘swift_name’ attribute cannot be appiled to this declaration

滑动组件扩展

希望扩展一个滑动组件。
效果类似于微信、QQ等应用单行对用户右滑后能对单行有相关操作。

谢谢

$fetch返回的data为空

简略的描述你的问题。

无论使用get还是post请求方式向php服务器请求数据,都可以拿到状态码200,php服务器也能收到请求,但是这边返回的resData里data一直是空的,直接在浏览器访问那个接口或者使用jquery的ajax都可以正常的取到数据,查看xcode的控制台发现请求的时候有一行错误
WeexEros[1799:136141] <Weex>[error]BMBaseRequest.m:49, BMCommonRequest Request_URL>>>>>>>>>>>>>>>>:<NSMutableURLRequest: 0x60c00001f120> { URL: http://192.168.1.78/index/driver/login }
同时我用get方法访问自己的一个node服务器的接口,就可以正常取到数据,也没有上面那条错误,不太懂php,请问是PHP服务器那边的问题吗,一般这种情况是什么引起的,小白求教了,感谢!!

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

eros使用情况总结

eros 使用中常见错误。

1.Windows下安装环境报错,有时候需要eros团队配合才能搭建好环境
2.UI组件,少部分人没接触bui-weex以及weex-ui导致eros团队封装进去的组件看不懂,建议使用的人可以自己封装组件以及一起丰富组件库的内
3.前端代码以及安卓底层的代码中注解较少,不便于理解框架内部机制
4.APP更新机制需要改进
5.打包过后的apk文件比较大,可以出一个文档来告知如何缩小安装包的大小...
6.调试文件中的刷新按钮能不能独立出来,减少调试时间,便于更快速的开发
7.文档说明不够详细,有许多小知识点文档中没有介绍,需麻烦eros团队里面的人才能做到。
8.封装进来的bui-weex,weex-ui以及weex-amap等最好给个地址便于新手查询
9.有空可以拓展一下获得手机信息等参数,如电池量,IMEI码等,参照nat.js
10.可以考虑集成一波sqllite

eros 使用须知

1.使用前需了解VUE,ES6以及WEEX的开发机制,经常看到有人问vue语法问题以及官方文档里面的内容,加大了工作量
2.了解WEEX封装好的demo以及可以使用的组件,eros是基于weex的二次封装,所以最好对WEEX有了一定的熟悉程度之后再来用框架做APP。

this.$image.camera,设置allowCrop为true,拍照后不出现裁剪页面(安卓端)。

简略的描述你的问题。

this.$image.camera,设置allowCrop为true,拍照后不出现裁剪页面。

环境信息

例子:

  • 开发平台:mac os
  • node 版本:8.x.x
  • npm 版本:5.x.x
  • 调试类型:真机
  • 调试系统版本: android 7
  • 开发工具及其版本 as

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

什么场景下会复现这个问题,复现率是多少。

百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:

更新发布闪退

简略的描述你的问题。

首先,安装一个apk到手机,没有历史版本,数据库没有任何记录。
image

然后修改代码,打个全量包,并且将全量包更新到服务器,
image

这时,数据库有一条记录
image
。接着打开app,APP就会请求更新接口,
image
image
,然后退出app重新打开,就是最新的app,这一切都很正常。
但是,假如在修改代码,再打个包上去,数据库存在两条记录,然后再重新打开app的时候,就出现闪退的情况了
现在的解决方案是:每次更新完之后,把数据库清掉,永远保持只有一条记录,就不会出现闪退了

环境信息

例子:

  • 开发平台:mac
  • node 版本:8.9.2
  • npm 版本:5..6.0
  • 调试类型:模拟器/真机
  • 开发工具及其版本as

mac安装教程初始化项目导入xcode报错

mac安装教程初始化项目导入xcode报错
RLM_EXTENSIBLE_STRING_ENUM_CASE_SWIFT_NAME(RLMRealmRefreshRequiredNotification, RefreshRequired);
‘swift_name’ attribute cannot be appiled to this declaration

promise回调中双向绑定报错

eros 封装的promise里面可以获取到数值但是无法给this赋值回报错,只有在promise里这样,

<template lang="html">
  <div>
    {{card}}
  </div>
</template>

<script>
export default {
  data() {
    return {
      card: {}
    }
  },
  created() {
    this.$storage.get('contentPage').then(resData => {
      this.card = resData;
      console.log(resData)
    })
    this.$router.getParams().then(resData => {
      this.card = resData.card;
    })

  }
}

会报下面的错
jsLog: TypeError: null is not an object (evaluating 'e.parentNode.setAttr')

红米3S闪退,激活中介者时不在主线程执行,Weex抛出了一个异常

在小米app商城提交的时候被拒,原因是在如下机型中启动后进行 Monkey 点击测试时崩溃。
安卓,红米3S,MIUI9(V9.2.1.0.MALCNEK)稳定版。

f86f52b6-7f7e-4ddb-a272-97f25758d5d6

报错流,从上至下:
java.lang.Thread.run(Thread.java:818)
SplashActivity.java:38
VersionManager.prepareJsBundle(VersionManager.java:54)
VersionManager.initMediator(VersionManager.java:70)
MediatorDocker.active(MediatorDocker.java:64)
MediatorDocker.destoryInstance(MediatorDocker.java:73)
MediatorInstance.destory(MediatorInstance.java:24)
com.taobao.weex.WXSDKInstance.destroy(WXSDKInstance.java:1229)
com.taobao.weex.WXSDKManager.destroyInstance(WXSDKManager.java:293)
com.taobao.weex.common.WXRuntimeException: [WXSDKManager] destroyInstance error

安卓 list组件 上滑加载事件无法触发

使用list 做更多加载,loadmore 事件无法执行,@loadmore="loadmore" 事件无法触发

{{item.create_date}}
加载中...
<script> if(process.env.NODE_ENV === 'development') require('Config') import util from '../../utils/util'; export default { components: { 'ydh-goods':goodsBox, WxcResult,WxcLoading,WxcMinibar ,YdhMinibar,YdhResult,YdhRefresh,CommonUtils,Tools }, created() { util.initIconFont() this.init() }, data() { return { local:{}, initShow:false, isShow:false, hasItems:false, items: [], showLoading: 'hide', min_time:'', max_time:'', }, } }, computed : { showList : function() { return this.isShow; } }, methods: { init_query(){
    },
    loadmore(){
        this.$notice.loading.show("加载中..")
        this.showLoading = 'show';
        this.queryItems({
            min_date:this.min_time
        },resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push.apply(this.items,resData.items)
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
        })
    },
    onloading() {
        
    },
    loadingDown() {
        this.queryItems({},resData =>{
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        },error => {
            this.$notice.loading.hide()
            this.showLoading = 'hide'
            this.items.push(resData.items);
        })
    },
    queryItems(options,success,reject){
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: options
        }).then(resData => {
            success(resData);
        }, error => {
            reject(error);
        })
    },
    queryInitItems() {
        this.$fetch({
            method: 'POST',
            name: 'cms.member.favorite.list',
            data: {}
        }).then(resData => {
            this.items = resData.items;
            if(CommonUtils.dateDiff(this.min_time,resData.min_time)){
                this.min_time = resData.min_time;
            }
            this.isShow = true;
            if(this.items.length>0){
                this.hasItems = true;
            }

        }, error => {

        })
    },
    wxcResultButtonClicked(){
        this.queryItems();
    },
    onchange(index) {
        // console.log(index);
        // dom.scrollToElement(this.$refs[`page_${index}`][0], { animated: false })
    },
}

}
</script>

<style scoped> .wrapper { /* width:750px; */ position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* justify-content: center; */ /* flex-direction: column; */ } .list{ margin-bottom:0px; background-color: #ffffff; } .loading{ /* flex-direction: row; */ justify-content: center; align-items: center; width:750px; /* flex: 1; */ /* height:0px; */ } .indicator { /* background-color: black; */ color: #888888; font-size: 30px; padding-top: 20px; padding-bottom: 20px; } .history{ } .flex-row { flex-direction: row; } .full-rest { flex: 1; } .root { padding-top: 28px; padding-bottom: 24px; background-color: #ffffff; } .title { height: 40px; } .content { padding-top: 9px; padding-bottom: 42px; } .last-one-content { padding-bottom: 0; } .title, .content { padding-left: 60px; padding-right: 0px; } .line { position: absolute; top: 0; bottom: 0; left: 38px; width: 2px; background-color: #FFC300; } .first-one-title-line { top: 20px; } .last-one-title-line { bottom: 20px; } .last-one-content-line { width: 0; } .point { position: absolute; top: 13px; left: 32px; width: 14px; height: 14px; background-color: #FFF0BD; border-style: solid; border-width: 2px; border-color: #EE9900; border-radius: 100px; } .highlight-point { top: 7px; left: 26px; width: 26px; height: 26px; background-color: #EE9900; border-style: solid; border-width: 6px; border-color: #FFE78D; } .text-title { font-size: 30px; color: #3d3d3d; } .text-highlight-title { color: #EE9900; } .text-desc, .text-date { font-size: 24px; color: #a5a5a5; } .text-desc { margin-bottom: 12px; } </style>

个推通知栏点击无效

简略的描述你的问题。

例:图片上传导致系统崩溃。

环境信息

例子:

  • 开发平台:windows
  • node 版本:8.9.1
  • npm 版本:5.5.1
  • 调试类型:真机
  • 调试系统版本: android 24
  • 开发工具及其版本 studio3.0

尽可能写下你对问题的分析,你觉得可能是由于什么造成的。

例:个推点击通知栏没有进ResultActivity,我用BroadcastReceiver测了一下,可以进入

什么场景下会复现这个问题,复现率是多少。

例:百分百复现,调用即复现。

详细的描述下你的 issue, 最好能有截图。(复杂的问题请一定仔细填写此项)

答:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.