I’ve been rebuilding my project from the ground up, so there’s been a lot of problems with it. At the moment, everything’s working great, except that when I try to run the app, I get the message ‘Local path doesn’t exist.’, where the local path is pointing at the path: AndroidStudioProjectsMyProjectMyProject..buildproductionMyProject.apk, and true enough, there is no .apk file at that location, or indeed anywhere else in the project filesystem.
However, I can build the app with no problems, and running gradlew packageDebug gives me the message ‘build successful‘, so .apks should be being generated. My question is, where are they going, or if they aren’t being generated, why not?
Where is the build path of each module set? I’m somewhat confused because the Project Structure->Facets->Android->Compiler settings, Project Structure->Modules->Paths->Compiler Output, build.gradle, and MyProject.iml all seem to have something to do with the build path, but I don’t quite understand how they relate
edit: I know where it should be, but it’s not there so I want to know how to change the build path
edit 2: For some reason running gradlew build does create .apks, but not building or running from inside the program
edit 3: Here’s my gradlew build output, note that it does build successfully:
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "target" on "com.android.build.gradle.LibraryExtension_Decorated@9e9aabc", value: "android-16".
:TwoWayLib:mergeReleaseProguardFiles UP-TO-DATE
:TwoWayLib:packageReleaseAidl UP-TO-DATE
:TwoWayLib:prepareReleaseDependencies
:TwoWayLib:compileReleaseAidl UP-TO-DATE
:TwoWayLib:generateReleaseBuildConfig UP-TO-DATE
:TwoWayLib:mergeReleaseAssets UP-TO-DATE
:TwoWayLib:compileReleaseRenderscript UP-TO-DATE
:TwoWayLib:mergeReleaseResources UP-TO-DATE
:TwoWayLib:processReleaseManifest UP-TO-DATE
:TwoWayLib:processReleaseResources UP-TO-DATE
:TwoWayLib:compileRelease UP-TO-DATE
:TwoWayLib:processReleaseJavaRes UP-TO-DATE
:TwoWayLib:packageReleaseJar UP-TO-DATE
:TwoWayLib:packageReleaseLocalJar UP-TO-DATE
:TwoWayLib:packageReleaseRenderscript UP-TO-DATE
:TwoWayLib:bundleRelease UP-TO-DATE
:Rogue:prepareRogueProjectTwoWayLibUnspecifiedLibrary UP-TO-DATE
:Rogue:prepareDebugDependencies
:Rogue:compileDebugAidl UP-TO-DATE
:Rogue:generateDebugBuildConfig UP-TO-DATE
:Rogue:mergeDebugAssets UP-TO-DATE
:Rogue:compileDebugRenderscript UP-TO-DATE
:Rogue:mergeDebugResources UP-TO-DATE
:Rogue:processDebugManifest UP-TO-DATE
:Rogue:processDebugResources UP-TO-DATE
:Rogue:compileDebug UP-TO-DATE
:Rogue:dexDebug UP-TO-DATE
:Rogue:processDebugJavaRes UP-TO-DATE
:Rogue:validateDebugSigning
:Rogue:packageDebug
:Rogue:assembleDebug
:Rogue:prepareReleaseDependencies
:Rogue:compileReleaseAidl UP-TO-DATE
:Rogue:generateReleaseBuildConfig UP-TO-DATE
:Rogue:mergeReleaseAssets UP-TO-DATE
:Rogue:compileReleaseRenderscript UP-TO-DATE
:Rogue:mergeReleaseResources UP-TO-DATE
:Rogue:processReleaseManifest UP-TO-DATE
:Rogue:processReleaseResources UP-TO-DATE
:Rogue:compileRelease UP-TO-DATE
:Rogue:dexRelease UP-TO-DATE
:Rogue:processReleaseJavaRes UP-TO-DATE
:Rogue:packageRelease
:Rogue:assembleRelease
:Rogue:assemble
:Rogue:check UP-TO-DATE
:Rogue:build
:TwoWayLib:mergeDebugProguardFiles UP-TO-DATE
:TwoWayLib:packageDebugAidl UP-TO-DATE
:TwoWayLib:prepareDebugDependencies
:TwoWayLib:compileDebugAidl UP-TO-DATE
:TwoWayLib:generateDebugBuildConfig UP-TO-DATE
:TwoWayLib:mergeDebugAssets UP-TO-DATE
:TwoWayLib:compileDebugRenderscript UP-TO-DATE
:TwoWayLib:mergeDebugResources UP-TO-DATE
:TwoWayLib:processDebugManifest UP-TO-DATE
:TwoWayLib:processDebugResources UP-TO-DATE
:TwoWayLib:compileDebug UP-TO-DATE
:TwoWayLib:processDebugJavaRes UP-TO-DATE
:TwoWayLib:packageDebugJar UP-TO-DATE
:TwoWayLib:packageDebugLocalJar UP-TO-DATE
:TwoWayLib:packageDebugRenderscript UP-TO-DATE
:TwoWayLib:bundleDebug UP-TO-DATE
:TwoWayLib:assembleDebug UP-TO-DATE
:TwoWayLib:assembleRelease UP-TO-DATE
:TwoWayLib:assemble UP-TO-DATE
:TwoWayLib:check UP-TO-DATE
:TwoWayLib:build UP-TO-DATE
BUILD SUCCESSFUL
Total time: 10.848 secs
To help people who might search for answer to this same question, it is important to know what type of projects you are using in Studio.
Gradle
The default project type when creating new project, and the recommended one in general is Gradle.
For a new project called “Foo”, the structure under the main folder will be
Foo/
settings.gradle
Foo/
build.gradle
build/
Where the internal “Foo” folder is the main module (this structure allows you to create more modules later on in the same structure without changes).
In this setup, the location of the generated APK will be under
Foo/Foo/build/apk/...
Note that each module can generate its own output, so the true output is more
Foo/*/build/apk/...
EDIT
On the newest version of the Android Studio location path for generated output is
Foo/*/build/outputs/apk/...
IntelliJ
If you are a user of IntelliJ before switching to Studio, and are importing your IntelliJ project directly, then nothing changed. The location of the output will be the same under:
out/production/...
Note: this is will become deprecated sometimes around 1.0
Eclipse
If you are importing Android Eclipse project directly, do not do this!
As soon as you have dependencies in your project (jars or Library Projects), this will not work and your project will not be properly setup.
If you have no dependencies, then the apk would be under the same location as you’d find it in Eclipse:
bin/...
However I cannot stress enough the importance of not doing this.
I just built a signed APK of my app, but I cannot find it anywhere. The directory project/app/build/outputs/apk/
only give me the debug version, not the release signed one.
And, when clicking “Locate” after the build, it opens project/app/release
, which also does not hold my signed APK.
Where can I find my signed APK?
I am using Android Studio 3.2.1.
asked Dec 6, 2018 at 15:31
Bart FriederichsBart Friederichs
32.9k15 gold badges95 silver badges193 bronze badges
1
How did you build your signed APK?
The location you mentioned is default location and only used when using “Build APK” option:
If you use “Generate Signed Bundle” option, you can specify the APK location:
answered Dec 6, 2018 at 15:45
It will be here
C:Users….AndroidStudioProjectsYourProjectapprelease
answered Dec 6, 2018 at 15:47
1
Чтобы помочь людям, которые могли бы найти ответ на этот же вопрос, важно знать, какие типы проектов вы используете в Studio.
Gradle
Тип проекта по умолчанию при создании нового проекта и рекомендуемый в общем случае Gradle.
Для нового проекта под названием “Foo” структура под основной папкой будет
Foo/
settings.gradle
Foo/
build.gradle
build/
Если внутренняя папка “Foo” является основным модулем (эта структура позволяет вам впоследствии создавать больше модулей в одной структуре без изменений).
В этой настройке местоположение сгенерированного APK будет находиться под
Foo/Foo/build/apk/...
Обратите внимание, что каждый модуль может генерировать свой собственный вывод, поэтому истинный вывод больше
Foo/*/build/apk/...
ИЗМЕНИТЬ
В новейшей версии пути местоположения Android Studio для сгенерированного вывода есть
Foo/*/build/outputs/apk/...
IntelliJ
Если вы являетесь пользователем IntelliJ перед переключением на Studio и импортируете проект IntelliJ напрямую, ничего не изменилось. Расположение выхода будет таким же:
out/production/...
Примечание: это будет устаревать иногда около 1.0
Eclipse,
Если вы импортируете проект Android Eclipse напрямую, не делайте этого!
Как только у вас есть зависимости в вашем проекте (банки или проекты библиотек), это не сработает, и ваш проект будет неправильно настроен.
Если у вас нет зависимостей, тогда apk будет находиться в том же месте, что и в Eclipse:
bin/...
Однако я не могу подчеркнуть важность не для этого.
Публикация приложения
Создание подписанного apk
Последнее обновление: 30.10.2015
После создания приложения, его тестирования и отладки мы можем приступить к его публикации. Суть публикации заключается в создании файла с
расширением .apk, которое будет представлять приложение, и его последующее размещение в Google Play Market или на других внешних сайтах.
По умолчанию в процессе отладки и создания приложения файл apk уже создается, и мы можем его найти в папке проекта по пути
Название_проектаappbuildoutputsapk. По умолчанию файл называется app-debug.apk и представляет debug-версию.
Но для полноценно публикации данного файла может оказаться недостаточно. И нам еще дополнительно надо произвести
некоторую подготовку проекта к релизу. Для это следует указать в файле манифеста у элемента <manifest>
установлены атрибуты android:versionCode и
android:versionName. Также в файле манифеста элемент <application>
не должен содержать атрибута android:debuggable
Кроме того, на этом этапе можно установить иконку для приложения, которая будет отображаться на рабочем экране гаджета, название приложения
(атрибут android:label у элемента), а также можно задать лицензионное соглашение.
В файле манифеста также следует определить название пакета (атрибут package элемента <manifest>
), которое будет использоваться для приложения в дальнейшем. По умолчанию при разработке в
Android Studio пакеты приложений начинаются с com.example. Не стоит оставлять данное название, так как название пакета будет служить уникальным идентификатором вашего приложения. Например,
ниже в моем случае названием пакета служит “com.maverics.eugene.telephonelist”:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.maverics.eugene.telephonelist" android:versionName="1.0" android:versionCode="1" > //.............................
При этом если в файлах кода java название пакета в начале файла также должно соответствовать пакету приложения.
Установка требований
На этапе подготовки к релизу также можно установить требования к API. Например, наше приложение имеет определеную минимальную версию ОС Android,
поэтому мы можем установить в файле манифеста соответствующие атрибуты у элемента <uses-sdk>
-
android:minSdkVersion
— минимальная версия Android -
android:targetSdkVersion
— оптимальная версия API -
android:maxSdkVersion
— максимальная версия системы
Например, пусть минимальная версия Jelly Beans 4.1.2, а оптимальная KitKat 4.4.4:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.maverics.eugene.telephonelist" android:versionName="1.0" android:versionCode="1" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="19" /> //.............................
Подпись приложения
Когда все уже готово, приложение для Android должно быть подписано сертификатом, благодаря которому можно идентифицировать автора приложения.
Когда мы тестируем приложение, устанавливая его через Android Studio на устройство, то оно подписывается автоматически. Но для создания релиз-версии
нам надо произвести дополнительно ряд действий.
При создании сертификата следует помнить, что при обновлении приложения система будет сравнивать сертификаты старой и новой версии.
И обновление будет происходить, если сертификаты обоих версий совпадут. Но если новая версия будет подписана новым сертификатом,
то приложение будет расцениваться как совершенно новое, никак не связанное со старой версией и представляющее совершенно другое приложение.
В этом случае чтобы его установить, новая версия должна будет иметь другой название пакета, нежели старая.
Во-первых, в Android Studio выберем в меню пункт Build -> Generate Signed APK. После этого нам откроется окно мастера:
Нажмем на кнопку Create new...
. После этого нам откроется окно создания ключа:
Введем в поле Key store path
путь к файлу сетификата, который будет создан. Если указанной папки не существует, то ее надо создать или определить
существующую папку.
В поле Password/Confirm указываем пароль.
В поле Alias
указываем псевдоним. Можно поставить произвольное название.
В поле First and Last Name
вписываем имя и фамилию. И далее пишим подразделение, организацию, город, страну и код страны.
В конце нажимаем OK.
После этого автоматически обновится первое окошко:
Далее нажмем на кнопку Next:
Финальное окно покажет нам путь к каталогу, где будет находиться подписанное приложение apk в release-версии. Нажмем на Finish.
Теперь по указанному пути можно будет найти подписанный apk, который будет иметь название app-release.apk:
Мы можем переименовать файл, сохранив его расширение и выложить в Play Market или на любой сайт или сразу загрузить на мобильное устройство.
После загрузки на телефон/планшет достоточно нажать на него, и с помощью стандартного установщика пакетов приложение будет установлено.
Правда, здесь также надо учитывать, что если мы устанавливаем приложение не из Play Market, то в настройках надо разрешить установку из других источниках –
Безопасность->Неизвестные источники (Разрешить установку приложений из других источников)