【发布时间】:2014-08-30 13:25:25
【问题描述】:
我正在 Eclipse 中在 Android 上测试 JNI。
我有一个包含一个活动的简单 Android 项目。在 Eclipse 的项目资源管理器中,我添加了:
-
jni/文件夹 -
Android.mk在jni/文件夹中 -
prng.c在jni/文件夹中
源文件被命名为prng.c,因为它包装了 Crypto++ 的随机数生成器。 Crypto++ 已经针对 ARMv7 进行了交叉编译,所以我有 libcryptopp.so 待命。
当我选择 Project → Build Project 时,库没有构建。我也确认它不是在清理项目后构建的。
Android-PRNG$ find . -iname *.so
Android-PRNG$
问题:为什么 Eclipse不构建共享对象?还需要做什么?
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := prng
LOCAL_SRC_FILES := prng.c
include $(BUILD_SHARED_LIBRARY)
prng.c
目前它基本上是空的,因为我无法让javah 在调用本机方法的 Java 类文件上运行。我希望接下来能解决这个问题。
#include <string.h>
#include <jni.h>
#include <cryptopp/osrandom.h>
static RandomNumberGenerator& GetPRNG()
{
static AutoSeededRandomPool prng;
return prng;
}
【问题讨论】:
-
您可以尝试从命令行运行
ndk-build。我忘记了 Eclipse 在多大程度上支持 NDK。 -
感谢@CommonsWare。如果我需要使用 NDK,那么使用 Eclipse 有什么意义?一旦添加了相关的 Android.mk 和源文件,Eclipse 不是应该管理所有这些事情吗?或者这是我(可能还有很多其他人)的误解?
-
"如果我需要使用 NDK,那么使用 Eclipse 有什么意义?" ——嗯,NDK是不可避免的。尝试
ndk-build是一个诊断步骤,因为您可能会从 Eclipse 内部看不到的输出中学到一些东西。如果您还没有这样做,您也可能需要configure the NDK plugin for Eclipse。就个人而言,我不使用 Eclipse 来构建我的 NDK 代码。我只是建议调查的途径。 -
感谢@CommonsWare。我意识到使用 NDK 可能是不可避免的(使用发行版的交叉编译工具取模)。我想我的意思是,如果我必须自己使用 NDK 来做,那么将它添加到 Eclipse 有什么意义?除了浪费我的周期之外,Eclipse 究竟做了什么:)
-
“就我个人而言,我不使用 Eclipse 来构建我的 NDK 代码” - 这是我第一次,但进展并不顺利。我可能应该停止浪费我的时间并回到命令行。我将再次尝试使用名为
custom_rules.xml的文件(引用自build.xml)。如果这不起作用,则返回命令行...
标签: android eclipse android-ndk adt