android ndk 开发流程以及“Method could not be resolved”的解决办法,代码提示
2015-07-31 10:00
447 查看
前提条件:ndk安装(我用的是10e)及环境变量配置,具体操作可参考网上其他教程。
开发流程
1.新建android项目
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/d1ea39fbca05bca9efbdc239d3c9cafa)
2.添加native方法
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
具体如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/9a00bd9cd9e214e2d1caabe481d467e0)
成功后刷新工程,会生成jni目录及.h文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/4e3454475df8a50cb5bc5dd02b152272)
4.编写.c文件
创建一个.c文件,名称自定义,同时将生成的.h文件中的方法:JNIEXPORT jstring JNICALL Java_com_lp_hwndk_MainActivity_getStringFromC
(JNIEnv *, jclass)复制到刚创建的.c文件中,去掉JNIEXPORT 及JNICALL ,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/c0f1f8c6b5d3f8ae8b738e9f0512ed46)
关于日志部分需要在Android.mk文件中加入依赖的库,一会下图有指出
5.右击工程,Android Tools->Add Native Support,填入要生成的so文件的名称,会自动生成Android.mk文件,如下图所示,不过我增加了打印日志依赖的库。有一点我需要特别声明:通过Add Native Support 生成的Android.mk文件中的是LOCAL_SRC_FILES:=hellondk.cpp,因为我是在.c文件中写的方法,所以这里也应该改成c文件!!!!!!!
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/1493638422dc77da77667887cc811977)
6.右击工程,Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project。此时应该不会出现错误,但是当你点击.c文件时会发现竟然报错了,主要是Method could not be resolved 的错误,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/d3334aaadc9e07a42ed9a6f76fdd5290)
7.错误问题的解决办法
主要参考了https://stackoverflow.com/questions/23155676/android-ndk-build-method-could-not-be-resolved/23158929#23158929该文章的解决办法。我这里再做一下说明
配置如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/64e9a5747be172c8fca98914d1a9e4a0)
需要Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project
可发现还是有错误!!!怎么办???,如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/2e10310f667dc6e7aa7df8a08e1446da)
提示的是gcc找不到》》???,去解决一下。。。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/570e17e637cc41919e1c53b13d29193b)
需要Clean Project 并且 Build Project 并且 Close Project,最后打开工程项目Open Project
应该不报错了!并且有代码提示了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/12/b22445475408752581a7bc24de6d021b)
MainActivity类如下进行so调用
开发流程
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()); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories