设为首页 收藏本站
查看: 758|回复: 0

[经验分享] windows android studio 编译Jni动态库

[复制链接]

尚未签到

发表于 2017-6-29 12:00:02 | 显示全部楼层 |阅读模式
  项目需要,折腾了半天搞定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.
DSC0000.png 2.创建一个Class 名称为TestA。

DSC0001.png 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.
DSC0002.png 接着在命令行中执行




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 再重复操作。
DSC0003.png

  如果没有出现错误提示信息,会在Jni文件夹下产生头文件 DSC0004.png 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环境需要配置,至今还没有配。
DSC0005.png

  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"
}
DSC0006.png

DSC0007.png

DSC0008.png

  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389313-1-1.html 上篇帖子: Windows Server 2012 NTP时间同步 下篇帖子: Windows系统上Redis的安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表