用C/C++开发android应用

在某些情况下,比如原来与很多c/c++的代码, 可能希望采用c/c++编写android应用程序.在这种情况下,一般使用NDK.但是由于android直提供了java接口,因此不能够直接调用android中的各种对象或者部件. 如何直接使用c/c++开发android应用? 可以使用cle和wrapandroid项目作为中间件. CLE项目提供了多种语言的通用接口,其中就包含对c/c++的支持.


本文简单介绍了如何使用CLE和wrapandroid编写GUI应用程序。CLE可以作为多种语言的通用平台,支持java, python,c/c++,lua, 等,且可以扩展至其它多种语言,也可以自定义语言。在CLE中,对象作为1个基本的操作元素。对象对外提供了统一的接口,可以通过这些接口,调用对象的函数,重载对象的函数,捕获对象的事件.

Wrapandroid将android类封装成为CLE对象,从而可以使程序员在c/c++中使用android的类。一般有以下几个步骤:
1.使用CLE接口函数MallocObjectL创建android类的实例对象
2.使用ScriptCall接口函数调用对象的方法
3.使用CreateOvlFunction重载对象的函数
4.使用RegEventFunction注册对象的事件处理函数

步骤1: 准备环境

a: CLE可以在应用启动的时候自动安装,只需要在工程中包含starcore_android_r6.jar,该文件在starcore_devfiles_r6.zip压缩包中, 可以从链接: http://code.google.com/p/cle-for-android 下载。

b: Wrapandroid是一个jar库,可以从http:/code.google.com/p/wrapandroid-for-multilaguage/download/wrapandroid_devfiles_0_8_5.rar下载。

步骤2 : 开始编程


开发工具使用eclipse和NDK. 这两个如何安装和使用,请参阅相关的文档.

a. 打开eclipse, 创建一个新工程,名字为“introduction”

b. cle可以在应用启动的时候从网络下载,此时需要在工程中增加以下许可:



c. 将java库文件starcore_android_r6.jar和wrapandroid.jar拷贝到工程目录,并加入到工程中:



d. 编辑IntroductionActivity.java,如下修改,装载共享库
import com.srplab.wrapandroid.*;
public class IntroductionActivity extends WrapAndroidActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StarActivity._Call("DoFile","","/data/data/"+getPackageName()+"/lib/libCode.so");
}
}
e cle也可以打包到工程中,此时需要将CLE的共享库文件放到工程目录中,如下:


同时,将下载标志设置为false
public class IntroductionActivity extends WrapAndroidActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
DownloadFromNetFlag = false;
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StarActivity._Call("DoFile","","/data/data/"+getPackageName()+"/lib/libCode.so");
}
}
f. 编辑布局文件:main.xml.
android:id="@+id/widget73"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/widget45"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />

你可能感兴趣的:(用C/C++开发android应用)