android ndk 开发流程以及“Method could not be resolved”的解决办法,代码提示

前提条件:ndk安装(我用的是10e)及环境变量配置,具体操作可参考网上其他教程。

开发流程
1.新建android项目

注意图片中的红色字体

2.添加native方法


public class MainActivity extends Activity {
public static native String getStringFromC();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

3.用javah(属于jdk命令)生成jni目录及头文件(.h文件)

打开cmd,进入工程目录,我的工程目录为:E:\lipeng-bj\android_dev_sf\ws\HWNDK,输入javah -help可查看javah相关的参数,输入命令生成jni目录:javah -classpath bin\classes -d jni -jni com.lp.hwndk.MainActivity,但此时会报错误如下:

错误:无法访问android.app.Activity
找不到android.app.Activity的类文件

解决办法:javah -classpath bin\classes**;<个人SDK目录>\sdk\platforms\android-19\android.jar** -d jni -jni com.lp.hwndk.MainActivity
我的如下:javah -classpath bin\classes;E:\lipeng-bj\android_dev_sf\sdk\platforms\android-19\android.jar -d jni -jni com.lp.hwndk.MainActivity

具体如下图所示:
这里写图片描述

成功后刷新工程,会生成jni目录及.h文件
这里写图片描述

4.编写.c文件
创建一个.c文件,名称自定义,同时将生成的.h文件中的方法:JNIEXPORT jstring JNICALL Java_com_lp_hwndk_MainActivity_getStringFromC
(JNIEnv *, jclass)复制到刚创建的.c文件中,去掉JNIEXPORT 及JNICALL ,如下:
这里写图片描述

关于日志部分需要在Android.mk文件中加入依赖的库,一会下图有指出

5.右击工程,Android Tools->Add Native Support,填入要生成的so文件的名称,会自动生成Android.mk文件,如下图所示,不过我增加了打印日志依赖的库。有一点我需要特别声明:通过Add Native Support 生成的Android.mk文件中的是LOCAL_SRC_FILES:=hellondk.cpp,因为我是在.c文件中写的方法,所以这里也应该改成c文件!!!!!!!
这里写图片描述

6.右击工程,Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project。此时应该不会出现错误,但是当你点击.c文件时会发现竟然报错了,主要是Method could not be resolved 的错误,如下图所示:
这里写图片描述

7.错误问题的解决办法
主要参考了https://stackoverflow.com/questions/23155676/android-ndk-build-method-could-not-be-resolved/23158929#23158929该文章的解决办法。我这里再做一下说明
配置如下图:
这里写图片描述
需要Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project

可发现还是有错误!!!怎么办???,如下图:
这里写图片描述

提示的是gcc找不到》》???,去解决一下。。。

这里写图片描述

需要Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project

应该不报错了!并且有代码提示了。

这里写图片描述

MainActivity类如下进行so调用

public class MainActivity extends Activity {
static{
System.loadLibrary("hellondk");
}
public static native String getStringFromC();
private TextView text1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1 = (TextView) findViewById(R.id.text1);
text1.setText(getStringFromC());
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值