Что означает ошибка "android source null" и как её быстро найти
Ошибка "android source null" появляется, когда сборщик (CMake/NDK/Gradle) не находит ожидаемые исходники, пути или метаданные нативного модуля — чаще всего из-за неверной конфигурации NDK/CMake, неправильных путей в CMakeLists.txt или повреждённых/неполных AAR с нативными библиотеками. Ниже — короткий план диагностики и исправлений, которые можно применить прямо сейчас.
Быстрая диагностика: что проверить в первые 5–10 минут
- Соберите и сохраните детали сборки:
- Выполните в проекте:
./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" — это экономит время.
Пошаговое исправление (конкретные правки)
- Очистка и восстановление кешей
- Выполните:
./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", если они присутствуют.
- Проверка AAR/JAR с нативными библиотеками
- Если ошибка возникает при подключении сторонней AAR, распакуйте его и проверьте наличие lib/
/*.so и метаданных. - Включите в build.gradle упаковочные опции, если дублирование:
- Если ошибка возникает при подключении сторонней AAR, распакуйте его и проверьте наличие lib/
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/
. Если библиотека повреждена — свяжитесь с автором или замените реализацию.
- Обновите библиотеку, распакуйте AAR и проверьте содержимое lib/
Если после всех шагов ошибка остаётся — приложите сюда полный вывод сборки (build_log.txt) и ваши файлы: build.gradle (project и module) + CMakeLists.txt — помогу проанализировать детальнее.