Что означает ошибка "android source null" и как её быстро найти

Ошибка "android source null" появляется, когда сборщик (CMake/NDK/Gradle) не находит ожидаемые исходники, пути или метаданные нативного модуля — чаще всего из-за неверной конфигурации NDK/CMake, неправильных путей в CMakeLists.txt или повреждённых/неполных AAR с нативными библиотеками. Ниже — короткий план диагностики и исправлений, которые можно применить прямо сейчас.

Быстрая диагностика: что проверить в первые 5–10 минут

  1. Соберите и сохраните детали сборки:
    • Выполните в проекте:
     ./gradlew clean assembleDebug --info --stacktrace > build_log.txt
     ```
   - Откройте build_log.txt и ищите "android source", "source null", "Execution failed for task" и упоминания CMake/NDK.

2. Проверить общую конфигурацию:
   - File > Project Structure > SDK Location: установлен ли NDK и корректен ли путь.
   - local.properties: строка ndk.dir=/path/to/Android/Sdk/ndk/XX.X.X

3. Build Output и Gradle Console:
   - В окне Build найдите точную задачу, где падает (externalNativeBuildCMake* или externalNativeBuildNdkBuild).
   - Скопируйте полный стек-трейс ошибки — он даст строку CMakeLists.txt и контекст.

Сохраните логи в отдельный файл и используйте grep/поиск по ключам "null" и "android source" — это экономит время.

Пошаговое исправление (конкретные правки)

  1. Очистка и восстановление кешей
    • Выполните:
     ./gradlew clean
     rm -rf .gradle .idea build
     ```
   - В Android Studio: File > Invalidate Caches / Restart.

2. Убедитесь, что NDK и CMake настроены корректно
   - В SDK Manager установите совместимую версию NDK и CMake. В local.properties укажите ndk.dir.
   - Пример:
     
 local.properties
 ndk.dir=/Users/you/Android/Sdk/ndk/26.1.10909125
 ```

3. Правки в build.gradle (Module: app)

  • Внутри android {} проверьте externalNativeBuild и abiFilters:
     android {
       compileSdk 34
       defaultConfig {
         ndk {
           abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
         }
       }
       externalNativeBuild {
         cmake {
           path "src/main/cpp/CMakeLists.txt"
           version "3.22.1"
         }
       }
     }
     ```
   - Убедитесь, что версия плагина AGP и gradle-класспас соответствуют используемому NDK.

4. Исправление CMakeLists.txt
   - Проверьте, что все пути исходников корректны и не ссылаются на несуществующие переменные.
     
 cmake_minimum_required(VERSION 3.22.1)
 project(myapp)
 add_library(myapp SHARED src/main/cpp/native-lib.cpp)
 find_library(log-lib log)
 target_link_libraries(myapp ${log-lib})
 ```
  • Удалите или поправьте любые пользовательские свойства "android.source" или "android.sourceProperties", если они присутствуют.
  1. Проверка AAR/JAR с нативными библиотеками
    • Если ошибка возникает при подключении сторонней AAR, распакуйте его и проверьте наличие lib//*.so и метаданных.
    • Включите в build.gradle упаковочные опции, если дублирование:
     packagingOptions {
       pickFirst '**/libjsc.so'
     }
     ```

6. Финальная сборка и тест
   - Соберите:
     
 ./gradlew assembleDebug --info
 ```
  • Если проблема runtime (asset loading), смотрите adb logcat во время запуска:
     adb logcat | grep -i "source null"
     ```

NDK и версия Android Gradle Plugin (AGP) должны быть совместимы — некорректные комбинации часто приводят к странным "null" ошибкам. Обновление NDK без обновления AGP может усугубить проблему.

Частые ошибки

  • Неправильный путь в local.properties (ndk.dir указывает на папку без нужной версии)
  • Ошибки в CMakeLists.txt: неверные относительные пути к cpp/пропущенные add_library/add_executable
  • AAR не содержит нативных библиотек для нужной ABI (ошибка появляется только на конкретном устройстве)
  • Кэш Gradle/AS содержит старые ссылки — помогает Invalidate Caches + clean
  • Несовместимость NDK и AGP — проверяйте документацию по совместимости версий

FAQ

  • Что если ошибок в логах нет, но сборка падает с "android source null"?

    • Проверьте полный стек-трейс с --stacktrace; часто верхняя строка скрывает реальную причину (например, файл CMakeLists на другом пути).
  • Можно ли пофиксить, просто убрав abiFilters?

    • Иногда да, но это может привести к лишним библиотекам в APK. Лучше указать только те ABI, которые вы поддерживаете.
  • Помогает ли downgrade/upgrade NDK?

    • Да. Если вы недавно обновляли NDK, попробуйте вернуть предыдущую версию или обновить AGP/Gradle до совместимых версий.
  • Что делать, если ошибка в сторонней библиотеке (AAR)?

    • Обновите библиотеку, распакуйте AAR и проверьте содержимое lib/. Если библиотека повреждена — свяжитесь с автором или замените реализацию.

Если после всех шагов ошибка остаётся — приложите сюда полный вывод сборки (build_log.txt) и ваши файлы: build.gradle (project и module) + CMakeLists.txt — помогу проанализировать детальнее.