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容器做不做并不重要
我想在 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容器做不做并不重要