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.c
src/main/jni/des/des_util.c
改成
des/des.c
des/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 here
Warning:(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 here
Error:(192, 6) error: conflicting types for 'LoopF'
Information:(174, 9) previous implicit declaration is here
Information:(143, 9) previous implicit declaration is here
Warning:(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 here
Warning:(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 here
Error:(192, 6) error: conflicting types for 'LoopF'
Information:(174, 9) note: previous implicit declaration is here
Error:(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
使用 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 也会包含此文件。
点击 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 也会包含此文件
微信扫一扫关注我的以下微信公众号
【程序猿小白成长记】定期分享各类Java、Android等知识
我的GitHub,麻烦给个star哦
我的CSDN
我的
开发笔记