注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之二十四Android Studio的JNI开发及相关的一些细节问题  

2015-06-17 23:05:07|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之二十四Android StudioJNI开发及相关的一些细节问题

 

要写一个JNI的开发程序,需要在As上进行开发,认为很简单的事儿,在网上找了几个小例程,写没有用多长时间,结果调试可费了老鼻子的劲了。到最后,还是在网上发现,说NDKpaltformsSDKpaltforms必须一致,(同时,NDK的版本要保持在NDK9以上,在NDK7以下还要下载CYGWIN才能使用)也就是说,你的build.gradle中的

android { 

    compileSdkVersion 20 

    buildToolsVersion "20.0.0"

。。。。。

要与你的NDK中的版本一致。如果不一致,会报各种各样形形色色的错误。

AndroidStudio中,建立工程的路径最好不要有空格,否则可能有一些问题会产生,这个确实也还没有遇到,但是一定要引起注意,这个坑人是非常隐蔽的。

同时发现,如果使用AndroidStudio开发,会自动生成 .gitignore,并自动在里面把自动生成的和需要环境配置的文件忽略到。好东西。Git用它看来真是不错。

 

下来就是写JNI工程了,照例,和Eclipse中一样,不过这里使用JAVAH要把工程建立到Main文件下:(关于Javah如何使用,看前面的或者网上资料)

E:\FIDOProject\03Code\TestMatcher\app\src\main>javah -d jni -classpath D:\Android\sdk\platforms\android-21\android.jar  ..\..\build\intermediates\classes\debug com.irisking.testmatcher.MatcherContainer

这里多了红色的部分,也就是说指定了生成头文件所使用的JAR包,结果总是报下面的错误:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: ..\..\build\intermediates\classes\debug

        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:129)

        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107)

        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64)

        at com.sun.tools.javah.JavahTask.run(JavahTask.java:503)

        at com.sun.tools.javah.JavahTask.run(JavahTask.java:329)

 

后来一生气,就用在Eclipse中的JAVAH的方法来生成一点点回这到正常的方法里,发现了下面的是可以正常使用的,其中有一些细节需要注意:

E:\FIDOProject\03Code\TestMatcher\app\src\main>javah -d jni -classpath D:\Android\sdk\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.irisking.testmatcher.MatcherContainer

注意:android.jar;后没有空格,否则报上面的错误  debug后面有空格 写类的具体的包名

其实总结过来,还是常错的几点:一个是路径不对,另外一个是类的名字不对,最后是两者混合在一起不对。和Eclipse中的方法一比,就明白了。

生成以后,会因为上面提到的版本不匹配的问题报下面错误:

D:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: error: cannot find -lm

 

Error:Execution failed for task ':app:compileDebugNdk'.

> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Android\android-ndk-r9d\ndk-build.cmd'' finished with non-zero exit value 2

另外一个就是:

:app:compileDebugNdk

In file included from

E:\FIDOProject\03Code\TestMatcher\app\src\main\jni\MatcherBuilder.c:2:0:

E:\FIDOProject\03Code\TestMatcher\app\src\main\jni\/com_irisking_testmatcher_MatcherContainer.h:2:17: fatal error: jni.h: No such file or directory

compilation terminated.

make.exe: *** [E:\FIDOProject\03Code\TestMatcher\app\build\intermediates\ndk\debug\obj/local/armeabi-v7a/objs/IMatcher/E_\FIDOProject\03Code\TestMatcher\app\src\main\jni\MatcherBuilder.o] Error 1

Error:Execution failed for task ':app:compileDebugNdk'.

> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Android\android-ndk-r9d\ndk-build.cmd'' finished with non-zero exit value 2

Information:BUILD FAILED

Information:Total time: 2.588 secs

Information:1 error

Information:0 warnings

Information:See complete output in console

特别是第二类错误,即使直接定位到具体的JNI.H路径去都不行。非常可恶。其实换了NDK10OK了,查看了一下,在NDK10中,最高版本的paltformsandroid21,是目前用的AndroidStudio最低的版本,侥幸,侥幸。

AndroidStudio中,会自动生成Android.mk这个Madkefile文件,不用你手动写,他一般会自动生成在NDK/DEBUG下面。

另外还有一个好处,就是不用象Eclipse中一样在Android工程里建立相应的路径并拷贝SO文件,这么做的话,直接就可以在程序中引用。等下回会介绍第三库SOJARAAR包的引用。在更详细的说明使用方法。这次只是把重点几个关节讲一下。

说得很散碎,大家可能也没有看到具体的开发Jni的过程,其实这里主要是觉得过程在网上有好多。当然以后还会再总结。

最后提供几个Android的下载镜像:

Android SDK在线更新镜像服务器

 

中国科学院开源协会镜像站地址:

 

IPV4/IPV6: http://mirrors.opencas.cn 端口:80

 

IPV4/IPV6: http://mirrors.opencas.org 端口:80

 

IPV4/IPV6: http://mirrors.opencas.ac.cn 端口:80

 

上海GDG镜像服务器地址:

 

http://sdk.gdgshanghai.com 端口:8000

 

北京化工大学镜像服务器地址:

 

IPv4: http://ubuntu.buct.edu.cn/ 端口:80

 

IPv4: http://ubuntu.buct.cn/ 端口:80

 

IPv6: http://ubuntu.buct6.edu.cn/ 端口:80

 

大连东软信息学院镜像服务器地址:

 

http://mirrors.neusoft.edu.cn 端口:80

  评论这张
 
阅读(422)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017