Я хочу открыть последовательный порт на определенном устройстве Android через приложение Android.
Устройство содержало оригинальный APK с некоторыми функциями последовательного порта.
Я выполнил реверс-инжиниринг apk и нашел правильный файл .so в system/lib64 на устройстве, чтобы я знал, как старое приложение использует этот проект.
Что я знаю:
- Последовательный порт использует Uart для связи.
- Файл .so используется в другом приложении, поэтому имеет правильную функциональность.
- Реверс-инжиниринг, позвольте мне см. основные функциональные возможности и названия, используемые для функций.
- Устройство работает под управлением Android 10.
- Оно работает на процессоре Arm64-v8a.
- Старая библиотека .so добавлена в папку jniLibs, найдена и загружена.
У меня нет документации ни на последовательное устройство, ни на исходное устройство, поскольку производитель ее не предоставил, поэтому создаю новое нативное устройство. Библиотека может быть сложной.
Метод обратной разработки файлов 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)
Я считаю, что это проблема с именованием, поскольку мой пакет называется как-то по-другому. Так ли это и можно ли это обойти?
Подробнее здесь: https://stackoverflow.com/questions/781 ... so-library