Jni/NDK常见问题
来源:互联网 发布:微信二级分销系统源码 编辑:程序博客网 时间:2024/06/05 13:27
1.没有配置Android.mk或者CMakeLists.txt
Error:Execution failed for task ':app:compileDebugNdk'.> com.android.ide.common.process.ProcessException: Error while executing process C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=E:\csy\GitDev\jni\jni-encrypt\EncryptUtils\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-23 NDK_OUT=E:\csy\GitDev\jni\jni-encrypt\EncryptUtils\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=E:\csy\GitDev\jni\jni-encrypt\EncryptUtils\app\build\intermediates\ndk\debug\lib APP_ABI=mips64,x86_64,x86,armeabi-v7a,armeabi,mips,arm64-v8a}
2. executing external native build for cmake
Error:A problem occurred configuring project ':app'.> executing external native build for cmake E:\csy\GitDev\jni\jni-encrypt\EncryptUtils\app\src\main\jni\CMakeLists.txt
把
src/main/jni/des/des.csrc/main/jni/des/des_util.c
改成
des/des.cdes/des_util.c
参照:http://www.voidcn.com/article/p-bewlnjij-sn.html
3.Error:(167, 6) error: conflicting types for 'arrayCryption'
没有引入头文件
Error:(167, 6) error: conflicting types for 'arrayCryption'Information:(164, 5) previous implicit declaration is hereWarning:(174, 9) warning: implicit declaration of function 'LoopF' is invalid in C99 [-Wimplicit-function-declaration]Warning:(179, 5) warning: implicit declaration of function 'Bit64ToByte' is invalid in C99 [-Wimplicit-function-declaration]Error:(182, 6) error: conflicting types for 'Bit64ToByte'Information:(179, 5) previous implicit declaration is hereError:(192, 6) error: conflicting types for 'LoopF'Information:(174, 9) previous implicit declaration is hereInformation:(143, 9) previous implicit declaration is hereWarning:(143, 9) warning: implicit declaration of function 'leftMoveKey' is invalid in C99 [-Wimplicit-function-declaration]Warning:(164, 5) warning: implicit declaration of function 'arrayCryption' is invalid in C99 [-Wimplicit-function-declaration]Error:(167, 6) error: conflicting types for 'arrayCryption'Information:(164, 5) note: previous implicit declaration is hereWarning:(174, 9) warning: implicit declaration of function 'LoopF' is invalid in C99 [-Wimplicit-function-declaration]Warning:(179, 5) warning: implicit declaration of function 'Bit64ToByte' is invalid in C99 [-Wimplicit-function-declaration]Error:(182, 6) error: conflicting types for 'Bit64ToByte'Information:(179, 5) note: previous implicit declaration is hereError:(192, 6) error: conflicting types for 'LoopF'Information:(174, 9) note: previous implicit declaration is hereError:(223, 6) error: conflicting types for 'leftMoveKey'Information:(143, 9) note: previous implicit declaration is here
add_library( # Sets the name of the library. encrypt # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). des/des.c des/des_util.c des/com_jinlin_encryptutils_des_DES.h des/des )
如上新增des/com_jinlin_encryptutils_des_DES.h
或者未在头文件中声明方法
4.如何引入其它C文件,把其它C文件的方法在相应的头文件声明,然后引入相关的头文件即可
5.给jni方法指定Android.mk或者CMakeLists.txt
参照官方文档:https://developer.android.com/studio/projects/add-native-code.html
将 Gradle 关联到您的原生库
要将 Gradle 关联到您的原生库,您需要提供一个指向 CMake 或 ndk-build 脚本文件的路径。在您构建应用时,Gradle 会以依赖项的形式运行 CMake 或 ndk-build,并将共享的库打包到您的 APK 中。Gradle 还使用构建脚本来了解要将哪些文件添加到您的 Android Studio 项目中,以便您可以从 Project 窗口访问这些文件。如果您的原生源文件没有构建脚本,则需要先创建 CMake 构建脚本,然后再继续。
将 Gradle 关联到原生项目后,Android Studio 会更新 Project 窗格以在 cpp 组中显示您的源文件和原生库,在 External Build Files 组中显示您的外部构建脚本。
注:更改 Gradle 配置时,请确保通过点击工具栏中的 Sync Project 应用更改。此外,如果在将 CMake 或 ndk-build 脚本文件关联到 Gradle 后再对其进行更改,您应当从菜单栏中选择 Build > Refresh Linked C++ Projects,将 Android Studio 与您的更改同步。
使用 Android Studio UI
您可以使用 Android Studio UI 将 Gradle 关联到外部 CMake 或 ndk-build 项目:
从 IDE 左侧打开 Project 窗格并选择 Android 视图。
右键点击您想要关联到原生库的模块(例如 app 模块),并从菜单中选择 Link C++ Project with Gradle。您应看到一个如图 4 所示的对话框。
从下拉菜单中,选择 CMake 或 ndk-build。如果您选择 CMake,请使用 Project Path 旁的字段为您的外部 CMake 项目指定 CMakeLists.txt
脚本文件。
如果您选择 ndk-build,请使用 Project Path 旁的字段为您的外部 ndk-build 项目指定 Android.mk
脚本文件。如果 Application.mk
文件与您的 Android.mk
文件位于相同目录下,Android Studio 也会包含此文件。
图 4. 使用 Android Studio 对话框关联外部 C++ 项目。
点击 OK。
手动配置 Gradle
要手动配置 Gradle 以关联到您的原生库,您需要将 externalNativeBuild {}
块添加到模块级 build.gradle
文件中,并使用 cmake {}
或 ndkBuild {}
对其进行配置:
android { … defaultConfig {…} buildTypes {…} // Encapsulates your external native build configurations. externalNativeBuild { // Encapsulates your CMake build configurations. cmake { // Provides a relative path to your CMake build script. path “CMakeLists.txt” } }}
注:如果您想要将 Gradle 关联到现有 ndk-build 项目,请使用 ndkBuild {}
块而不是 cmake {}
,并提供 Android.mk
文件的相对路径。如果 Application.mk
文件与您的 Android.mk
文件位于相同目录下,Gradle 也会包含此文件
博客CSDN
微信公众号
我的简书
我的GitHub,麻喜欢的话给个star吧
- Jni/NDK常见问题
- Android之JNI NDK开发的常见问题
- NDK配置+第一个JNI实例+ndk-build常见问题
- ndk-build配置、Android Studio jni的配置以及jni常见问题的解决
- JNI&NDK
- NDK jni
- JNI & NDK
- NDK,JNI
- NDK-JNI
- ndk jni
- jni+ndk
- JNI/NDK
- JNI NDK
- NDK+JNI
- android(NDK+JNI)---JNI数据类型
- NDK使用中常见问题
- android NDK中的常见问题
- ndk编译常见问题
- SVN Working copy locked Please execute the 'Cleanup' command.
- 集合-hashCode
- .h头文件和.a静态库文件问题记录
- Vue数组检测
- java元组
- Jni/NDK常见问题
- 构造函数与析构函数
- 机器学习深入与强化--数学基础(2)
- 纪念第一次深度学习跑通
- hive简介——java连接和数据管理的方式
- css常用标签英文全称
- vijos1059-背包计数-积木城堡
- 算法提高 ADV-162 题目1 最大最小值
- 实验一:线性表的基本操作实现及其应用(C++)