Android 在jni编译完成后没有出现so文件

Android JNI开发的基本使用,一个Hello World的native方法展示,已经有很多了,比如我网上参考的一个简单的编译JNI 的基础展示

这里放入链接:http://blog.csdn.net/qjay_dev/article/details/51343312(Android JNI/NDK开发之基本姿势<一>

这里遇到了一些问题:

    首先,我不知道是不是我的AS问题,通过AS下载的NDK,有点问题,编译不通过,老是出现错误,没办法我又在官网下载了最新的android-ndk-r14b-windows-x86_64

一直到 AS 的 Rebuild Project 在app的build/intermediates/目录下面始终没有看到预期的ndk文件夹,找不到想要的so文件,很是惆怅,然后开始网上搜该问题的解决办法,各种尝试,

    保证 ndk目录没问题,local.properties文件中ndk.dir=E\:\\android_sdk\\android-ndk-r14

    gradle.properties文件里面设置     android.useDeprecatedNdk=true

 在app的build.gradle里面 设置:
     defaultConfig{
       ...
       ndk{
         moduleName 'jnidemo'//自定义名称
       }
     }
  
   android{
      ....
      sourceSets{
         main{
           jniLibs.srcDir 'src/main/jni_src'//告知jni源码目录
         }
      }
   }

  在生成想要的.h和.c/.cpp文件之后,在jni文件夹下最好生成一个空的.c/.cpp文件,这可能是AS的一个bug,编译之后但是还是没有出现想要的ndk文件so文件,
 
在交叉编译的时候怎么都无法生成so文件,javah生成的头文件没错,c文件也没有错,java文件也没有错
原因:是JNI文件夹路径不对
    1 在执行javah命令时,我进入的是cd app/src/main/java 这样jni文件夹在java文件夹下,作为一个包存在,这样就无法生成so文件
       执行javah的正确姿势:
    2 进入app/src/main目录:cd app/src/main
       执行javah命令:javah

     javah -d jni -classpath ./Java com.chatone.jni.JniDemo

    3, -d jni 头文件生成到jni文件夹(当前在<Project>\app\src\main目录下,所以.h所在的目录为<Project>\app\src\main\jni )
        -classpath ./java 指定去当前路径下java下寻找包名指定的类
    这样再rebuild一下,就会生成so文件了



   

发布了53 篇原创文章 · 获赞 8 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章