Если вы не пытаетесь добавить MLKit в качестве приложения в один из ваших существующих проектов, вы можете игнорировать мой предыдущий ответ. Это только частично решает проблему, и теперь я понимаю, почему. На уровне начального проекта существуют зависимости, необходимые для запуска приложения (модуля). Ответ для большинства людей будет ближе к ответу Azhagthottk, возможно, с небольшими изменениями и / или объяснениями. Я попытался поднять его ответ сейчас, когда, оглядываясь назад, я его понимаю, но я еще не на этом уровне в StackOverflow.
Проблема
"A роза под любым другим названием пахнет как сладкая ". - Ромео и Джульетта
Я цитирую Шекспира здесь, потому что в этом суть проблемы: терминология "перегрузка" - один и тот же термин с разными значениями. Инструкции на странице «Введение» гласят:
«Эта кодовая метка проведет вас через простые шаги по добавлению обнаружения объекта и отслеживания (ODT) для данного изображения в существующее приложение Android».
... и это то, что сбило меня с толку. Я продолжал думать, что я должен создать пустой проект (также называемый иногда «приложением» - go рисунок) в Android Studio, а затем добавить ПРОСТО приложение (модуль - go рисунок) в этот проект. Из-за вышеупомянутого «перегруженного» использования понятий / терминов в Firebase и Android Studio я буквально воспринял это утверждение, о чем и был мой другой ответ. Оглядываясь назад, очень просто загрузить этот проект, добавить в Android Studio и запустить. Вот шаги:
Решение
Загрузите исходный код в ЛЮБОЕ разумное место на вашем жестком диске p c и распакуйте его. .
Открыть Android Studio.
Из главного меню: Файл-> Создать-> Импортировать проект ... Перейдите вниз к "стартовый" каталог. Нажмите на нее, а затем нажмите кнопку ОК. Примечание для новичков: не думайте, что Android Studio имеет достаточно здравого смысла, чтобы спросить вас, хотите ли вы «импортировать» файлы в какое-то логическое место, скажем, под вашим каталогом AndroidStudioProjects. Это не. Вы должны сделать это самостоятельно в первую очередь. Он собирается оставить их, модифицировать и запускать там, где вы их распаковали. Go рисунок. Итак, помните о будущих потенциальных проблемах безопасности файлов из-за этого, если вы забудете, где вы их оставили.
Как показано на странице 3 инструкций codelab, настройте свою базу огня , Обратите внимание, что крайне важно, чтобы пакет в firebase соответствовал пакету в вашем приложении (модуле), иначе связь между вашим приложением и сервером firebase не будет работать.
В соответствии с пожарной базой На странице 4 инструкции загрузите сгенерированный файл json из firebase и установите его прямо на уровне папки приложения. Вероятно, лучше всего сейчас File-> Synch With File System, чтобы Android Studio мог видеть json.
Как показано на странице 4 инструкций codelab, добавьте зависимости в build.gradle на уровне приложения, а не на уровне проекта. Вы, вероятно, должны поместить плагин вверху вместе с остальными, а не внизу, как показано в инструкции. (Просто хороший стандарт кодирования.) Поскольку вы уже выполнили проект File-> Import, вам не нужно делать File-> Open (как показано в инструкциях CodeLab). Просто выполните «Синхронизация проекта с файлами Gradle», на случай, если они не будут автоматически синхронизированы.
Из главного меню Build-> Make project. Обратите внимание, что в этой строке в файле build.gradle уровня приложения появляется ошибка:
реализация 'com. android .support: appcompat-v7: 28.0.0'
... и да, у меня уже есть уровень API 28 в SDK.
Я получаю несколько других ошибок уровня предупреждения в том же файле. Все о потенциальной несовместимости версий. CodeLab, вероятно, был написан некоторое время назад, и версии продвинулись вперед. Справедливо. Я разберусь с этим позже, так как на этом этапе сборка / запуск не прекращается. Я собираюсь думать позитивно и надеюсь, что это не превратится в «банку ада».
Выберите ваш эмулируемый AVD и запустите «Приложение». Если он работает, он должен выглядеть следующим образом:
Запущенное приложение
Я переместил это вперед к последним / лучшим версиям, как показано ниже на уровне модуля build.gradle. Android Затем Studio пожаловалась, что мне нужно перейти на AndroidX, что я и сделал. Все это вызвало несколько ошибок сборки, которые я исправил, просто взяв предложенные исправления по умолчанию, и все это по-прежнему работает, как и раньше, но без ошибок сборки. Обновленный файл build.gradle уровня модуля:
применить плагин: 'com. android .application'
применить плагин: 'kotlin - android'
применить плагин: 'kotlin - android -extensions'
применить плагин: 'com.google.gms.google-services'
android {compileSdkVersion 29 defaultConfig { applicationId "com.google.firebase.mlkit.codelab.objectdetection" minSdkVersion 16 targetSdkVersion 29 versionCode 1 versionName "1.0"} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile ('proguard- android -optimize),' proguard- *1109* -optimize. rules.pro '}}}
зависимости {реализация fileTree (dir:' libs ', include: [' * .jar ']) реализация "org.jetbrains. kotlin: kotlin -stdlib- jdk7: $ kotlin_version "реализация" androidx.appcompat: appcompat: 1.1.0 "реализация" androidx.constraintlayout: constraintlayout: 1.1.3 "реализация" com.google. android .material: материал: 1.1.0 '
// MLKit ODT libraries
implementation 'com.google.firebase:firebase-ml-vision:24.0.2'
implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.4'
}
Я получил ошибку во время выполнения на FloatingA ctionButton. Очевидно (согласно аналогичной ошибке в StackOverflow), когда вы переходите на AndroidX, вам нужно перейти на com.google. android .material.floatingactionbutton.FloatingActionButton в layout / activity_main. xml, поэтому он становится:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/captureImageFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_camera"
android:layout_gravity="center|bottom"
android:layout_margin="16dp" />