Android NDK 开发教程五:TwoLibs示例

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


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

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

second.c 调用这个函数

jint
Java_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代码,运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值