帖子
帖子
用户
博客
课程
12下一页
返回列表 发新帖
显示全部楼层
59
帖子
0
勋章
713
Y币

[App引擎] api.wgtRootDir在安卓正式版上获取到的路径有问题

[复制链接]
发表于 2015-6-24 21:34:23
api.wgtRootDir 一键真机能获取到正确的地址,但是云编译打正式包就无效了,得到的值是 file:///android_asset/widget

这个APK云编译后加载不了res下的video.mp4了

屏幕快照 2015-06-24 21.32.23.png
5
帖子
0
勋章
1万+
Y币

1。api.wgtRootDir ;能贴下代码吗,运行下你的应用,不知所以
2.用哪个方法加载video.mp4的
59
帖子
0
勋章
713
Y币
技术支持-M 发表于 2015-6-25 10:31
1。api.wgtRootDir ;能贴下代码吗,运行下你的应用,不知所以
2.用哪个方法加载video.mp4的 ...

这个应用的代码如下,res目录下的video.mp4已存在,一键真机可自动播放

    apiready = function(){
                $api.byId('sys-info').innerHTML = '<video id="player" style="max-width:100%;" src="' + api.wgtRootDir + '/res/video.mp4" loop autoplay webkit-playsinline></video>';
                $api.byId('player').play();
                $api.byId('sys-code').innerHTML = api.wgtRootDir + '/res/video.mp4';
               
    };
59
帖子
0
勋章
713
Y币
技术支持-M 发表于 2015-6-25 10:31
1。api.wgtRootDir ;能贴下代码吗,运行下你的应用,不知所以
2.用哪个方法加载video.mp4的 ...

主要是 api.wgtRootDir 安卓正式版获取到的路径应该是不对的吧
20
帖子
1
勋章
7581
Y币
api.wgtRootDir即你的代码的根路径(我们把这个统一定义叫做widget),该路径在真机同步阶段,使用的是apploader进行调试,调试过程:IDE先将该项目推送至你的手机SD卡上,然后apploader再去加载该项目的代码,因此,api.wgtRootDir是一个位于手机SD上的一个目录,类似:/sdcard/uzmap/appid/xxxxx;
当你的代码云编译成apk包后,那么你的所有代码就位于apk包中了,具体位于apk包/assets/widget目录下,因此,此时的api.wgtRootDir是位于apk包内的,类似:file:///android_assets/widget/xxxxx;(apk包本质上是一个zip包,你可以直接解压,同时引擎在加载这其中的资源时,也是从中解压出来的,只是这个过程是在操作系统底层C中完成)
这是两个不同的目录,同时ios上也会是另外的目录。
看你的代码中,使用的是api.wgtRootDir + xxx去拼凑某个资源的地址。这是不规范的使用,该mp4本身就属于你的代码资源的一部分,
因此建议,使用相对路径赋值给src即可。相对路径是与根路径无关的,引擎会自动去处理根路径。而api.wgtRootDir是会跟随不同的运行环境而变化。
59
帖子
0
勋章
713
Y币
常山赵子云 发表于 2015-7-1 11:36
api.wgtRootDir即你的代码的根路径(我们把这个统一定义叫做widget),该路径在真机同步阶段,使用的是appl ...

我需要先检测包里是否存在此文件,如果不存在则自动下载一个文件到fs里,因为数据库是动态的,所以无法确实包内所需资源都存在

api.wgtRootDir + 资源路径 这做法在28号升级前IOS一键真机,IOS正式版,安卓一键真机都可以使用,就安卓正式版无法用

但28号升级后 IOS没问题,安卓上则一键真机和安卓正式版都无法使用了,详见 https://community.apicloud.com/b ... thread&tid=8798
20
帖子
1
勋章
7581
Y币
如果是下载的,就直接把下载成功的路径赋值给src即可,也不用做拼装。
https://community.apicloud.com/b ... thread&tid=8798这篇帖子中的问题,也跟28号的更新无关,是因为你开启了云修复,此时的api.wgtRootDir变成真正意义上的Android沙箱路径,拼出来的路径src同样不识别。
59
帖子
0
勋章
713
Y币
常山赵子云 发表于 2015-7-1 14:53
如果是下载的,就直接把下载成功的路径赋值给src即可,也不用做拼装。
https://community.apicloud.com/bbs/ ...

云修复一直开着的,升级前开着,升级后也开着

用相对路径,一键真机可以,正式版不行

下载是可以直接用。。。。
59
帖子
0
勋章
713
Y币
常山赵子云 发表于 2015-7-1 14:53
如果是下载的,就直接把下载成功的路径赋值给src即可,也不用做拼装。
https://community.apicloud.com/bbs/ ...

我把云修复关了依然会报 not allowed to load local resource 这个错误
亲,你们就不能自己跑一次代码试一下吗?
api.wgtRootDir的问题导致安卓一周了都无法发布。。。。。。。。。。。。。。。。。。。啊啊啊啊啊啊啊啊啊
1
帖子
0
勋章
17
Y币
使用绝对路径有非常的必要的啊

我是准备将各个页面的跳转,抽象成一个路由的。

所有的跳转都是在一个js文件里面汇总的,这个js文档会被不同的页面调用,每个页面的相对路径不一样的


比如

var tplIs = function (path) {
    return "widget://html/" + path+".html";
}
var Router = {

    goback: function () {
        var name = api.winName;
        api.closeWin({
            name: name
        });
    },
    Organize: {
        sort: function () {
            api.openWin({
                name: 'organize.sort',
                url: tplIs('organize/more')
            });
        },
        List: function () {
            api.openWin({
                name: 'organize.list',
                url: tplIs('organize/list')
            });
        },
        Detail:function () {
            api.openWin({
                name: 'organize.detail',
                url: tplIs('organize/detail')
            });
        },
    },

    Activity: {
        List: function(tid,title){
            api.openWin({
                name: 'activity.list',
                url: tplIs('activity/list'),
                pageParam: {tid: tid, title: title}
            });
        },
        Detail: function (id) {
            api.openWin({
                name: 'activity.detail',
                url: tplIs('activity/detail'),

                pageParam: {id: id}
            });

        },
        Search:function(typekey){
            api.openWin({
                name: 'activity.search.key',
                url: tplIs('activity/search'),
                pageParam:{key:typekey}
            });

        }
    },
    Search: {
        Result: function (text) {
            api.openWin({
                name: 'searchList',
                url: tplIs('search/result'),
                pageParam: {
                    content: text
                }
            });
        }
    },
    User: {
        Login: function () {
            api.openWin({
                name: 'user.login',
                url: tplIs('user/h_login')
            });
        }
    }
};



如果widget不能用,那没法按照自己想要的方式架构啊

apicloud对开发者不够友好。在apicloud基础上需要架构出一层蕾丝backbone的mvc的方式来。


12下一页
您需要登录后才可以回帖 登录

本版积分规则