作为一个概念证明,我试图编译和利用Android应用程序的this库的强大功能。我正在使用android studio。我到目前为止已经做的是:为Android编译C库
- 安装NDK和SDK(我想针对Android版本4.0.3及以上,如果可能的话)
- 创建Android Studio中的Android项目
- 创建的在
- JNI文件夹存储在库中的所有内容在我的JNI文件夹
链接我的build.gradle到存在于源Android.MK文件
externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } }
个
,以避免试图使为架构构建不受库支持设置ProductFlavors(我可能是错在这里已经)
productFlavors { dev { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } develx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } production { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } productionx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } }
在这一点上,我注意到,一些如CPU-miner.c文件丢失一些包括突出为缺失,特别是
#include <curl/curl.h> #include <openssl/sha.h>`
所以我去了这两个库的官方网站,并下载了SOU创建两个相应的文件夹并将所有文件放在那里。在OpenSSL
有一个h.in文件 - 一个配置,据我所知。我可以从here(也可能是我犯了一个错误的地方)获得配置的一个
- 我已将Application.mk添加到带有以下内容的JNI文件夹根
APP_ABI:= armeabi armeabi-v7a x86
来排除一些我不支持的体系结构。
在这一点上,我有一些问题 - 其中之一是,我无法真正建立我的JNI的东西用NDK编译 - sched.h
没有得到解决(哪怕我增加API版本20) 。这导致类似的错误:
JNI/cpu-miner.c:473:2: error: use of undeclared identifier 'cpu_set_t'
cpu_set_t set;
jni/cpu-miner.c:474:12: error: use of undeclared identifier 'set'
CPU_ZERO(&set);
所以问题是:
- 我如何可以强制构建解决
sched.h
? - 我的方法是正确的下载和添加缺少库的来源或有其他选择 - 我假设有一个确实是因为它们没有包含在库源代码中?如果是这样 - 请提供说明如何使用NDK做到这一点(或者我用它做什么并不重要?)
只要我修复了库构建,就可以生成java接口我的C文件,并开始使用它们或有其他步骤要考虑?
如果您需要任何其他细节,请随时提出,谢谢您提前。
声明:我是一个.NET开发人员,所以请在适用的情况下更详细地介绍有关android/C的东西。
免责声明2:此程序是为教育目的作为概念验证。
的包括模样的工作。它所键入的问题没有定义。如果你看看https://android.googlesource.com/platform/development/+/73a5a3b/ndk/platforms/android-20/include/sched.h - 有有趣的宏观后卫'_GNU_SOURCE' – j2ko
其实我有这个在cpu-miner.c – HardLuck
开头的'#define _GNU_SOURCE'只是说这个问题可能与NDK上下文中'_GNU_SOURCE'宏的含义有某种关系。 – j2ko