В моем приложении android я написал код c ++ (JNI / NDK) для доступа (открытия / чтения / записи) файлов устройства звуковой карты (/ dev / snd / pcm C*). Но при запуске приложения на реальном устройстве (Android телефон) происходит сбой с ошибкой 13: доступ запрещен. Я даже попытался просто просмотреть каталог / dev (передавая «/ dev» из кода Kotlin в приложении),
extern "C" JNIEXPORT jstring JNICALL
Java_com_amitabhs_myapplication_MainActivity_checkDevice(
JNIEnv* env,
jobject, /* this */
jstring name) {
result = "checkDevice: ";
struct pcm_params *params = NULL;
struct pcm_mask *m = NULL;
unsigned int min = 0;
unsigned int max = 0;
struct dirent *de = NULL;
DIR *dr = NULL;
const char *nameStr = env->GetStringUTFChars(name, 0);
dr = opendir(nameStr);
result += nameStr;
env->ReleaseStringUTFChars(name, nameStr);
if (NULL == dr) {
result += ": unable to open: ";
result += std::to_string(errno);
result += ": ";
result += strerror(errno);
return env->NewStringUTF(result.c_str());
}
...
Это дает ошибку «Ошибка: невозможно открыть: 13: доступ запрещен».
В «AndroidManifest. xml» у меня есть
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
В «CMakeLists.txt» у меня есть
cmake_minimum_required(VERSION 3.4.1)
In ». gradle ", у меня есть
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.amitabhs.myapplication"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
и
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
Я установил NDK (Side by Side) версий 21.1.6352462, 21.0.6113669, 20.0.5594570. Я установил версию Cmake, 3.10.2.4988404. Я установил Android SDK Build-Tools 30 версии 30.0.0.rc4, 30.0.0.rc2, 29.0.3.
Думаю, мне что-то не хватает при создании приведенного выше кода.
Не уверен, как был создан и успешно запущен код tinyalsa, как упоминалось здесь: https://android.googlesource.com/platform/external/tinyalsa/+/refs/heads/android10-mainline-release
Пожалуйста, помогите.