У меня есть проект, созданный с помощью Gradle в Android Studio v 0.3.2. Мой проект имеет зависимости от двух других модулей ( ная библиотека). Структура проекта хорошо определена с помощью файлов build.gradle. Проблема в том, что … когда я запускаю проект на Android-устройстве, я устанавливаю 3 на моем устройстве. Один из них – основной проект (единственный правильный), а два других – импортированные модули (эти два я не хочу устанавливать). Как я могу это достичь? Или что я делаю неправильно?
Структура проекта:
Где MyLibModule находится на том же пути, что и основной проект, потому что мне также нужен этот модуль в другом проекте.
Просто чтобы быть ясным: вся сборка проекта в порядке , все зависимости в порядке, но почему я получаю 3 APK на моем устройстве?
После целого дня, борющегося с этой проблемой, я нашел причину этого странного поведения. Проблема заключалась в проявлении библиотечного модуля. Прежде чем я переключился на студию Android, я использовал Eclipse. И у меня была testActivity, объявленная в манифесте проекта библиотеки. Удаление всех тестовых действий из манифеста из моих библиотечных модулей решило проблему. Теперь Android Studio устанавливает только APK MainProject.
Некоторый код: манифест MyLibModule:
Изменился на:
…. И то же самое для MyOtherModule.
ПРИМЕЧАНИЕ. Пустой узел приложения должен оставаться в манифесте, чтобы избежать ошибок сборки.
Удалить фильтр намерений из запуска вашей библиотеки
Изменился на
Это потому, что ваши библиотеки определены в файлах build.gradle как приложения, а не библиотеки. Посмотрите на эту строку:
Apply plugin: "android"
И замените его на:
Apply plugin: "android-library"
Возможно, вам придется внести другие изменения в файл сборки, так как не все, что относится к приложениям, может быть указано в файле сборки библиотеки. См. http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects для получения дополнительной информации.
Иногда ошибки существуют в Android-манифесте из-за того, что есть крест, как изображение через конфигурацию запуска / отладки, поэтому попробуйте просмотреть, если Android-манифест имеет какие-либо ошибки в одном случае.
Я импортировал проект в Android Studio с несколькими подпроектами.
Я хочу запустить подпроект.
Я успешно сделал это подпроекты build.gradle как модуль.
Чтобы запустить его, я перешел в меню «Выполнить»> «Редактирование конфигураций»> «Приложение Android».
Проблема. Когда я пытаюсь выбрать модуль, ни один из них не отображается в раскрывающемся списке.
Почему это?
EDIT: он отображается как модуль под Groovy, но не в приложении Android. Как я могу получить его в Android-приложении?
goto Android >> Gradle Scripts >> Build Gradle (Module: app)
убедитесь, что первая строка этого файла похожа на это.
Apply plugin: "com.android.library"
Для меня это было исправлено, просто перезапустив Android Studio .. Как и старые добрые времена Eclipse
Для моего случая, новичок я взревел свой проект, не уверен, как, но он больше не будет работать и жаловался на манифест, R, все. Я понял, что некоторые, как в моих настройках. Gradle не include ":app" только я добавил это, я снова был в пути.
Наконец, я выяснил, почему модуль не отображается, когда я добавляю конфигурацию для AndroidTests для модуля com.android.library .
Если вы build.gradle свой библиотечный модуль в build.gradle приложения следующим образом:
Compile project(":yourlibrary")
Поскольку для библиотечного модуля по умолчанию он скомпилирован с режимом release , вы не можете запустить Android Tests для него, поэтому он не будет отображаться в списке модулей. Я исправил его с помощью следующей модификации:
Добавьте следующую конфигурацию в build.gradle вашего библиотечного модуля:
PublishNonDefault true
build.gradle следующие изменения, вы можете debug компиляцию своей библиотеки, редактируя build.gradle вашего прикладного модуля, например:
Compile project(":yourlibrary") + debugCompile project(path: ":yourlibrary", configuration: "debug") + releaseCompile project(path: ":yourlibrary", configuration: "release")
Затем синхронизируйте его, и вы найдете его в списке.
Похоже, что разные решения работают для людей с разницей, поскольку я просто закрываю проект, а импорт его снова разрешил проблему.
У меня была аналогичная проблема, когда я выбрал родительский каталог моего проекта, я разрешил Close Project -> Удалить проект из Android Studio -> Import Project , выбрав файл right build.gradle .
Убедитесь, что вы выбрали правильный файл build.gradle во время импорта.
Убедитесь, что ваш build.gradle
Apply plugin: "com.android.application"
После того, как вы изменились, повторите синхронизацию.
Это происходит, главным образом, при копировании проекта библиотеки и его создании. Решением было бы добавить
Apply plugin: "com.android.application"
в файле build.gradle, вместо
Apply plugin: "com.android.library"
Затем выполните градиентную синхронизацию
orderEntry type = "library" exported = "" name = "appcompat-v7-19.1.0" level = "project" />
Я исправил это, добавив грани в настройки модуля . Они пропали без вести. > открыть Настройки модуля > Границы > Добавить грани (знак «+» вверху)> Android . После добавления граней у вас будут модули.
ОБНОВИТЬ:
Для последней версии градиента Facets были удалены , теперь вы можете напрямую добавлять модули. щелкните правой кнопкой мыши по проекту > откройте настройки модуля > Добавить модуль (вверху знака «+»)> Приложение «Телефон и планшет» (теперь вы можете создать новый модуль и настроить его).
добавьте ваш moudle в свои приложения. iml-файл вроде: orderEntry type = "module" module-name = "yourmoudlename" exported = ""
Введение
Комфорт среды программирования во многом зависит от количества второстепенных действий, не относящихся к программированию, которые требуется выполнять программисту, а также глубины изучения самой среды разработки для её правильной настройки под собственные нужды. В этом смысле идеалом, на мой взгляд, является среда Дельфи, заточенная как раз-таки на максимально простую и быструю разработку приложений для Windows (справедливости ради замечу, что с разработкой приложений под Android и другие системы там пока ещё не всё так гладко, как хотелось бы).
В этом смысле в царстве Android нет достаточно комфортных сред разработки, как это, впрочем, и полагается программам в мире бесплатных операционных систем. Ещё до недавнего времени центральным средством разработки считался Eclipse со специализированными плагинами. Однако летом 2013 года Google представил на суд общественности новую IDE — Android Studio , основанную на давнишнем конкуренте Eclipse — системе IntelliJ IDEA . Надо сказать, что несмотря на раннюю версию системы, не вошедшую ещё даже в стадию Beta, она уже превосходит удобством Eclipse.
Тем не менее, программистам всё ещё приходится вникать как в многочисленные нюансы настройки среды, так и в непривычные действия по формированию конечных файлов приложений, готовых к распространению. И это всё на фоне изучения тех специфичных классов, которые приходится использовать, чтобы заставить интерфейс должным образом работать с кодом.
После такого большого вступления, я всего лишь расскажу, как в Android Studio можно генерировать конечные apk-файлы, готовые к распространению, ибо есть нюансы. Надеюсь, моя статья хоть как-то облегчит жизнь начинающим пользователям этой, пожалуй, лучшей на сегодняшний день IDE для программирования под Android.
Ручной способ
Скажу сразу, что несмотря на то, что я ставлю галочку в поле Run ProGuard, он у меня почему-то не отрабатывает, и apk-файл остаётся неоптимизированным. Возможно, это пережитки ранней версии Android Studio (у меня версия 0.5.4 ). Но выйти из положения достаточно просто, включив эту галочку непосредственно в файле сценария утилиты ProGuard. Найдите в окне проекта внутри нашего модуля файл build.gradle. В секции android → buildTypes → release, отвечающей за генерацию релиза, поменяйте параметр runProguard с false на true.
Не забудьте после редактирования файла сценария синхронизировать с ним ваш проект. Для этого в панели инструментов нажмите кнопку Sync Project with Gradle Files (стрелочка вниз из зелёного кружка) или ссылку Sync Now во всплывшей в верхней части исходника жёлтой полосе сообщения. После синхронизации можно снова попробовать собрать apk-файл, начиная со второго пункта нашей инструкции. Только в этот раз вместо генерации нового хранилища используем уже созданное. Все наши пароли и настройки сохранились, поэтому нам только остаётся нажимать во всплывающих окнах OK-Next-Finish. Обратите внимание, что вновь сгенерированный apk-файл стал немного меньше, чем в прошлый раз.
Автоматический способ
Автоматический способ позволяет генерировать apk-файл без ввода паролей при каждом запуске приложения на выполнение, а также командой assembleRelease, добавленной в список конфигураций и выполняющейся той же кнопкой Run.
Для включения автоматического режима надо внести в уже знакомый нам файл сценария build.gradle новую секцию, содержащую в том числе информацию о подписи:
Вместо файла настроек "proguard-android.txt" можно вписать файл ещё более оптимизированных настроек "proguard-android-optimize.txt". Это позволит ещё немного сократить объём apk-файла.
Для внесения этой секции в настройки откроем файл build.gradle, расположенный внутри нашего модуля и закомментируем секцию buildTypes. Вместо неё вставим вышеприведённую секцию. Не забудьте поменять путь к вашему файлу ключей, который вы создали в первой части статьи при ручном создании apk-файла, а также вписать правильное имя подписи и оба пароля.
После внесения изменений в файл нажимаем в панели инструментов кнопку Sync Project with Gradle Files (стрелочка вниз из зелёного кружка) или ссылку Sync Now во всплывшей вверху жёлтой информационной полосе, чтобы синхронизировать изменённые настройки с проектом. Всё, автоматический режим настроен!
Теперь, чтобы иметь возможность генерировать apk-файл без запуска приложения, добавим отдельную команду запуска генерации apk-файла в список конфигураций (комбо-бокс в панели инструментов). Откроем окошко Gradle Tasks, нажав на ярлык Gradle у правого края экрана, или выбрав его во всплывающем списке кнопки, расположенной в левом нижнем углу Android Studio. В секции All tasks раскрываем список задач для нашего модуля и правой кнопкой щёлкаем по задаче assembleRelease. В появившемся контекстном меню выбираем пункт Create… и выбранная задача добавится в список конфигураций.
Теперь мы можем генерировать релиз и без запуска программы на выполнение, просто выбрав в списке конфигураций команду assembleRelease и нажав кнопку Run. Результат автоматического создания apk-файла будет находится в папке build/apk/. Там будут два файла: ИмяМодуля-release-unaligned.apk и ИмяМодуля-release.apk. Первый файл — это полуфабрикат. Он уже подписан но ещё не выровнен. Второй файл — уже выровненный. Это и есть наш конечный apk-файл, который мы уже можем переименовать и свободно распространять.
Замечу, что выравнивание файла гарантирует, что все несжатые данные будут начинаться с позиции, кратной 4 байтам по отношению к началу файла. Это обеспечит оптимизацию производительности программы на устройстве. Когда файл выровнен, Android способен читать информацию из файла по мере необходимости, а не загружать в память весь пакет целиком. В итоге уменьшается объем оперативной памяти, потребляемой запущенным приложением.
Для создания модуля в Android Studio выбираете
File > New > New Module
Далее есть 2 варианта. Если вы планируете создать «чистую» java-библиотеку, в качестве типа указывайте Java Library , в итоге код такой библиотеки скомпилируется в JAR файл. Это удобно, так как вы сможете использовать ее не только в Android приложениях. Если же вы собираетесь использовать android-специфичные вещи и вам понадобятся классы из пакетов android.* , то создавайте Android Library , которая при компиляции собирается в AAR файл. В данном случае вам понядобится последний вариант.
ВАЖНО: В minSDKVersion (файлы build.gradle модулей) приложения должен совпадать или быть больше, чем указанный в модуле библиотеки.Указанные buildToolsVersion должны быть установлены в Android-SDK. Каждый модуль библиотеки генерирует свой класс ресурсов (*.R.class). Когда Android библиотеки добавляются в проект и происходит его сборка, то их ресурсы сливаются, что может привести к конфликтам. Поэтому в документации определены следующие соглашения:
Подключаются Android библиотеки как зависимости (если библиотека была создана как отдельный проект в AndroidStudio). Тут есть так же 2 варианта:
1.Либо добавить скомпилированный AAR (или JAR) файл:
File > New Module - Import .JAR/.AAR Package > Next - вводите путь до ARR (или JAR) файла > Finish
2.Либо импортировать библиотеку из исходников:
File > New > Import Module - вводите путь до директории, в которой находятся исходники библиотеки > Finish
ВАЖНО: убедиться, что имя Android библиотеки было добавлено в settings.gradle
Include ":app", ":core", ":personal", ":client"
и появилась в блоке dependencies файла build.gradle приложения
Dependencies { compile project(":core") compile project(":personal") compile project(":client") }
Android библиотеки могут содержать в себе ресурсы, другие JAR библиотеки, собственный AndroidManifest.xml .
Скомпилированная Android библиотека представляет собой обычный zip архив с расширением.arr , который содержит следующие обязательные файлы и директории:
и необязательные:
Modules provide a container for your app"s source code, resource files, and app level settings, such as the module-level build file and Android manifest file. Each module can be independently built, tested, and debugged.
Android Studio uses modules to make it easy to add new devices to your project. By following a few simple steps in Android Studio, you can create a module to contain code that"s specific to a device type, such as Wear OS or Android TV. Android Studio automatically creates module directories, such as source and resource directories, and a default build.gradle file appropriate for the device type. Also, Android Studio creates device modules with recommended build configurations, such as using the Leanback library for Android TV modules.
This page describes how to add a new module for a specific device.
Android Studio also makes it easy to add a library or Google Cloud module to your project. For details on creating a library module, see Create a Library Module .
To add a new module to your project for a new device, proceed as follows:
Then click Next .
Android Studio creates all the necessary files for the new module and syncs the project with the new module gradle files. Adding a module for a new device also adds any required dependencies for the target device to the module"s build file.
Once the Gradle project sync completes, the new module appears in the Project window on the left. If you don"t see the new module folder, make sure the window is displaying the Android view .
To import an existing module into your project, proceed as follows:
Once you"ve added a new module, you can modify the module code and resources, configure module build settings, and build the module. You can also run and debug the module like any other app.
You"ll also want to add code and resources to properly support the new device. For more information about how to develop app modules for different device types, see the corresponding documentation:
As you develop your new module, you might create device independent code that is already duplicated in a different app module. Instead of maintaining duplicate code, consider moving the shared code to a library module and adding the library as a dependency to your app modules. For more information on creating a library module and adding it as a dependency, see