Android NDK 构建 以及一些错误
2015-08-14 12:35
543 查看
首先下载NDK 然后在最外层的
local.properties文件夹中 写上 ndk的路径
1.新建工程myapp
2.在MainActivity中写好
public static native String stringFromJNI();
View Code
4.生成 so文件
终端在jni的上一级目录中 执行 ndk-build (ndk-build所在路径中的文件夹不得存在空格否则就报错了)
5.使用 so文件
在main中建立 jniLibs文件夹 然后把 armeabi/*.so 拷贝进去 然后就可以访问了。
或者不新建jniLibs文件夹,那么在build.gradle中
jniLibs.srcDirs = ['xxx'] //这里xxx代表一个目录。可以改变jniLibs的读取路径 , 默认的 jniLibs结构是 src/main/jniLibs
指定xxx是libs就可以了armeabi不需要在路径中指定,它是不同设备下的自动会被寻找的。
6.在MainActivity中 写上
7.运行程序就可以 stringFromJNI 就可以看出结果了
额外说明:
.c文件中的函数为
类的结构 是 com.example.wyj.myapplication 文件包结构的 MainActivity类 下面的 stringFromJNI 函数才能被识别并使用
放入其它工程如果不是遵从这个结构的 会报错,函数找不到,当然*.so可以加载。
如果其他工程是遵守如下结构的当然也能识别出stringFromJNI函数并使用
local.properties文件夹中 写上 ndk的路径
ndk.dir=/Users/wyj/Desktop/androidStudioSdk/android-ndk-r10d
1.新建工程myapp
2.在MainActivity中写好
public static native String stringFromJNI();
#include <stdio.h> #include <string.h> #include "com_example_wyj_myapplication_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_wyj_myapplication_MainActivity_stringFromJNI (JNIEnv *env, jclass jclass){ return (*env)->NewStringUTF(env, "Hello from wf! "); }
View Code
4.生成 so文件
终端在jni的上一级目录中 执行 ndk-build (ndk-build所在路径中的文件夹不得存在空格否则就报错了)
5.使用 so文件
在main中建立 jniLibs文件夹 然后把 armeabi/*.so 拷贝进去 然后就可以访问了。
或者不新建jniLibs文件夹,那么在build.gradle中
android { sourceSets { main { jniLibs.srcDirs = ['xxx'] } } }
jniLibs.srcDirs = ['xxx'] //这里xxx代表一个目录。可以改变jniLibs的读取路径 , 默认的 jniLibs结构是 src/main/jniLibs
指定xxx是libs就可以了armeabi不需要在路径中指定,它是不同设备下的自动会被寻找的。
6.在MainActivity中 写上
public static native String stringFromJNI(); static { System.loadLibrary("hello"); //装载库文件 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String str=stringFromJNI(); //可被使用 System.out.print(str); }
7.运行程序就可以 stringFromJNI 就可以看出结果了
额外说明:
.c文件中的函数为
1 JNIEXPORT jstring JNICALL Java_com_example_wyj_myapplication_MainActivity_stringFromJNI
类的结构 是 com.example.wyj.myapplication 文件包结构的 MainActivity类 下面的 stringFromJNI 函数才能被识别并使用
放入其它工程如果不是遵从这个结构的 会报错,函数找不到,当然*.so可以加载。
如果其他工程是遵守如下结构的当然也能识别出stringFromJNI函数并使用
相关文章推荐
- Android内核编译步骤
- Android中ListView错位布局实现(无聊向)
- Android ViewPager再探:增加滑动指示条
- Android ViewPager初探:让页面滑动起来
- 【转】在Android布局中使用include和merge标签
- Android Fragment初探:静态Fragment组成Activity
- Android Studio中使用android:src=&quot;@drawable/ic_launcher&quot;报错
- Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)
- 【转】Android编程判断手机or平板
- Android中手机号、车牌号正则表达式
- Android分步注册,Activity由B返回A修改再前往B,B中已填项不变
- Android Hook神器——XPosed入门(登陆劫持演示)
- Android后台消息推送-android学习之旅(71)
- Android后台消息推送-android学习之旅(71)
- Android后台消息推送-android学习之旅(71)
- Android后台消息推送-android学习之旅(71)
- Android手机开发总结——Android核心分析
- 从android相册获取所有图片的路径
- Android BaseAdapter 更新数据 notifyDataSetInvalidated() notifyDataSetChanged()
- android二级listview列表