Java有很多第三方库。Android的Dalvik虚拟器不完全是Java,也就是Android SDK和传统的SDK不完全一样,如果Java库兼容Android,则可被利用。Java库使用受限于下面因素:

  • 目标平台:Java代码适配版本是否比Android基于的Java版本更高。是否用了Android不支持的Java SE的API,例如Swing、AWT图形。
  • Size:为桌面或者服务器设计的Java代码不需要考虑存储和内存空间,Android需要,使用第三方Java代码,可能会是应用Size无法容忍。
  • 性能:Java代码是否要消耗Android设备所能提供的CPU。
  • 界面:Java代码是否需要console界面,或者可以包装我们自己界面中的单纯API。

解决方式之一是使用开源java代码,使他们变得更适合Android。例如只需使用10%的第三方库,可以重新编译,去除不必要的类。

不是所有的Java代码可以在Android或者Dalvik上运行,Android没有提供某些在Java SE/ME/EE上的API,例如图形相关的Swing和AWT。此外Java代码可以依赖其他Java代码,例如Jar中依赖不同于Android集成的Apache HttpComponents,可能会引发兼容问题。在这些情况下,当我们引入第三方jar包进行编译的时候没有问题,但是在运行应用是出错。因此使用开源代码是最好的解决方案。

有两种方法集成第三方代码,使用源代码或者使用预先封装好的jar。如果使用源代码,将其放入我们代码树中一起编译。下面介绍使用jar的方式。

加入第三方jar

如果使用现成的jar,将jar放在Android项目的libs/目录下,在命令行ant的编译方式中,会自动将查找libs/的jar文档。如果使用IDE开发,例如Eclipse,需要将JAR加入到bulid path中。在左边树状列表中,点击所需加载jar的项目,按右键->Build Path –>Add External Archives…,加入jar包即可。

在例子中,使用BeanShell的bsh-core-2.0b4.jar,BeanShell是提供脚本方式,可以按java的语句格式来编写脚本。下载,并安装后,在Eclipse成功加入jar文档,如右图所示。BeanShell使用很简单,将在例子中建设。

源代码

加入jar后,其他和常规的做法没有什么区别,代码如下:

... ...
import bsh.Interpreter; //可通过 Ctrl + Shif + O自动加上

public class Chapter24Test1 extends Activity{
//BeanShell使用步骤1:创建一个BeanShell Interpreter的实例
private Interpreter i = new Interpreter();

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chapter_24_test1);
Button button = (Button)findViewById(R.id.c24_eval);
final EditText script = (EditText)findViewById(R.id.c24_script);

button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String src= script.getText().toString();
try{
//BeanShell第2步:设置脚本的全局
i.set("context",Chapter24Test1.this);
//BeanShell第3步:设置脚本,可选的获取脚本的最后状态。
i.eval(src);

}catch(bsh.EvalError e){
Log.e("WEI","Error : " + e.toString());
}
}
});
}

}

在Android上使用能够BeanShell是有限制的,不是所有的脚本语言都能正常工作,例如那些对JIT有独特格式的脚本,此外不是所有的Java API都在Dalvik中有效。没有JIT的脚步将比编译为Dalvik应用慢,慢回事用户体验呆滞,并消耗更多的电池能量,因此除非很简单,一般般在BeanShell中建立整个Android应用。BeanShell脚本可以处理Android底层安全模式运行的所有事情,例如如果应用设置了READ_CONTACTS权限,那么应用中任何的BeanShell脚本就有相同的权限。另外,BeanShell最小的Core包也有140K,和应用处理的事情来讲,体积太大,消耗存储太多,下载时间更长。

相关链接:我的Andriod开发相关文章

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android短信发送器的实现
  6. Android(安卓)7.1 车机 Android(安卓)系统 在线升级,将安装到下
  7. Cordova插件调用Android原生Activity
  8. 读懂Android(安卓)(1):使用Android内部的DownloadProvider下载文
  9. 在Android中使用SVG图遇到的坑

随机推荐

  1. SQL Server纵表与横表相互转换的方法
  2. Mybatis非配置原因,导致SqlSession was no
  3. SQL Server成功与服务器建立连接但是在登
  4. 用注解编写创建表的SQL语句
  5. SqlServer查询和Kill进程死锁的语句
  6. SQL server 表数据改变触发发送邮件的方
  7. 在Sql Server中调用外部EXE执行程序引发
  8. 深入浅析SQL封装、多态与重载
  9. SQL Server 数据库分离与附加 就这么简单
  10. 详解DB2 sqlstate 57016 SQLCODE=-668 原