Tag: native

如何通过JNI设置我的Class的“Double”类型变量的值?

如果我只想将值设置为Double类型变量,我可能会像: public static native int getDoubleVar(Double dobj); JNIEXPORT jint JNICALL test_jni_Native_testGet(JNIEnv *env, jclass type, jobject dobj) { jclass DoubleClass = env->FindClass(“java/lang/Double”); jfieldID valueID = env->GetFieldID(DoubleClass, “value”, “D”); env->SetDoubleField(dobj, valueID, 2.3); return 0; } 这些代码有效。 但是,当我试图通过JNI设置一个类的“Double”变量的值时,我无法得到我想要的东西,当然,它崩溃了,这让我有点困惑。 Java代码: public class TestDouble { public Double value; public long num; public TestDouble(long num, Double value) { this.num = num; […]

如何在java中加载和使用本机库?

我有一个java类,调用本机方法并尝试加载库: import java.io.UnsupportedEncodingException; public class Main { public static native String getMyString(String s); /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { // TODO Auto-generated method stub // System.out.println(“here!”); String s2 = getMyString(“string text”); for (Byte b : s2.getBytes(“UTF-8”)) { System.out.print(b); System.out.print(“,”); } } static { System.loadLibrary(“mylib.so”); } […]

Android JNI原生C函数调用杀死活动

什么有效:我有一个运行TUN / TAP服务的ac可执行文件,以及两个在终端运行正常的shell脚本(用于配置“ip route”和“iptables”),都以root身份运行。 什么行不通:我试图创建一个Android应用程序来按下按钮后运行c可执行文件和shell脚本。 我最初做的就是onClick会用processBuilder创建一个进程,如下所示: final Button button1 = … … public void onClick(View v) { String ip_address = edIPAddress.getText().toString(); Process process; try { process = new ProcessBuilder() .command(“/system/bin/su”, “-c”, “/data/tuntapserv/armeabi/mytunserv ” + ip_address) .redirectErrorStream(true) .start(); InputStream in = process.getInputStream(); OutputStream out = process.getOutputStream(); pOutput.append(“TUN/TAP IS CONFIGURED!\n”); } catch (Exception e) { // TODO […]

JNI – UnsatisfiedLinkError – loadLibrary总是失败

我试图让一个简单的JNI示例工作,但无论我做什么,我都无法使用loadLibrary命令使其工作。 如果我指定.so文件的绝对路径并使用System.load而不是System.loadLibrary,它将完美地工作。 这是我的目录树: . |– – |– TranslatorWrapper.c |– TranslatorWrapper.class |– TranslatorWrapper.cpp |– TranslatorWrapper.h |– TranslatorWrapper.java `– libTranslatorWrapper.so 这是Java代码: public class TranslatorWrapper { public native String translate(byte[] bytes); public static void main(String[] args) { TranslatorWrapper w = new TranslatorWrapper(); System.out.println(“From JNI: ” + w.translate(null)); } static { System.out.println(“Attempting to load library from ” + System.getProperty(“java.library.path”)); […]

是否可以让GC管理本机对象的生命周期?

凭借C ++和C#经验以及一些小知识,我现在正在开始一个Java + JNI(C ++)项目(Android,如果这很重要)。 我有一个本机方法,它创建一些C ++类并返回一个指向它的指针作为Java long值(比如句柄)。 然后使用Java代码调用其他本机方法,使用句柄作为参数在此类上执行一些本机操作。 C ++方面不拥有该对象,它是Java方面的人。 但是在当前的架构设计中,很难定义谁拥有对象以及何时删除它。 因此,使Java VM垃圾收集器以某种方式管理对象的生命周期可能会很好。 C ++类不消耗任何资源,除了一些内存,不是很大。 所以没关系,如果几个这样的对象不会被破坏。 在C#中,我可能会在一些托管包装类中包装本机IntPtr句柄。 并且当托管包装器被垃圾收集时,覆盖它的终结器来调用本机对象的析构函数。 SafeHandle,AddMemoryPressure等也可能对此有所帮助。 这是与Java最终确定的不同的故事。 你在Java中的’Hello world’之后知道的第二件事是使用finalize是不好的。 有没有其他方法可以在Java中实现这一目标? 也许使用PhantomReference?

JVM上的所有“Magic”方法都标记为Native吗?

“魔术”是指具有不用纯Java表达的语义的方法。 我知道所有native方法都很神奇,因为它们的实现是由底层运行时提供的,而不是由Java字节码提供的。 反之亦然吗? 所有魔法方法都是native ,还是有一些神奇的方法显然是用纯Java实现的,但是有一些JVM特殊shell的额外帮助? 用例是我想通过检测其字节码来修改Java的语义。 所有这些神奇的方法都是特殊情况,我将不得不以某种方式处理。 native的都很明显,但我想知道是否有任何无标记的魔术方法我需要注意和特殊情况。

一次执行多个本机查询

我想知道是否可以在Hibernate(3.2)中使用一个SQLQuery#executeUpdate()调用执行几个以分号分隔的SQL更新查询。 我有包含多个更新的字符串,如下所示: String statements = “UPDATE Foo SET bar=1*30.00 WHERE baz=1; UPDATE Foo SET bar=2*45.50 WHERE baz=2;…”; 我正在尝试做 Query query = session.createSQLQuery(statements); query.executeUpdate(); 但不断收到以下错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘UPDATE Foo SET bar=Y WHERE […]

Android信号11(SIGSEGV),代码1(SEGV_MAPERR)libwebviewchromium.so

我在android 4.4中多次出现“/system/lib/libwebviewchromium.so中的本机崩溃”错误以下是设备包括: – Xperia Z1(SO-01F)16 30.2%Galaxy Tab4 7.0(脱气)6 11.3%Galaxy S4(ja3g)4 7.5%Galaxy S3 Neo(s3ve3g)3 5.7%Galaxy Note4(trltetmo)2 3.8%Galaxy J1 Ace(j1pop3g) 2 3.8%荣耀畅玩4C(hwCHM-H)2 3.8%Droid Ultra(obake)2 3.8%A3-A30(ω)2 3.8%P7(hwp7)2 3.8%Galaxy S4(jfvelte)1 1.9%Galaxy J1 Ace (j1acelte)1 1.9%Mate 7(hwmt7)1 1.9%Galaxy J1(j13g)1 1.9%Galaxy S5(klteatt)1 1.9%Galaxy Note2(tllteatt)1 1.9%RAZR M(smq)1 1.9%Galaxy E7(e7ltehktw )1 1.9%Galaxy Tab3 7.0(lt02ltespr)1 1.9%LG Optimus G Pro(geefhd4g)1 1.9%其他2 3.8% backtrace: #00 pc […]

在Java中使用native

有人可以解释在Java中使用native关键字的原因和原因吗?

使用C中的JNI从对象获取对象

public class Student { private People people; private Result result; private int amount; } 以下是Java中类的示例; 在C中,我试图让“学生”中的“人”,但我失败了。 但是,我可以从“学生”获得int类型“金额”。 jobject getObjectFromObject(JNIEnv *env, jobject obj, const char * fieldName) { jfieldID fid; /* store the field ID */ jobject i; /* Get a reference to obj’s class */ jclass cls = (*env)->GetObjectClass(env, obj); /* Look for the instance […]