随Android NDK 提供的另外一个例子TwoLibs,其中有两个库,一个为动态库,一个为静态库,最终供Android Application使用的动态库使用静态库中的函数,如下图所示:

其中在first.c 中定义了一个简单的C函数

int first(int x, int y){ return x+y;}


second.c 调用这个函数

jintJava_com_example_twolibs_TwoLibs_add( JNIEnv*  env, jobject  this, jint     x, jint     y ){ return first(x, y);}


为了介绍动态库调用静态库的方法,这个例子将两个C文件编译成两个模块,这是通过android.mk 来定义的。

LOCAL_PATH:= $(call my-dir)

# first lib, which will be built statically
#
include $(CLEAR_VARS)

LOCAL_MODULE := libtwolib-first
LOCAL_SRC_FILES := first.c

include $(BUILD_STATIC_LIBRARY)

# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)

LOCAL_MODULE := libtwolib-second
LOCAL_SRC_FILES := second.c

LOCAL_STATIC_LIBRARIES := libtwolib-first

include $(BUILD_SHARED_LIBRARY)

注:当然对于这个简单的例子,大可不必编译成两个模块。

在Android 应用中调用动态库(Android应用只可以调用动态库)

public class TwoLibs extends Activity{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);  TextView  tv = new TextView(this); int       x  = 1000; int       y  = 42;  // here, we dynamically load the library at runtime // before calling the native method. // System.loadLibrary("twolib-second");  int  z = add(x, y);  tv.setText( "The sum of " + x + " and " + y + " is " + z ); setContentView(tv); }  public native int add(int  x, int  y);}

下面就可以使用ndk-build ,编译C代码,然后再使用Eclipse编译Java代码,运行结果如下:


更多相关文章

  1. Android(安卓)Do not keep activities选项分析
  2. Android(安卓)ApiDemos示例解析(11):App->Activity->Receive Resu
  3. Android(安卓)Binder Mechanism (4) -- 如何使用已注册的系统Ser
  4. Android面面观——Android事件处理下(按键、触摸屏和滚动球的一些
  5. C调用Java
  6. Android(安卓)Audio代码分析=Audio Strategy
  7. Android(安卓)两种启动Service(远程)的方式:Bind 与Start
  8. android使用html+javascript来制作页面
  9. android 的动态事件

随机推荐

  1. Android(安卓)LCD(四):LCD驱动调试篇
  2. Android(安卓)开发中涉及到的设计模式
  3. TextView 加链接所有方法
  4. 《Android学习指南》目录
  5. 【Google认证】STS:Android(安卓)Security
  6. Android(安卓)最终image文件的来源
  7. Android 自定义ToneGenerator
  8. Android使edittext弹出的软键盘位于输入
  9. 手动编译源码,打造自己的增量更新。
  10. 去掉WebView中的白色背景