【发布时间】:2019-07-05 17:23:25
【问题描述】:
我正在尝试与已连接的 iOS 设备配对并使用 libimobiledevice 和 JNA 获取 UDID。这就是我声明本机函数的方式:
static native int idevice_new(PointerByReference device, Pointer udid);
static native int lockdownd_client_new(Pointer device, PointerByReference client, String label);
static native int idevice_get_udid(Pointer idevice, StringByReference udid);
static native int lockdownd_query_type(Pointer lockdownd_client, StringByReference type);
为了测试,我正在尝试完全按照运行命令 idevicepair pair 所做的事情。
这是我的主要方法:
PointerByReference device = new PointerByReference();
System.out.println("idevice_new error code: " + idevice_new(device, Pointer.NULL));
PointerByReference client = new PointerByReference();
System.out.println("lockdownd_client_new error code: " + lockdownd_client_new(device.getValue(), client, "java"));
StringByReference udid = new StringByReference();
System.out.println("idevice_get_udid error code: " + idevice_get_udid(device.getValue(), udid));
System.out.println("udid: " + udid.getValue());
StringByReference type = new StringByReference();
System.out.println("lockdownd_query_type error code: " + lockdownd_query_type(client.getValue(), type));
System.out.println("lockdownd_query_type: " + type.getValue());
System.out.println("lockdownd_pair error code: " + lockdownd_pair(client.getValue(), Pointer.NULL));
每当我尝试获取任何字符串值时,它都会输出这些奇怪的问号字符:
idevice_new error code: 0
lockdownd_client_new error code: 0
idevice_get_udid error code: 0
udid: ��AZ�
lockdownd_query_type error code: 0
lockdownd_query_type: �HbZ�
lockdownd_pair error code: 0
角色每次都不一样。
如果你看不到它:
【问题讨论】:
-
你为什么用 C 标记这个?
-
@Bwebb 因为 libimobiledevice 是用 C 语言制作的
-
好的,我不确定这有多大意义,但查看你的 java printfs 看起来就像你在打印随机内存。 "udid: " + udid.getValue()" 作为 println arg 传递,但我看不到 udid 值的设置位置。该内存应该分配到哪里?
-
@Bwebb 应该分配在
idevice_get_udid()
标签: java c jna libimobiledevice