AndroidStudio NDK入门小结

在Android Studio进行NDK开发,有两种方式:
1 使用已经编译好的.so动态库;
2 使用c/c++源代码开发。

1.1 使用预编译好的.so动态库

用ndk-build工具先编译好.so,然后在Android Studio中引用。
.so存放的路径:
【module name】\src\main\jnilibs\armeabi

如果不想把.so放在上面默认路径,可以在buid.gradle中进行如下配置:

android { // .. android settings .. sourceSets.main { jniLibs.srcDir '' // <-- 你的.so库的实际路径 } } }
1.2 编译C/C++源代码

1.2.1 需要配置NDK的路径;
打开module设置中,设置NDK的路径。

也可以在文件中local.properties中直接设置:
ndk.dir=E:\jni\android-ndk-r10

1.2.2 Gradle配置NDK模块
Build.gradle中配置:

android {
    defaultConfig {
        ndk{
            moduleName "two"			//生成的so名字
            ldLibs "log", "z", "m"	//添加依赖库文件,因为有log打印等
            abiFilters "armeabi", "armeabi-v7a", "x86"	//输出指定abi体系结构下的so库
        }
    }
}

当然可以配置更多选项,如下:
ndk {
moduleName “myEpicGameCode”
// Define some macros
cFlags “-DANDROID_NDK -D_DEBUG DNULL=0”
// Link with these libraries
ldLibs “EGL”, “GLESv3”, “dl”, “log”
// Use shared stlport library
stl “stlport_shared” }
}

1.2.3 添加C/C++源代码
默认情况下,你需要把C/C++源代码放在[module]/src/main/jni/路径下。

1.2.4.分平台配置编译(可选)
Build.gradle中配置:
android {
// … android settings …
productFlavors {
x86 {
ndk {
abiFilter “x86”
}
}
arm {
ndk {
abiFilter “armeabi-v7a”
}
}
mips {
ndk {
abiFilter “mips”
}
}
}
} // android

1.2.5 错误汇总
报错1:
make.exe: *** No rule to make target
解决方案;
在Windows下NDK一个bug,当仅仅编译一个文件时出现会出现此问题,解决方法就是再往jni文件夹加入一个空util.c文件即可
参考:http://blog.csdn.net/sodino/article/details/41946607

报错2:
java.lang.UnsatisfiedLinkError: Couldn’t load from loader dalvik.system.PathClassLoader
解决方案;
在libs文件夹下,新建armeabi-v7a,然后将armeabi下的那些.so文件拷贝过去就行了
参考:http://www.cnblogs.com/freexiaoyu/p/4046431.html
其他方案:http://blog.csdn.net/hj563308597/article/details/50395469(没有验证)

源码:https://github.com/linghufeixia/TestNdK

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值