【问题标题】:Build native library in JNI folder?在 JNI 文件夹中构建本机库?
【发布时间】:2014-08-30 13:25:25
【问题描述】:

我正在 Eclipse 中在 Android 上测试 JNI。

我有一个包含一个活动的简单 Android 项目。在 Eclipse 的项目资源管理器中,我添加了:

  • jni/文件夹
  • Android.mkjni/ 文件夹中
  • prng.cjni/ 文件夹中

源文件被命名为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


【解决方案1】:

在过去的几年里,使用 ADT 实际上很容易;以前更糟。链接post 中描述的插件即将预装;你还需要

1 安装 NDK

2 在Preferences/Android/NDK菜单中设置它的路径

3 右键单击​​您的 Android 项目,Android Tools/Add Native Support

...现在一切就绪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2017-01-23
    相关资源
    最近更新 更多