Jade Android 独立执行

Jade Android standalone execution

我想在 Android 环境中独立使用 Jade。

当然我用的是JadeLeapAndroid 4.3.3

我发现这些帖子很有帮助,

http://permalink.gmane.org/gmane.comp.java.jade.devel/12271
http://jade.tilab.com/pipermail/jade-develop/2013q1/018940.html

但我现在遇到了问题

我可以通过这个代码绑定服务

[代码从这里开始]

public void bind() {
    sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.d("SERVICE", "Bind Success");
            binder = (RuntimeServiceBinder) service;
            container();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d("SERVICE", "Bind Fail");
            binder = null;
        }
    };

    Log.d("SERVICE", "Bind Trial");
    bindService(new Intent(getApplicationContext(), RuntimeService.class),
        sc, Context.BIND_AUTO_CREATE);
}

[代码到此结束]

但是当我使用此代码继续使用 AgentContainer 时,

[代码从这里开始]

public void container() {
    Profile profile = new ProfileImpl();

    binder.createAgentContainer(profile, new RuntimeCallback<AgentContainerHandler>() {
        @Override
        public void onSuccess(AgentContainerHandler agentContainerHandler) {
            try {
                Log.d("CONTAINER", "Startup Success");
                ContainerController cc = agentContainerHandler.getAgentContainer();
                //AgentController ac = cc.getAgent("Arin");
                AgentController ac = cc.createNewAgent("TestAgent", TestAgent.class.getName(),
                        new Object[] { new Object() });
                ac.start();
                //agent(agentContainerHandler);
            } catch (ControllerException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Throwable throwable) {
            Log.d("CONTAINER", "Startup Fail");
        }
    });
}

[代码到此结束]

它显示 FileNotFound (EROFS) 异常错误。

(即使我删除了onSuccess方法中的所有代码也会发生)

[错误从这里开始]

06-23 01:24:26.423  25603-25627/com.jadeandroid.test.jadeandroid     E/jade.core.messaging.Messaging﹕ Error writing platform address
    java.io.FileNotFoundException: MTPs-Main-Container.txt: open failed: EROFS (Read-only file system)
        at libcore.io.IoBridge.open(IoBridge.java:456)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
        at java.io.FileWriter.<init>(FileWriter.java:80)
        at jade.core.messaging.MessagingService.boot(MessagingService.java:326)
        at jade.core.AgentContainerImpl.bootAllServices(AgentContainerImpl.java:468)
        at jade.core.AgentContainerImpl.startNode(AgentContainerImpl.java:408)
        at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:495)
        at jade.core.Runtime.createMainContainer(Runtime.java:166)
        at jade.android.RuntimeService.run(RuntimeService.java:278)
 Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
        at libcore.io.Posix.open(Native Method)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
        at libcore.io.IoBridge.open(IoBridge.java:442)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
        at java.io.FileWriter.<init>(FileWriter.java:80)
        at jade.core.messaging.MessagingService.boot(MessagingService.java:326)
        at jade.core.AgentContainerImpl.bootAllServices(AgentContainerImpl.java:468)
        at jade.core.AgentContainerImpl.startNode(AgentContainerImpl.java:408)
        at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:495)
        at jade.core.Runtime.createMainContainer(Runtime.java:166)
        at jade.android.RuntimeService.run(RuntimeService.java:278)
06-23 01:24:26.441  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ java.io.FileNotFoundException: APDescription.txt: open failed: EROFS (Read-only file system)
06-23 01:24:26.441  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:456)
06-23 01:24:26.441  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
06-23 01:24:26.441  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at java.io.FileWriter.<init>(FileWriter.java:80)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at jade.domain.ams.writeAPDescription(ams.java:1435)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at jade.domain.ams.setup(ams.java:144)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at jade.core.Agent$ActiveLifeCycle.init(Agent.java:1542)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at jade.core.Agent.run(Agent.java:1488)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at libcore.io.Posix.open(Native Method)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:442)
06-23 01:24:26.442  25603-25644/com.jadeandroid.test.jadeandroid W/System.err﹕ ... 8 more

[错误到此结束]

实际上,这是来自 Android 的权限错误,即使我添加了 WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE.[=16= 的权限,也阻止应用程序将文件写入 /system 或 /data ]

我该怎么办?

我猜这可能是个人资料的问题,对吗?

提前致谢

如果有人需要这方面的帮助,您可以使用配置文件更改路径

例如,

Profile p = new ProfileImpl();
p.setParameter(Profile.FILE_DIR, Environment.getExternalStorageDirectory().getAbsolutePath()+"/jade/");

当然,请确保在清单中添加权限

android.permission.WRITE_EXTERNAL_STORAGE and READ permission too.

但是执行JADE容器做不做并不重要