我面對NDK的不良行爲,試圖更改和重建COM端口的本地串行端口庫。這是衆所周知的舊代碼,你可以在這裏找到它(不是我的) https://github.com/NanFengyang/AndroidSerialPort/blob/master/app/src/main/jni/SerialPort.c#L126NDK 15中斷串行端口庫
注意字符串126 - 這是問題的一點。
NDK15讓我驚喜兩次:
首先,這個新的警告。
Android NDK:在./project.properties中找到平臺級別。設置 APP_PLATFORM到android-10。 Android NDK:android-10不受支持。 使用最低支持的版本android-14。
Android NDK:警告: APP_PLATFORM android-14比 ./AndroidManifest.xml中的android:minSdkVersion 10高。 NDK二進制文件將而不是可與 設備比android-14更舊。有關更多信息,請參閱 https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md 。
接着,當打開COM它失敗,此:
配置串行口
tcsetattr()失敗(FD = 40,ERR = 22)
這我簡單的虛擬代碼的輸出
struct termios cfg;
LOGD("Configuring serial port");
if (tcgetattr(fd, &cfg)){
LOGE("tcgetattr() failed (fd = %d, err = %d)", fd, errno);
}
if (tcsetattr(fd, TCSANOW, &cfg)){
LOGE("tcsetattr() failed (fd = %d, err = %d)", fd, errno);
}
僅在使用NDK 15時發生此錯誤。修正案14b,13b,12b ......對於面對它的人也是成功的 - 只需下載old NDK即可。
最後,的問題。 錯誤22是[EINVAL] - 「optional_actions參數不是支持的值,或者嘗試將termios結構中表示的屬性更改爲不支持的值」。有人知道如何避免它在新的NDK?
可以提供在哪裏設置APP_DEPRECATED_HEADERS = true的例子,我不是那麼熟悉,只是知道該怎麼辦好NDK構建和打造LIB – djdance
如果你有Application.mk,你可以把它放在那裏。或者在ndk-build命令行上。 –