windows android studio 编译Jni动态库
项目需要,折腾了半天搞定windows android studio环境编译Jni动态库,现记录下来。
准备安装环境:
1. android studio 下载地址是http://www.android-studio.org/index.php/component/content/category/88-download,我用的版本是1.5.1
2.android ndk 下载地址:http://wear.techbrood.com/tools/sdk/ndk/ 我用的版本是android-ndk-r10d. ndk 不用安装,可放在任意目录,后面会有
地方指向这个目录。
3.cygwin 下载地址https://www.cygwin.com/,我用的版本是64位的,cygwin安装不在本博客范围。
安装好环境后开始一个简单的Demo
1.新建一个project,选择Empty Activity.
2.创建一个Class 名称为TestA。
TestA创建好以后添加如下代码:
public class TestA {
static{
System.loadLibrary("test");
}
public native int testAdd(int a, int b);
}
3. 执行编译操作:
编译通过后将在app\build\intermediates\classes\debug\cn\net\shuihan\myapplication目录下产生文件TestA.class
4.产生Jni头文件:
通过Alt +F12打开terminal窗口,在命令行输入cd app/src/main.
接着在命令行中执行
javah -d jni -classpath C:\Users\Justin\AppData\Local\Android\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\debug cn.net.shuihan.myapplication.TestA
如果出现以下错误 class MainActivity extends AppCompatActivity 替换成 class MainActivity extends Activity 再重复操作。

如果没有出现错误提示信息,会在Jni文件夹下产生头文件
5. 添加源文件.c或者cpp都可以,文件名称自定义没有限制,将产生的头文件包含进去,并实现头文件内的接口方法。源文件中的代码如下:
#include "cn_net_shuihan_myapplication_TestA.h"
JNIEXPORT jint JNICALL Java_cn_net_shuihan_myapplication_TestA_testAdd
(JNIEnv *para1, jobject para2, jint a, jint b)
{
return a + b;
}
6.编译文件:执行编译操作,会发下编译不通过,有以下错误提示。ndk环境需要配置,至今还没有配。

7.配置ndk:在gradle.properties中添加 android.useDeprecatedNdk=true,local.properties中添加
ndk.dir=D\:\\wgg\\ffmpeg-project\\android-ndk-r10d,module:app下面的 build.gradle中添加
ndk {
moduleName "test"
ldLibs "log", "z", "m"
abiFilters "armeabi"
}



8.生成动态库:重新编译程序,出现以下错误,这是windows android studio的一个bug,任意添加一个空.c文件,再次编译就没有问题了。输出的so文件在app\build\intermediates\ndk\debug\lib\armeabi目录下,名称为libtest.so。
如果按照方法编译不成功 可以加入QQ群127903734进行交流。
make.exe: *** No rule to make target `D:\wgg\ffmpeg-project\android-ndk\MyApplication2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/zuozuoutil/D_\wgg\ffmpeg-project\android-ndk\MyApplication2\app\src\main\jni', needed by `D:\wgg\ffmpeg-project\android-ndk\MyApplication2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/zuozuoutil/D_\wgg\ffmpeg-project\android-ndk\MyApplication2\app\src\main\jni\cn_net_shuihan_myapplication_TestA.o'. Stop. FAILED FAILURE: Build failed with an exception. * What went wrong:
Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\wgg\ffmpeg-project\android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 2 * Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED
windows android studio 编译Jni动态库的更多相关文章
- Windows、Linux、Mac OSX编译jni动态库
在不同平台下默认调用不同名字的动态库,在Windows平台调用name.dll,在Linux平台调用libname.so,在OSX下调用libname.jnilib.不同平台下的编译的方法也有些区别. ...
- Android Studio NDK JNI动态注册本地方法
概述 可能大家觉得javah生成的函数名又臭又长,不太好看.这里可以提供另外一种方法来动态注册c++函数,让其根Java中的native方法关联起来. 实现 这里通过JNIEnv的Resisterna ...
- 使用android ndk编译boost动态库
由于以往我写过不少使用boost库开发的项目,而最近准备移植一些代码到android上(上层界面以及jni层我不管,也没研究过,现在只完成代码的移植编译,具体如何调用,由其它人负责),所以先要解决的就 ...
- 《jdk10》删除javah.exe文件,在Android studio编译jni,使用jdk10生成头文件
今天在用“死丢丢”编译so包的时候,只要一输入"javah -jni..."的命令就会一直提示 'javah'不是内部命令或外部命令,也不是可运行的程序或批处理文件 找了很久才发现 ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. ------------------------------------- ...
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...
- Android导入第三方静态库.a编译成动态库.so
http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...
- Android studio 下JNI编程实例并生成so库
Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...
随机推荐
- Java 专业人士必备的书籍和网站列表
对于 Java™ 语言开发人员来说,信息过量是一个真正的问题.每个新入行的程序员都要面临一个令人畏缩的挑战:要进入的行业是一个具有海量知识的行业.要了解的东西简直 太多了.对于有经验的老手来说,情况只 ...
- MDNavBarView下拉导航菜单(仿美团导航下拉菜单)
说到下拉导航菜单这个东西用得还真不少,细心算一下做开发以来这样的菜单已经写了第三次了,但基本都是不能复用.感觉特累人.不经意看到同事写一个类似的下拉菜单,但他引用了开源库仿大众菜单的库,大致看了一下, ...
- iOS高仿城觅应用客户端项目(开发思路和代码)
这是一款非常完整的一个ios项目,基本实现了我们常用的一些功能了,而且界面设计个人感觉还是挺不错的,是一个不错的学习ios项目,喜欢的朋友可以参考一下吧. 项目展示,由于没有数据,所以所有的cell显 ...
- 深刻理解C#中资源释放
今天我的一个朋友看到我写的那篇<C#中用AJAX验证用户登录>时,给我指出了点小毛病.就是在用户登录时,如果用户登录失败,在下面这段代码中,都会new出来一个User对象,如果连续登录失败 ...
- UI1_UITableViewHomeWork
// // AppDelegate.m // UI1_UITableViewHomeWork // // Created by zhangxueming on 15/7/14. // Copyrigh ...
- 灰度直方算法 C++
#include <string> #include "20140318计算类的面积.cpp" //////////////////////////////////// ...
- C++ Priority Queues(优先队列) and C++ Queues(队列)
C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. empty() 如果优先队列为空,则返回真 pop() 删除第一个元素 push() 加入一个元素 size() 返回优先 ...
- mfc110ud.dll not found
mfc110ud.dll not found while debugging vs2012 MFC application. Possible Solutions: 1) >>>&g ...
- int * const 与 const int * 的区别
type * const 与 const type * 是在C/C++编程中特别容易混淆的两个知识点,现在就以 int * const 和 const int * 为例来简略介绍一下这两者之间的区别. ...
- 字节的高低位知识,Ascii,GB2312,UNICODE等编码的关系与来历
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...