多一分钟学习,早一秒钟提高

VC++、C++、Socket、DirectUI、wxWidgets、Cocos2d-x、CocosCreator、Unity3D、UE4、ThinkPHP
posts - 32, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Android NDK 开发教程四:TwoLibs示例

Posted on 2013-11-24 12:58 虚空骄阳 阅读(923) 评论(1)  编辑 收藏 引用 所属分类: Android
随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代码,运行结果如下:

Feedback

# re: Android NDK 开发教程四:TwoLibs示例  回复  更多评论   

2014-04-14 10:09 by Friv 1
我喜欢比Android的IOS。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理