美文网首页
Android NDK开发若干问题

Android NDK开发若干问题

作者: andev009 | 来源:发表于2018-10-26 11:15 被阅读8次

在Android studio中使用Android.mk方式编译运行,会碰到若干问题,记录下来。
一、Android.mk和c文件写好后的目录如下:


jni.png

这时候编译会出先错误:

Error:Execution failed for task ':app:compileDebugNdk'.
> Error: Your project contains C++ files but it is not using a supported native build system.
  Consider using CMake or ndk-build integration. For more information, go to:
   https://d.android.com/r/studio-ui/add-native-code.html
  Alternatively, you can use the experimental plugin:
   https://developer.android.com/r/tools/experimental-plugin.html

解决方法如下:
1 进入改jni目录,使用ndk-build,命令行下编译出so文件.
2 app的build.gradle文件中的buildTypes节点下添加:

 sourceSets {
            main {
                jni.srcDirs = []
            }
        }

3 有说还需要在工程目录下的gradle.properties文件里添加Android.useDeprecatedNdk=true,不过测试发现可以不用

二、编译成功后,运行会出现错误:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.andev.androidmediademo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.andev.androidmediademo-2/lib/x86, /vendor/lib, /system/lib]]] couldn't find "libJNITest.so"

这是因为打包生成apk文件时,没有把so文件打包进去。解决方法如下:
1 app的build.gradle文件中的android节点下添加:

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

这里的节点和编译时的节点不一样。
2 在app目录下建libs文件夹,将so文件copy过去,目录如下:


so.png

三、Cannot determine signature for Surface或Cannot determine signature for Bitmap错误
当向jni层传递Android的类时,使用javah命令需要加上classpath,
如下:

javah -classpath android-sdks/platforms/android-26/android.jar:. com.andev.androidmediademo.PngPreviewController

相关文章

网友评论

      本文标题:Android NDK开发若干问题

      本文链接:https://www.haomeiwen.com/subject/jtsktqtx.html