этот объект app bundle содержит нативный код
Новый способ публикации приложений с помощью Android App Bundle
На недавно прошедшей Google I/O 2018, среди множества нововведений, объявили также о добавлении нового формата приложений.
Этот формат получил название Android App Bundle и представляет собой улучшенный способ сборки вашего приложения. С его помощью можно легко оптимизировать размер приложения, при этом не нужно будет вносить какие-либо изменения в код. Android App Bundle включает весь скомпилированный код и ресурсы, отсеивая затем то, что не нужно конкретному устройству.
Важно! На данный момент Android App Bundle работает только в preview-версии Android Studio. Последняя версия Android Studio 3.2 Canary доступна здесь.
Формат Android App Bundle
Android App Bundle представляет собой файл (с расширением .aab), который загружается в Google. Каждый бандл включает скомпилированный код и ресурсы для всех модулей приложения и поддерживаемых конфигураций устройств.
Проще говоря, бандлы это подписанные ZIP-файлы, которые упорядочивают код и ресурсы приложения в модули.
Из этих модулей Google Play генерирует различные APK, которые предоставляются пользователям, такие как: базовые APK, dynamic feature APK, конфигурационные APK и (для устройств, которые не поддерживают разделённые APK) мульти-APK. Каталоги, окрашенные в синий цвет, представляют собой код и ресурсы, которые Google Play использует для создания конфигурационного APK для каждого модуля.
Примечание: бандл нужно создавать для каждого уникального приложения или applicationID. То есть, если вы используете несколько product flavor в своём приложении для создания различных APK, и каждая из этих веток использует уникальный applicationID, то вам нужно будет создать отдельный бандл для каждой ветки.
Код и ресурсы для каждого модуля организованы аналогично стандартным APK, и это логично, поскольку каждый из этих модулей может быть сгенерирован как отдельный APK. Ниже можно увидеть более подробное описание некоторых файлов и каталогов Android App Bundle:
Сборка App Bundle с помощью Android Studio
Создание бандла с помощью Android Studio очень похоже на создание APK. Для сборки достаточно выбрать в меню Build — Build Bundle(s)/APK(s) > Build Bundle(s) и IDE создаст бандл для выбранного варианта сборки и разместит его в каталоге
Если создаётся бандл для debug-версии приложения, Android Studio автоматически подпишет бандл с помощью отладочного ключа подписи. Для загрузки бандла в Google Play он должен быть подписан.
После того, как Android Studio завершит создание подписанного бандла, его можно будет открыть и проанализировать. Анализ бандла позволяет проверить содержимое и работает аналогично APK Analyzer.
Для создания App Bundle IDE использует тот же инструмент с открытыми исходным кодом, называемый bundletool, который Google Play использует для последующего преобразования бандла в подписанные APK.
Прежде чем загрузить бандл в консоль Google Play, его нужно подписать. Чтобы создать подписанный App Bundle, нужно выполнить следующие действия:
После того, как Android Studio завершит создание подписанного бандла, его можно будет найти и проанализировать, выбрав соответствующую опцию во всплывающем уведомлении. Если был выбран экспорт ключа подписи, то к нему можно будет быстро перейти, щёлкнув по стрелке вниз в правом нижнем углу всплывающего уведомления, чтобы развернуть его, и затем выбрав Show Exported Key File.
Загрузка App Bundle в консоль Google Play
После того, как бандл создан, его можно загрузить в Google Play для проверки, тестирования или публикации приложения. Прежде чем приступить к работе, следует соблюсти следующие условия:
Анализ APK с помощью проводника
Когда бандл загружен, Google Play автоматически генерирует разделённые APK и мульти-APK для всех конфигураций устройств, поддерживаемых приложением. В Play Console можно можно использовать App Bundle Explorer для просмотра всех вариантов APK, сгенерированных Google Play; анализа данных, таких как поддерживаемые устройства и экономия размера APK; загрузки созданных APK для тестирования.
Обновление приложения
После загрузки приложения в Play Console, для обновления приложения достаточно повысить код версии, а также создать и загрузить новый бандл. Затем Google Play сгенерирует обновлённые APK с новым кодом версии и будет предоставлять их по мере необходимости.
Заключение
Использование Android App Bundle даёт большие преимущества для оптимизации APK приложений. С помощью этого способа мы обновили одно из наших приложений, «Менеджер паролей от Wi-Fi сетей«, заменив в нём стандартный APK на App Bundle. Таким образом, размер APK файлов уменьшился на целый мегабайт, что является очень хорошим результатом.
Кроме того, Google на данный момент тестирует дополнение к App Bundle, Dynamic feature modules, с помощью которого можно разбивать базовый APK на части, которые будут докачиваться при необходимости, пока что эта технология находится в бета-версии.
Возможно, единственным недостатком банлдов на данный момент назвать необходимость использовать preview-версию Android Studio, однако эта проблема временная.
Android: многопоточное программирование, внутренности App Bundle и мгновенный перезапуск приложений
Содержание статьи
Почитать
Удаляем/отключаем любые предустановленные приложения без root
How to disable any pre-installed system app bloatware on Android without root — несколько баянистая, но оттого не менее полезная статья о том, как отключить любое предустановленное на устройство приложение, не имея прав root.
Для начала необходимо активировать ADB в настройках разработчика на устройстве (как это сделать, написано на каждом углу) и установить ADB на комп. Затем с помощью любой утилиты для управления приложениями нужно узнать точное имя пакета этого приложения. Автор статьи рекомендует использовать для этого App Inspector.
Далее открываем терминал на ПК и выполняем такую команду:
В случае необходимости приложение можно включить снова:
А с помощью такой команды можно просмотреть список отключенных приложений:
Кроме того, приложение можно полностью удалить с устройства:
Список отключенных пакетов
Разработчику
Все, что нужно знать об App Bundle
Android App Bundles: Getting Started — большая статья о новом формате распространения приложений App Bundle, позволяющем существенно сократить размер приложения, которое пользователям придется скачивать и устанавливать.
Идея App Bundle достаточно проста. Android-смартфоны могут быть очень разными, поэтому разработчикам необходимо заботиться о таких вещах, как разные размеры иконок для разных разрешений экрана, переводы на другие языки и сборки нативных библиотек для разных архитектур процессоров. В результате пользователям приходится скачивать громоздкое приложение, включающее код и данные, которые на их конкретном телефоне не нужны.
Частично эту проблему можно решить самостоятельно, разделив приложение на несколько разных версий с помощью директив buildTypes и splits системы сборки Gradle. Однако в этом случае их все приходится заливать в Google Play по отдельности, а это может превратиться в кошмар, если в результате разделения получится десяток различных версий.
Также статья содержит другую интересную информацию:
Или так, если ты хочешь установить их на смартфон:
Чтобы сразу установить приложение на смартфон, используй такую команду:
App Bundle после разделения на APK
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
этот объект app bundle содержит нативный код
This Is Regarding PlayStore Warning debug symbols
I Have Successfully Build Gradle After Adding Line To build.gradle(app)
2 Answers 2
Then it created on folder build->outputs->native-debug-symbols
I don’t know to be sure what cause that, but what I tried is change the code
from android.defaultConfig.ndk.debugSymbolLevel = ‘FULL’
to android.buildTypes.release.ndk.debugSymbolLevel = ‘FULL’
Also I double check wether NDK is downloaded into my SDK.
And also there is android.ndkVersion ‘22.1.7171670’ generated inside my build.gradle
I am not sure if the answer by @MuhammadKamal worked for me but it may have put me on the right track. I think more than just the latest NDK are needed for this to work properly. I was previously using Android Studio 4.2.1 but was sticking to older versions of CMake and NDK and used Gradle Plugin 4.2.1.
To make the debug symbols to be generated I updated all my build.gradle files and now the android application bundle (AAB) looks different as it did before and the native-debug-symbols.zip was also not generated on my system.
I believe that NDK version 22.1.7171670 is required for debug symbols to be added to the AAB automatically. android.ndkVersion ‘22.1.7171670’
And I am now using Gradle Plugin 4.2.2 in Android Studio 4.2.2.
I am not entirely sure which of these changes if not all made the debug symbols get embedded into the AAB automatically and the zip file generated. If just the newer NDK is needed please feel free to accept the answer by @MuhammadKamal. I wanted to document for others what worked in my build to fill in any blanks and potentially help resolve the issue.
The debug symbols will be stored inside the AAB in this location: BUNDLE-METADATA\com.android.tools.build.debugsymbols\\libX.dbg
Strictly speaking @DevDasTour was asking about the APK and the native-debug-symbols.zip only. From my testing the APK cannot contain the debug symbols while the ABB can.
If you still wish to upload the APK and the debug symbols separately to Google Play the native-debug-symbols.zip are generated here:
BTW the AAB will also contain the Java de-obfuscation mapping so that makes it just one file to uploaded to Google Play.
Создание проекта под Android
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Построение unity проекта под платформу android?
Как сделать что бы после сборки проекта в unity под android формировался не apk файл а sln решение.
Создание программ под Android на Unity 3d
Установила Unity 3d 4, чтобы создавать программы под Android. В интернете весь обучающий материал.
Компиляция проекта на C++ под Android
Здравствуйте уважаемые программисты! Подскажите пожалуйста, как готовыq проект на С++.
Портирование проекта под android на ios
Доброго времени суток, возможно ли, разрабатывая игру на C++ под Android портировать без особых.
oleg rus,
Конкретно по Keystore начинается с 3:15. Но советую посмотреть весь ролик по настройке.
Так же нужно знать, что Google play уже не принимает проекты без поддержки ARM64 Для этого в настройках билда нужно сделать так как на картинке.
Важно!
После загрузки подписанного билда в Play Market, вы не сможете изменить файл Keystore для этого проекта. По этому сохраните файл цифровой подписи в надежном месте и запомните пароль. Восстановление крайне сложный процесс! Так же при каждом новом билде, нужно будет каждый раз указывать ссылку на файл ключа и вводить пароль к нему.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ‘:signReleaseBundle’.
> 1 exception was raised by workers:
java.lang.RuntimeException: jarsigner.exefailed with exit code 1 :
jarsigner error: java.lang.RuntimeException: keystore load: Keystore was tampered with, or password was incorrect
BUILD FAILED in 2m 36s
]
stdout[
> Configure project :
WARNING: The option setting ‘android.bundle.enableUncompressedNativeLibs=false’ is experimental and unsupported.
The current default is ‘true’.
> Task reBuild UP-TO-DATE
> Task reReleaseBuild
> Task :compileReleaseRenderscript NO-SOURCE
> Task :generateReleaseResValues
> Task :generateReleaseResources
> Task :mergeReleaseResources
> Task :checkReleaseManifest
> Task :createReleaseCompatibleScreenManifests
> Task :mainApkListPersistenceRelease
> Task rocessReleaseManifest
> Task :bundleReleaseResources
> Task :mergeReleaseShaders
> Task :compileReleaseShaders
> Task :generateReleaseAssets
> Task :mergeReleaseAssets
> Task :checkReleaseDuplicateClasses
> Task :compileReleaseAidl NO-SOURCE
> Task :generateReleaseBuildConfig
> Task repareLintJar
> Task :generateReleaseSources
> Task :javaPreCompileRelease
> Task rocessReleaseResources
> Task :compileReleaseJavaWithJavac
> Task :transformClassesWithDexBuilderForRelease
> Task :transformDexArchiveWithExternalLibsDexMergerForRelease
> Task :transformDexArchiveWithDexMergerForRelease
> Task :mergeReleaseJniLibFolders
> Task :transformNativeLibsWithMergeJniLibsForRelease
> Task :transformNativeLibsWithStripDebugSymbolForRelease
> Task rocessReleaseJavaRes NO-SOURCE
> Task :transformResourcesWithMergeJavaResForRelease
> Task :buildReleasePreBundle
> Task :collectReleaseDependencies
> Task :configureReleaseDependencies
> Task ackageReleaseBundle
> Task :validateSigningRelease
> Task :signingConfigWriterRelease
> Task :signReleaseBundle FAILED
Android: многопоточное программирование, внутренности App Bundle и мгновенный перезапуск приложений
Содержание статьи
Почитать
Удаляем/отключаем любые предустановленные приложения без root
How to disable any pre-installed system app bloatware on Android without root — несколько баянистая, но оттого не менее полезная статья о том, как отключить любое предустановленное на устройство приложение, не имея прав root.
Для начала необходимо активировать ADB в настройках разработчика на устройстве (как это сделать, написано на каждом углу) и установить ADB на комп. Затем с помощью любой утилиты для управления приложениями нужно узнать точное имя пакета этого приложения. Автор статьи рекомендует использовать для этого App Inspector.
Далее открываем терминал на ПК и выполняем такую команду:
В случае необходимости приложение можно включить снова:
А с помощью такой команды можно просмотреть список отключенных приложений:
Кроме того, приложение можно полностью удалить с устройства:
Список отключенных пакетов
Разработчику
Все, что нужно знать об App Bundle
Android App Bundles: Getting Started — большая статья о новом формате распространения приложений App Bundle, позволяющем существенно сократить размер приложения, которое пользователям придется скачивать и устанавливать.
Идея App Bundle достаточно проста. Android-смартфоны могут быть очень разными, поэтому разработчикам необходимо заботиться о таких вещах, как разные размеры иконок для разных разрешений экрана, переводы на другие языки и сборки нативных библиотек для разных архитектур процессоров. В результате пользователям приходится скачивать громоздкое приложение, включающее код и данные, которые на их конкретном телефоне не нужны.
Частично эту проблему можно решить самостоятельно, разделив приложение на несколько разных версий с помощью директив buildTypes и splits системы сборки Gradle. Однако в этом случае их все приходится заливать в Google Play по отдельности, а это может превратиться в кошмар, если в результате разделения получится десяток различных версий.
Также статья содержит другую интересную информацию:
Или так, если ты хочешь установить их на смартфон:
Чтобы сразу установить приложение на смартфон, используй такую команду:
App Bundle после разделения на APK
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Новый способ публикации приложений с помощью Android App Bundle
На недавно прошедшей Google I/O 2018, среди множества нововведений, объявили также о добавлении нового формата приложений.
Этот формат получил название Android App Bundle и представляет собой улучшенный способ сборки вашего приложения. С его помощью можно легко оптимизировать размер приложения, при этом не нужно будет вносить какие-либо изменения в код. Android App Bundle включает весь скомпилированный код и ресурсы, отсеивая затем то, что не нужно конкретному устройству.
Важно! На данный момент Android App Bundle работает только в preview-версии Android Studio. Последняя версия Android Studio 3.2 Canary доступна здесь.
Формат Android App Bundle
Android App Bundle представляет собой файл (с расширением .aab), который загружается в Google. Каждый бандл включает скомпилированный код и ресурсы для всех модулей приложения и поддерживаемых конфигураций устройств.
Проще говоря, бандлы это подписанные ZIP-файлы, которые упорядочивают код и ресурсы приложения в модули.
Из этих модулей Google Play генерирует различные APK, которые предоставляются пользователям, такие как: базовые APK, dynamic feature APK, конфигурационные APK и (для устройств, которые не поддерживают разделённые APK) мульти-APK. Каталоги, окрашенные в синий цвет, представляют собой код и ресурсы, которые Google Play использует для создания конфигурационного APK для каждого модуля.
Примечание: бандл нужно создавать для каждого уникального приложения или applicationID. То есть, если вы используете несколько product flavor в своём приложении для создания различных APK, и каждая из этих веток использует уникальный applicationID, то вам нужно будет создать отдельный бандл для каждой ветки.
Код и ресурсы для каждого модуля организованы аналогично стандартным APK, и это логично, поскольку каждый из этих модулей может быть сгенерирован как отдельный APK. Ниже можно увидеть более подробное описание некоторых файлов и каталогов Android App Bundle:
Сборка App Bundle с помощью Android Studio
Создание бандла с помощью Android Studio очень похоже на создание APK. Для сборки достаточно выбрать в меню Build — Build Bundle(s)/APK(s) > Build Bundle(s) и IDE создаст бандл для выбранного варианта сборки и разместит его в каталоге
Если создаётся бандл для debug-версии приложения, Android Studio автоматически подпишет бандл с помощью отладочного ключа подписи. Для загрузки бандла в Google Play он должен быть подписан.
После того, как Android Studio завершит создание подписанного бандла, его можно будет открыть и проанализировать. Анализ бандла позволяет проверить содержимое и работает аналогично APK Analyzer.
Для создания App Bundle IDE использует тот же инструмент с открытыми исходным кодом, называемый bundletool, который Google Play использует для последующего преобразования бандла в подписанные APK.
Прежде чем загрузить бандл в консоль Google Play, его нужно подписать. Чтобы создать подписанный App Bundle, нужно выполнить следующие действия:
После того, как Android Studio завершит создание подписанного бандла, его можно будет найти и проанализировать, выбрав соответствующую опцию во всплывающем уведомлении. Если был выбран экспорт ключа подписи, то к нему можно будет быстро перейти, щёлкнув по стрелке вниз в правом нижнем углу всплывающего уведомления, чтобы развернуть его, и затем выбрав Show Exported Key File.
Загрузка App Bundle в консоль Google Play
После того, как бандл создан, его можно загрузить в Google Play для проверки, тестирования или публикации приложения. Прежде чем приступить к работе, следует соблюсти следующие условия:
Анализ APK с помощью проводника
Когда бандл загружен, Google Play автоматически генерирует разделённые APK и мульти-APK для всех конфигураций устройств, поддерживаемых приложением. В Play Console можно можно использовать App Bundle Explorer для просмотра всех вариантов APK, сгенерированных Google Play; анализа данных, таких как поддерживаемые устройства и экономия размера APK; загрузки созданных APK для тестирования.
Обновление приложения
После загрузки приложения в Play Console, для обновления приложения достаточно повысить код версии, а также создать и загрузить новый бандл. Затем Google Play сгенерирует обновлённые APK с новым кодом версии и будет предоставлять их по мере необходимости.
Заключение
Использование Android App Bundle даёт большие преимущества для оптимизации APK приложений. С помощью этого способа мы обновили одно из наших приложений, «Менеджер паролей от Wi-Fi сетей«, заменив в нём стандартный APK на App Bundle. Таким образом, размер APK файлов уменьшился на целый мегабайт, что является очень хорошим результатом.
Кроме того, Google на данный момент тестирует дополнение к App Bundle, Dynamic feature modules, с помощью которого можно разбивать базовый APK на части, которые будут докачиваться при необходимости, пока что эта технология находится в бета-версии.
Возможно, единственным недостатком банлдов на данный момент назвать необходимость использовать preview-версию Android Studio, однако эта проблема временная.
Отладка нативного кода Android NDK в Windows
Введение
Доброго времени суток!
Однажды передо мною встала задача отловить непонятное падение в моем приложении. Насколько я знал тогда, Android NDK предоставлял возможность отлаживать C++ код, однако я смутно представлял себе, как это сделать. К сожалению, толковой информации по отладке нативного кода было очень мало. Потратив на это дело несколько вечеров, я все-таки разобрался и наладил отладку. Сейчас я расскажу о том, как это можно сделать и расскажу о том, какие грабли могут ожидать вас, если вы задумаете повторить мой путь.
Для удобства я создал проект приложения для отладки — NdkDebugTest. Приложение показывает черный экран, а при нажатии на экран вызывается нативный код, который убивает приложение. Проект состоит из двух java-файлов и одного jni-файла. Это, соответственно, код Activity, код для JNI-оболочки и нативный код.
Код Activity довольно простой — при любом прикосновении вызывается нативная функция OnInput. Также при создании Activity вызывается пустой метод DoInit(), чья задача — запустить статическую загрузку нативных библиотек из JniWrapper.java (если этого не сделать, мы попадем на грабли, см. ниже).
public class MainActivity extends Activity
public boolean onTouchEvent(MotionEvent event)
Оболочка Jni тоже довольно простая:
public class JniWrapper
public static void DoInit()
public static native void OnInput(float x, float y);
>
Ну и собственно нативный код. Здесь из Jni-функции вызывается другая функция, которая и убивает приложение:
JNIEXPORT void JNICALL Java_fishrungames_ndkdebugtest_JniWrapper_OnInput(JNIEnv * env, jobject obj, float x, float y)
Как я и писал выше, после запуска приложения при любом нажатии пальцем приложение падает. Наша задача — найти место падения и посмотреть backtrace. Итак, приступим.
Инструменты
Подготовка
3) После этого запускаем Cygwin, отправляется в каталог с проектом и запускаем cборку с ключом NDK_DEBUG=1:
ndk-build NDK_DEBUG=1
Если все сделано правильно, то в каталоге проекта в подкаталоге libs/ / появятся файлы gdb.setup и gdbserver.
4) В gdb.setup указываются базовые настройки дебаггера — в каких каталогах искать заголовки и библиотеки. Надо проверить, все ли пути к заголовкам указаны и, при необходимости, дописать свои пути.
Здесь лежат грабли. Почему-то при каждой пересборке в этом файле сбиваются символы переноса строк, из-за чего настройки не считываются. Следует убедится, что в файле применен UNIX-перенос строк. Мне приходилось после каждого вызова ndk-build пересохранять gdb.setup с другим переносом строк!
При запуске отладчика этот файл (gdb.setup) автоматически дополняется другими параметрами и копируется в obj/local/ /. Все нативные библиотеки, необходимые для работы приложения, также хранятся в obj/local/ /. Если сборка прошла верно, то библиотеки содержат в себе дебажные символы. Если вы в этом сомневаетесь, то наличие или отсутствие дебажных символов возможно проверить прямо из консоли Cygwin с помощью утилиты nm, указав в качестве параметра искомый so-файл:
nm /obj/local/armeabi/libNdkDebugLib.so
В некоторых старых версиях android-ndk также рекомендовалось отредактировать файл build/core/build-binary.mk, а именно: поменять строчку:
Отладка
Здесь лежат еще одни грабли. Убедитесь, что все нативные библиотеки (в нашем случае — NdkDebugTestLib) загружены до запуска! Проверить это можно, поставив брейкпоинт на загрузке библиотеки.
Если все сделано правильно, перед вами появится длинный список библиотек, для которых символы не были загружены. Убедитесь, что среди них нету вашей библиотеки (в нашем случае — libNdkDebugTestLib.so).
Если все пройдет хорошо, мы увидим приглашение к вводу:
Продолжим выполнение командой continue. Затем нажимаем пальцем на экран девайса, и приложение падает, указав точку падения:
Падение произошло при вызове *x = 1; в строке 6 в файле jni/android_api.cpp, как и ожидалось.
Вводим backtrace — и видим стек вызовов функций, которые привели к падению:
Заключение
Что же, цель достигнута — мы нашли место падения приложения, и увидели стек вызовов. Используя отладчик, можно ставить брейкпойнты, вычислять выражения и делать многое другое, но найти информацию о том как использовать отладчик командной строки проблем не составит.