Android NDK开发若干问题

在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容