我在 StackOverflow 上搜索并发现了几个相关问题,但没有一个能回答我的直接问题。
我想通过 Android 应用程序在特定 Android 设备上打开串口。
该设备包含一个原始的 apk,具有一些串口功能。
我对 apk 进行了逆向工程,在设备上的 system/lib64 文件夹中找到了正确的 .so 文件,这样我就知道旧应用程序如何使用这个项目。
我所知道的:
我没有在库的 jni 设置中使用的原始 .c 文件和 .h 文件。
我没有串行设备或原始设备的任何文档,因为制造商没有提供此文档,因此构建新的本机库可能很困难。
逆向工程的 liboldnativelibrary.so 文件方法是这样的:(我自己从 gidhra 放入的对象)
jobject Java_com_the_old_serialportApp_SerialPort_open
(JNIEnv *penv,undefined8 param_2,jstring inputString,speed_t baudRate,
uint hiddenParam)
我已经写了这段代码
package com.myself.serialporttesting
companion object {
init {
try {
Log.i("Library", "Loading library")
System.loadLibrary("oldnativelibrary")
Log.i("Library", "Library loaded successfully")
} catch (e: UnsatisfiedLinkError) {
Log.i("Library", "Library not loaded")
}
}
private external fun open(
fileName: String,
baudRate: Int,
hiddenValue: Int
): FileDescriptor
}
我收到错误消息: 未找到 java.io.FileDescriptor com.hfad.serialporttesting.SerialPort$Companion.open(java.lang.String, int, int)
的实现我认为这是一个命名问题,因为我的包被称为其他名称。这是真的吗?是否可以解决这个问题?
如果其他人遇到这个问题,请回答我自己:
这是一个命名问题。如果将函数加载到名为
的包中package com.the.old.serialportapp
class SerialPort {
companion object {
init {
try {
Log.i("Library", "Loading library")
System.loadLibrary("oldnativelibrary")
Log.i("Library", "Library loaded successfully")
} catch (e: UnsatisfiedLinkError) {
Log.i("Library", "Library not loaded")
}
}
private external fun open(
fileName: String,
baudRate: Int,
hiddenValue: Int
): FileDescriptor
}
然后您应该能够访问该方法。