用Android Studio通过Java代码调用C代码的JNI流程
2015-12-30 19:41
811 查看
1。创建本地方法 helloFromC( ),配置好NDK。点build AS会自动弹出
[code]public class MainActivity extends AppCompatActivity { static { System.loadLibrary("hello"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public native String helloFromC(); public void click(View view) { String s = helloFromC(); Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); } }
2. 自动生成jni头文件
[code] JDK1.7:在src\main\java目录下执行javah 包名.类名 1.6:在bin/classes目录下执行
3. 在main下创建文件夹JNI,复制jni.h文件,创建需要用C编写的hello.c文件,函数名拷贝上面自动生成的。
[code]#include "jni.h" jstring Java_com_itheima_hellojni_MainActivity_helloFromC(JNIEnv* env,jobject obj){ char* str = "hello from c !!"; //在jni规范里面 在jni环境的结构体里面 //jstring (*NewStringUTF)(JNIEnv*, const char*); //转化成了java的字符串 return (*(*env)).NewStringUTF(env,str); }
4. 配置Android.mk文件
[code] //指定编译的文件夹 指定当前文件目录 LOCAL_PATH := $(call my-dir) //编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。 include $(CLEAR_VARS) //编译出来模块的名称,等下自动生成SO库的文件名 LOCAL_MODULE :=hhhh LOCAL_SRC_FILES := hello.c //C写的代码文件名 include $(BUILD_SHARED_LIBRARY)
5. 如果需要x86 mips CPU类型支持的话
[code] //ABI:指应用基于哪种指令集来进行编译,ABI总共有四种,分别是armeabi、 //armeabi-v7a、mips、x86,它们都是表示cpu的类型
[b]在jni目录下创建Application.mk文件。输入下面[/b]
[code] APP_ABI := armeabi armeabi-v7a x86 mips
6. 需在gradle.properties末尾添加
[code] android.useDeprecatedNdk=true
7. 生成动态.SO库文件
[code]**在JNI目录下执行DOS命令:ndk-build.cmd 或ndk-build**
8. 在主类中,把动态链接库加载到jvm虚拟机
[code] static{ System.loadLibrary("库文件名称不带前缀,后缀名"); }
9。最重要一步:如果出现下面错误
[code]java.lang.UnsatisfiedLinkError: Couldn't load hell0: findLibrary returned null
.在根目录的build.gradle文件里添加
[code]defaultConfig { versionCode 1 versionName "1.0" ndk{ moduleName "hhhh" //必须加上,否则在AS中就报错。 // ldLibs "log","z","m" 可以不写,在C代码打印Log //这个和上面添加多CPU类型一样,可以不写 // abiFilters "armeabi","armeabi-v7a","x86","mips" } }
相关文章推荐
- Android中开启进程的方法
- Android 自定义布局—瀑布流
- 学习Android从0开始之开发工具篇-Android studio详解
- Android Studio很实用的调试技巧
- Android动画
- material design学习之杂记
- Android快速入门(2016版一步步图文讲解教程),电梯直达
- Android开发中那些相见恨晚的方法、类、接口、工具
- android 取消listview的默认滑动到顶的效果
- Android Studio快捷键用法
- 2015年十大热门Android开源新项目
- Android 中的Handler机制的深入探究
- ANDROID内存优化(大汇总——上)
- android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)
- ANDROID内存优化(大汇总——中)
- ANDROID内存优化(大汇总——全)
- Android常用工具类
- 如何扫描出Android系统媒体库中视频文件
- Android动画(一)
- Android中Menu的基本用法