我对jni是新手,我正在阅读一个教程来实现一个简单的本机方法,但我得到了一个不满意的LinkError。据我所知,我完全按照教程中的步骤进行了操作。请帮帮我.
下面是java包装器代码:
package com.cookbook.jni;
public class SquaredWrapper {
// Declare native method (and make it public to expose it directly)
public static native int squared(int base);
// Provide additional functionality, that "extends" the native method
public static int to4(int base)
{
int sq = squared(base);
return squared(sq);
}
// Load library
static {
System.loadLibrary("squared");
}
}
下面是我的Android.mk文件的样子:
#include "squared.h"
#include <jni.h>
JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
(JNIEnv * je, jclass jc, jint base)
{
return (base*base);
}
下面是我的。h文件的样子:
enter code here/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cookbook_jni_SquaredWrapper */
#ifndef _Included_com_cookbook_jni_SquaredWrapper
#define _Included_com_cookbook_jni_SquaredWrapper
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_cookbook_jni_SquaredWrapper
* Method: squared
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_cookbook_jni_SquaredWrapper_squared
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
你的JNI签名不匹配。在。c文件中,更改:
JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
到
JNIEXPORT jint JNICALL Java_com_cookbook_jni_SquaredWrapper_squared
通常有两种方法可以通过JNI将本机C“粘合”到Java函数上。第一个是您在这里试图做的,即使用一个预先确定的签名,JNI将识别该签名并将其与适当的Java代码相关联。第二种方法是在包含库时将函数指针、签名和Java类名传递到JNI中。
#include "squared.h"
#include <jni.h>
static const char* SquaredWrapper = "com/cookbook/jni/SquaredWrapper";
jint squared(JNIEnv * env, jobject this, jint base) {
return (base*base);
}
// Methods to register for SquaredWrapper
static JNINativeMethod SquareWrapperMethods[] = {
{"squared", "(I)I", squared}
};
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env;
if ( (*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_6) != JNI_OK)
return JNI_ERR;
jclass class = (*env)->FindClass(env, SquaredWrapper);
(*env)->RegisterNatives(env, class, SquaredWrapperMethods, sizeof(SquaredWrapperMethods)/sizeof(SquaredWrapperMethods[0]));
return JNI_VERSION_1_6;
}
void JNI_OnUnload(JavaVM* vm, void* reserved) {
JNIEnv* env;
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)
return;
jclass class = (*env)->FindClass(env, SquaredWrapper);
(*env)->UnregisterNatives(env, class);
return;
}
我需要一些关于我目前正在进行的项目的指导-我正在进行一个与BLE设备s. t.通信的项目。该设备连接到android手机并偶尔传输一些数据。我看了一些关于BLE与android设备通信的讲座,并阅读了一些关于android 4.3蓝牙API的信息,但有些东西我还没有得到 > 如果我希望我的应用程序向后兼容(高达2.3),这可能吗?他们(Google)在支持包中包含新功能吗? 我在哪里可以找到一些使
问题内容: 我正在尝试从Webview中的javascript界面开始一项活动。该示例显示了一个烤面包。我怎么能称呼课程而不是敬酒? 这是html页面。 问题答案: 您必须先在Webview上注册JavaScriptInterface。JavaScriptInterFace可以是一个内部类,如下所示。此类将具有您可以从html页面(通过javaScript)调用的函数,并且可以在该函数内部编写
在Android 5.0中使用JobScheduler 原文链接 : using-the-jobscheduler-api-on-android-lollipop 译文出自 : 开发技术前线 www.devtf.cn 译者 : Mr.Simple 校对者 : Mr.Simple 在这篇文章中,你会学习到在Android 5.0中如何使用JobScheduler API。JobScheduler A
问题内容: 我有一个使用apache旧版Http库(org.apache.http.legacy)的旧android应用。在Android 6上进行更改后,我能够使该应用程序(包括旧版库)保持正常运行。 useLibrary’org.apache.http.legacy ‘。 现在,在Android 9设备上,我在运行时得到以下异常。 阅读Android 9更改文档 ,在AndroidManife
所以我正在开发一个需要能够发送和接收http请求的应用程序,我读到了关于Volley的文章。 我遵循了这个线程中的步骤,考虑了gradle中某些不推荐使用的方法(compile vs Implement),但当我尝试使用volley类创建请求时,它们不会被识别。 任何关于什么可能是向上的和/或什么我应该检查的想法将非常感谢!
我无法在android emulator中使用pdfbox运行pdf文本提取。但是,当作为独立java应用程序运行时,代码运行良好。 使用了PDFBOXv1.8.4,并且使用pdfbox jar适当地设置了构建路径。可能会出什么问题? 我还看到一些帖子建议不要使用pdfbox,因为android库不支持drawables(java.awt.*)。真的是这样吗?我还能希望用pdfbox解析我的简单p