MAC ANDROID NDK 初体验

在android中使用到动态库,以:mylib.so为例子

1、新建一个android项目;

2、在项目中新建jni目录;
   里面添加C/C++代码和Android.mk,Android.mk(即C/C++项目的总的Makefile)的内容是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := mylib.c

include $(BUILD_SHARED_LIBRARY)

    C代码内容:

#include <string.h>
#include <jni.h>

JNIEXPORT jint JNICALL Java_com_example_projectName_className_plus(JNIEnv* env, jobject thiz, jint x, jint y) {
    return x + y;
}


3、在项目中新建文件 Application.mk;

APP_PROJECT_PATH := $(call my-dir) 
APP_MODULES      := mylib 

4、到<project>目录中,执行:ndk-build;

5、在android的项目java文件中使用;

6、注意可能出现的问题:
   6.1 * No rule to make target '/', needed by 
       该问题是 android.mk格式 不正确,如果是从网上拷贝的内容,则用NDK中samples中的例子中的android.mk替换,然后修改即可;
   6.2 执行中,无法正确调用函数的问题;
       比如:
package com.example.projectname;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
	public native int plus(int x, int y);
	static {
	       System.loadLibrary("mylib");
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		int x = plus(3, 2);
		System.out.println(x);
	}
}
    那么,在C中改方法名称组成就是:Java_com_example_projectname_MainActivity_plus(JNIEnv* env, jobject thiz, jint x, jint y)
其中plus前面的部分组成方式是:Java_包名称(.用_代替)_类名称_函数名,且函数名中不要用'_',否则会报出运行时错误:找不到这个方法的实现,且前2个参数: JNIEnv* env, jobject thiz,是必须的!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值