Android 10: Android Q: NDK: opendir to / dev не работает с ошибкой 13: доступ запрещен - PullRequest
0 голосов
/ 19 июня 2020

В моем приложении 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

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 05 июля 2020

Я думаю, вы не сможете получить доступ к "/ dev / snd / pcm C*", если не рутировали устройство Android.

0 голосов
/ 19 июня 2020

Перед любой операцией чтения / записи вы должны запросить разрешения. Вы это сделали? Это должно быть сделано из javaside, используя ActivityCompat.requestPermissions

...