作为一个概念证明,我正在尝试编译并利用this库的强大功能来安装Android应用程序。我正在使用android工作室。到目前为止我所做的是:
将我的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>`
所以我去了这两个图书馆的官方网站并下载了资源,创建了两个相应的文件夹并将所有文件放在那里。在OpenSSL
中有一个h.in文件 - 我理解的配置。我能够从here获得一个配置的(也可能是我犯错误的地方)
APP_ABI:= armeabi armeabi-v7a x86
,以排除我不支持的一些体系结构。此时,我遇到了一些问题 - 其中一个问题是我实际上无法使用NDK-build构建我的JNI内容 - 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
? 一旦我修复了库构建就足以生成我的c文件的java接口并开始使用它们还是需要考虑其他步骤?
如果您需要,请随时询问任何其他详细信息,请提前感谢 免责声明:我是一个.NET开发者,所以请在适用的地方更具体地说明android / C的内容 免责声明2:此计划是出于教育目的而作为概念证明。
答案 0 :(得分:1)
看起来cpu_set_t
直到android-21才进入NDK标题。
NDK r14(未发布,但应该在下周发布)已完全重做标题,以便您可以访问结构定义和常量(无论您是否需要在Android-21之前使用的API)是一个不同的问题)。要使用它们,请抓住r14 beta并按照unified headers的说明进行操作。
答案 1 :(得分:0)
尝试在包含<sched.h>
#define _GNU_SOURCE
如果它不起作用,只需在cpu-miner.c
文件中添加以下结构:
#define CPU_SETSIZE 1024
#define __NCPUBITS (8 * sizeof (unsigned long))
typedef struct
{
unsigned long __bits[CPU_SETSIZE / __NCPUBITS];
} cpu_set_t;