Android output metadata json

Что такое /release/output.json, генерируемое Android Studio

Недавно я заметил новый файл, генерируемый в /release/output.json by Android Studio 3 Canary 1 каждый раз, когда я запускаю Build — > Generate Signed APK. , содержимое которого выглядит следующим образом.

Может ли кто-нибудь подтвердить, что тоже видел такое поведение? Или это связано с какой-то локальной конфигурацией на моем ноутбуке?

И может ли кто-нибудь объяснить цель этого файла? Безопасно ли добавлять к .gitignore ?

7 ответов

Я создал очень простой модуль ‘Android Library’ только с одним классом, который отлично строится в debug releasing build/output/library-debug.aar Но когда я переключаюсь на release, даже если он говорит build successful, aar там нет. Проект Android Studio имеет только этот библиотечный модуль.

Что такое правильный способ использования spring boot в android studio build.gradle? Это то, что я использую- apply plugin: ‘com.android.application’ buildscript < repositories < mavenCentral() mavenLocal() jcenter() >dependencies <.

Android studio 3.0 отвечает за этот файл. Вам не нужно беспокоиться о файле output.json.

Позвольте мне объяснить вам это:

Для более старых версий Android Studio создавал подписанный APK и помещал его в папку «output». Даже если у вас есть несколько измерений вкуса для вашего APK, все они могут быть расположены в одном каталоге, который является выходной папкой. Начиная с последней версии Android Studio 3.0 (canary и stable), они организовали эту файловую структуру. Для каждого измерения вкуса всякий раз, когда вы подписываете APK, у него будет отдельная папка с соответствующим файлом output.json. Этот файл на самом деле не что иное, как описание источника APK. Как вы можете видеть, файл, которым вы поделились здесь, описывает выпущенный APK.

файл ouput.json — это своего рода файл метаданных для вашего сгенерированного APK. Этот файл создается по разным причинам. Я нашел некоторые из них, в которых, возможно, не перечислены все варианты использования, но вот список:

    Генерируется при выполнении Generate Signed APK

Сгенерировано для файла AndroidManifest.xml под

Он не генерируется для модульных тестов, а генерируется только для AndroidTests (что зависит от того, будет ли выполняться фреймворк Android)

  • Файл output.json , созданный для AndroidManifest.xml в указанном выше месте, немного отличается от файла, созданного для APK , как вы упомянули.
  • Как вы можете видеть, свойства, описанные в файле output.json , очень похожи на свойства, которые мы обычно указываем в нашем файле build.gradle , поэтому он должен использоваться &, необходимый для успешной работы процесса сборки (или он может быть создан в результате успешной сборки и извлечения необходимых свойств из build.gradle ).
  • Исходя из этого, мы можем сделать вывод, что это, безусловно, зависит от Android фреймворка, который будет создан & это связано с описанием деталей/информации о файле APK или манифеста .

    Я лично пытался найти правильный ответ на этот вопрос в Google & даже на веб-сайте разработчиков Android, но, похоже, об этом файле ничего подробно не задокументировано.

    Я проверил несколько проектов на GitHub & проверил файл .gitignore на то же самое, я не смог найти ни одного похожего файла output.json ни в одном из проектов, размещенных на GitHub. Поэтому хорошей практикой должно быть исключение их из ваших коммитов.

    Короче говоря, этот файл представляет собой описательный файл, содержащий важные метаданные о проекте. Он должен быть там по какой-то причине. Я бы посоветовал вам не связываться с этим, так как мы не знаем, к чему это может привести.

    Ниже приведен снипет файла app level gradle. buildTypes < release < postprocessing < removeUnusedCode false removeUnusedResources false obfuscate false optimizeCode false proguardFile 'proguard-rules.pro' >> > Вот, ‘postprocessing’, кажется, нового в файле gradle. Что это значит? Android studio.

    Сегодня я обновил свой Android Studio и запустил приложение, которое существовало с предыдущей версией. Когда я запускал приложение с предыдущей версией, приложение запускалось очень быстро, но когда я обновил android studio и запустил то же самое приложение с обновленной версией, то приложение.

    Для тех, кто хочет отключить эту функцию, вот мой трюк.
    Он просто удаляет output.json после генерации.

    В ответ на подробный ответ @wonsuc, вы можете попросить gradle удалить файл после успешной сборки, добавив следующий код в раздел android :

    В Android Studio 4.0 после успешной сборки появляется новый файл (apk или aab): app/release/output-metadata.json . Чтобы не раздражать его в Git , просто добавьте к

    В предыдущих версиях Android Studio я пытался автоматически назвать вывод apk на основе вывода git describe . Тем не менее, в то время как «Syncing Project with Gradle Files» Android Studio будет запускать сценарий gradle один раз и захватывать конфигурацию сборки, включая выходное имя файла, а затем предполагать, что каждая сборка будет продолжать использовать одно и то же имя.

    Поэтому всякий раз, когда я создавал новую фиксацию(коммит), фактическое выходное имя файла менялось. Но Android Studio либо установит старую версию, либо потерпит неудачу, если она была очищена.

    Я считаю, что output.json был добавлен, чтобы позволить Android Studio загружать все, что ему нужно знать о последней сборке, даже если вы настроили свой сценарий gradle, чтобы изменить что-то неожиданным образом.

    Это изменение специально не упоминается в примечаниях к выпуску плагина gradle ( https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0 )., хотя они внесли ряд радикальных изменений по соображениям производительности. Для меня имеет смысл, что они предпочли бы меньше запускать ваш скрипт gradle при синхронизации. Вместо этого захват информации о выходных данных сборки непосредственно из процесса сборки.

    Я добавляю ../../ в начало outputFileName , и файл APK помещается в папку output

    Читайте также:  Vplay для андроид последняя версия

    Похожие вопросы:

    Это может показаться тривиальным, но я действительно ничего не могу найти в Google, поэтому я спрашиваю здесь: Что такое Android Studio Terminal pane, упомянутый здесь (в разделе Добавить.

    Gradle немного сбивает с толку меня, а также любого нового разработчика Android. Может ли кто-нибудь объяснить, что такое Gradle в Android Studio и какова его цель? Почему он включен в Android.

    Что такое Android Studio эквивалент файла решения в файле (. sln) в Visual Studio ? Я создал проект в Android studio году и закрыл его. Теперь я не уверен, какой файл мне следует открыть, чтобы.

    Я создал очень простой модуль ‘Android Library’ только с одним классом, который отлично строится в debug releasing build/output/library-debug.aar Но когда я переключаюсь на release, даже если он.

    Что такое правильный способ использования spring boot в android studio build.gradle? Это то, что я использую- apply plugin: ‘com.android.application’ buildscript < repositories < mavenCentral().

    Сегодня я обновил свой Android Studio и запустил приложение, которое существовало с предыдущей версией. Когда я запускал приложение с предыдущей версией, приложение запускалось очень быстро, но.

    Мой проект android настроен на 2 типа сборки: Debug и Release . Я использую android studio 3.1.4. Я действительно определил хранилище ключей и другие ключевые детали для моего типа сборки Release .

    Я пытаюсь понять, что именно такое LLDB в Android Studio. Я новичок в Android Studio, и это немного озадачивает, если я должен установить это в системе AMD .

    Может ли кто-нибудь ясно объяснить, что такое Maven repository в Android Studio ? Я пытаюсь понять это, но не нахожу лучшего объяснения. В прошлый раз мне нужно было добавить некоторые зависимости в.

    Источник

    Что такое /release / output.JSON, созданный Android Studio

    недавно я заметил новый файл, сгенерированный в /release/output.json по Android Studio 3 Canary 1 каждый раз, когда я запускаю Build -> Generate Signed APK. , который имеет содержимое, которое выглядит следующим.

    может ли кто-нибудь подтвердить это поведение? Или это из-за какой-то локальной конфигурации на моем ноутбуке?

    и может ли кто-нибудь объяснить цель этого файла? Безопасно ли добавлять в .gitignore ?

    6 ответов

    за этот файл отвечает Android studio 3.0. Вам не нужно беспокоиться о выходе.файл json.

    позвольте мне объяснить вам это:

    для более старых версий, что сделала Android Studio, это создать подписанный APK и поместить его в папку «выход». Даже если у вас было несколько размеров вкуса для вашего APK, все они могли быть расположены в одном каталоге, который был выходной папкой. Из последней версии Android Studio 3.0 (canary и stable) у них есть организовал эту файловую структуру. Для каждого измерения вкуса, когда вы подписываете APK, у него будет отдельная папка с соответствующим выходом.файл json в нем. Этот файл на самом деле ничего, кроме описания source APK. Как вы можете видеть, файл, который вы поделились здесь, описывает выпущенный APK.

    ouput.json файл-это своего рода файл метаданных для сгенерированного APK. Этот файл генерируется по разным причинам. Я нашел некоторые из них, которые могут не перечислять все варианты использования, но вот список:

      создается, когда Generate Signed APK выполнена

    создается для под

    это не генерируется для модульных тестов, но генерируется только для AndroidTests (что зависит от Android framework для выполнения)

  • файл output.json создается для AndroidManifest.xml в указанном выше месте немного отличается от того, который генерируется для APK как вы упомянули.
  • как вы можете видеть свойства, описанные output.json файл очень похож на свойства, которые мы обычно указываем в нашем build.gradle файл, поэтому он должен использоваться и требуется для успешной работы процесса сборки (или он может быть создан в результате успешное построение и извлечение необходимых свойств из build.gradle ).
  • на этом мы можем сделать вывод, что это, безусловно, зависит от Android framework, который будет создан, и это связано с описанием деталей / информации о APK или Манифест .

    Я лично пытался Google и найти правильный ответ на это даже на веб-сайте разработчиков Android, но, похоже, ничего не документировано об этом файле в деталь.

    Я проверил несколько проектов на GitHub & checked .gitignore файл для того же самого, я не мог найти ничего подобного output.json файл в любом из проектов, размещенных на GitHub. Поэтому рекомендуется исключить их в ваших коммитах.

    короче говоря, этот файл является описательным файлом, содержащим важные метаданные о проекте. Это должно быть причина. Я бы посоветовал вам не связываться с ним, поскольку мы не знаем, что это может привести.

    Источник

    How to Fix the Error Invalid Main APK Outputs in Android

    Sometimes I feel like the world of Android development is funny. It is unpredictable at times. Or maybe Android studio is still learning. This one error occurred last week. I was sipping my coffee, watching the Gradle building my app, and all of a sudden, an error popped up in the build window.

    I was like, WTF just happened now. It was running without any errors all the while. And I was pretty sure I didn’t make any code changes. So what happened?

    As every other Android developer does, I tried the mighty ‘Invalidate Cache/Restart.’ Hoping that this will solve the issue. It should because it is the equivalent of a task manager in windows. But it didn’t resolve the issue. I tried many other known troubleshoot methods. Such as, clean the project, restart the IDE, rebuild it, etc. Nothing worked. Then I realized there is no point in scrambling and letting the Android studio know I’m scared. Because when the developer is troubled, the IDE will collapse. That’s the ultimate truth.

    When I thought about it carefully, I did change something. I checked out from one git branch to another. Then again, will a change in the git branch can cause such an error? Probably not. So I went to the location shown in the error.

    Читайте также:  Все оформление для android

    I’ll explain the contents inside the output-metadata.json in a few minutes. Before that, I will just explain the structure of the project/app I was working. Our project is running on multiple flavors. Which means, we are changing the logic or working of the application according to it’s flavors. And two different git branches have got different flavors as well.

    Imagine if branch_1 flavor list contains type_1, type_2, and type_3 flavors. And branch_2 flavor list contains type_2, and type_3 flavors.

    Think you were working on branch_1 and your current flavor was type_1. All of a sudden, you had to move to branch_2 and work on the flavor, type_2. And when you run the app, Kaboom.

    Now, if you check the above output-metadata.json. The contents will be still that of the type_1 flavors.

    So, Android studio was stunned at the speed at which these changes happened. It couldn’t really analyze it properly and hence this error occurred. So, what is an output-metadata.json? As explained here,

    For older versions, what Android Studio did was generate a signed APK and put it in the “output” folder. Even If you had multiple flavor dimensions for your APK, all of them could be located at the same directory, which was the output folder. From the latest release of Android Studio 3.0 (canary and stable), they have organized this file structure. For every flavor dimension, whenever you sign an APK, it will have a separate folder with a corresponding output.json file in it. This file is actually nothing but a description of the source APK. As you can see, the file you shared here is describing the released APK.

    So, in order to fix this issue. Go to the destination folder and then delete the output-metadata.json file. It will regenerate with the correct file contents once you rebuild the project. Try running the app again and verify that no errors are present.

    I hope you were able to learn something new today. If you want to add any more points, please comment below. Thank you for your time. Stay safe. Happy coding.

    Источник

    Android: парсим JSON правильно

    Любой Android-разработчик рано или поздно сталкивается с форматом представления данных типа JSON. Наиболее часто он используется для передачи/получения данных с какого-либо сервера. Формат предельно прост, подробнее о нём можно почитать в Википедии:

    «JSON (JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Несмотря на происхождение от JavaScript, формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON».

    Любой класс в Java или Kotlin можно представить в виде структуры JSON, где есть поля, атрибуты, фигурные скобки обозначают объект, квадратные скобки — массив.

    Следующий пример показывает JSON-представление данных об объекте, описывающем человека. В данных присутствуют строковые поля имени и фамилии, информация об адресе и массив, содержащий список телефонов. Как видно из примера, значение может представлять собой вложенную структуру:

    Наиболее популярный среди разработчиков способ трансформировать данные в JSON и обратно — это библиотека GSON от самих разработчиков Google. Она очень проста в использовании, мало весит и интегрирована во многие библиотеки.

    На данный момент все, за редким исключением, Android-разработчики используют Kotlin, а GSON (как и другие подобные библиотеки типа Jackson или Moshi) написана на Java. Это не страшно, потому что Kotlin и Java полностью взаимозаменяемы, но есть небольшие нюансы, которые могут привести к совершенно неожиданным результатам.

    Давайте создадим класс User и посмотрим на эти нюансы на практике. В этом классе у нас будут обычные поля и поля со значениями по умолчанию. Как вы знаете, в Java нельзя присваивать переменным значения по умолчанию, а в Kotlin можно:

    И теперь представим, что с какого-то сервера пришли данные о пользователе в формате JSON:

    Теперь нам нужно распарсить этот JSON и превратить его в обычный класс Kotlin с помощью библиотеки GSON. Добавим зависимость GSON в наш проект в файл Gradle

    и сразу напишем тест:

    Тест прекрасно выполняется без единой ошибки, то есть код работает. Но обратите внимание, что возраст пользователя у нас == 0, а его роль не определена, хотя в самом классе у нас прописаны значения по умолчанию для этих переменных. Если эти параметры не определены в JSON, должны подставляться значения по умолчанию: возраст == 13, а роль == Viewer, но они не подставляются, а код всё равно работает. Вот так неожиданность! Не такого поведения мы ожидали!

    Давайте разбираться. Дело в том, что, как мы писали выше, библиотека GSON написана на Java, а это значит, что значения по умолчанию для несуществующих полей такие: для примитива int — это 0, для отсутствующего объекта — это null. Простая трансформация JSON в класс на Kotlin может легко сломать null-safety, на который так рассчитывают все разработчики, и может привести к падению приложения там, где оно падать не должно.

    И тут нам на помощь приходит котлиновская библиотека по сериализации объектов.

    Сериализация от Kotlin

    Это небольшая вспомогательная библиотечка от разработчиков языка, которая работает с помощью аннотации @Serializable. С ней у вас не будет проблем при использовании полей по умолчанию. Чтобы подключить библиотеку к своему проекту, нужно прописать в файле Gradle плагин и несколько зависимостей. В файле проекта build.gradle(Project):

    Читайте также:  Все для android p500

    В файле проекта build.gradle(Module:app):

    Теперь трансформация JSON (сериализация) будет проходить корректно. Напишем наш класс и добавим аннотацию:

    Тест пройден успешно! Теперь класс сериализуется у нас со значениями по умолчанию, если таковые прописаны в классе.

    Сериализация от Kotlin + Retrofit

    Если вы хоть раз отправляли запрос на сервер или получали с сервера какой-то ответ, то наверняка вы знакомы с библиотекой Retrofit. В этой библиотеке нет поддержки сериализации от Kotlin, но у вас есть возможность добавить вспомогательную библиотеку от Джека Вортона в качестве зависимости Gradle:

    Теперь при использовании Retrofit сериализация будет происходить автоматически:

    Дополнительно, но не обязательно вы можете использовать JsonConfiguration для выключения StrictMode. StrictMode включен по умолчанию и запрещает использование неизвестных ключей в JSON и нечисловые значения в числах с плавающей точкой. Хорошая практика — включать StrictMode в «дебажной» версии приложения и выключать его в «релизной».

    Читайте больше полезных статей для начинающих Android-разработчиков:

    А если затянет — приходите на факультет Android-разработки. В время учебы вы разработаете Android-приложение и выложите его в Google Play, даже если никогда не программировали. А также своите языки Java и Kotlin, командную разработку, Material Design и принципы тестирования.

    Любой Android-разработчик рано или поздно сталкивается с форматом представления данных типа JSON. Наиболее часто он используется для передачи/получения данных с какого-либо сервера. Формат предельно прост, подробнее о нём можно почитать в Википедии:

    «JSON (JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Несмотря на происхождение от JavaScript, формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON».

    Любой класс в Java или Kotlin можно представить в виде структуры JSON, где есть поля, атрибуты, фигурные скобки обозначают объект, квадратные скобки — массив.

    Следующий пример показывает JSON-представление данных об объекте, описывающем человека. В данных присутствуют строковые поля имени и фамилии, информация об адресе и массив, содержащий список телефонов. Как видно из примера, значение может представлять собой вложенную структуру:

    Наиболее популярный среди разработчиков способ трансформировать данные в JSON и обратно — это библиотека GSON от самих разработчиков Google. Она очень проста в использовании, мало весит и интегрирована во многие библиотеки.

    На данный момент все, за редким исключением, Android-разработчики используют Kotlin, а GSON (как и другие подобные библиотеки типа Jackson или Moshi) написана на Java. Это не страшно, потому что Kotlin и Java полностью взаимозаменяемы, но есть небольшие нюансы, которые могут привести к совершенно неожиданным результатам.

    Давайте создадим класс User и посмотрим на эти нюансы на практике. В этом классе у нас будут обычные поля и поля со значениями по умолчанию. Как вы знаете, в Java нельзя присваивать переменным значения по умолчанию, а в Kotlin можно:

    И теперь представим, что с какого-то сервера пришли данные о пользователе в формате JSON:

    Теперь нам нужно распарсить этот JSON и превратить его в обычный класс Kotlin с помощью библиотеки GSON. Добавим зависимость GSON в наш проект в файл Gradle

    и сразу напишем тест:

    Тест прекрасно выполняется без единой ошибки, то есть код работает. Но обратите внимание, что возраст пользователя у нас == 0, а его роль не определена, хотя в самом классе у нас прописаны значения по умолчанию для этих переменных. Если эти параметры не определены в JSON, должны подставляться значения по умолчанию: возраст == 13, а роль == Viewer, но они не подставляются, а код всё равно работает. Вот так неожиданность! Не такого поведения мы ожидали!

    Давайте разбираться. Дело в том, что, как мы писали выше, библиотека GSON написана на Java, а это значит, что значения по умолчанию для несуществующих полей такие: для примитива int — это 0, для отсутствующего объекта — это null. Простая трансформация JSON в класс на Kotlin может легко сломать null-safety, на который так рассчитывают все разработчики, и может привести к падению приложения там, где оно падать не должно.

    И тут нам на помощь приходит котлиновская библиотека по сериализации объектов.

    Сериализация от Kotlin

    Это небольшая вспомогательная библиотечка от разработчиков языка, которая работает с помощью аннотации @Serializable. С ней у вас не будет проблем при использовании полей по умолчанию. Чтобы подключить библиотеку к своему проекту, нужно прописать в файле Gradle плагин и несколько зависимостей. В файле проекта build.gradle(Project):

    В файле проекта build.gradle(Module:app):

    Теперь трансформация JSON (сериализация) будет проходить корректно. Напишем наш класс и добавим аннотацию:

    Тест пройден успешно! Теперь класс сериализуется у нас со значениями по умолчанию, если таковые прописаны в классе.

    Сериализация от Kotlin + Retrofit

    Если вы хоть раз отправляли запрос на сервер или получали с сервера какой-то ответ, то наверняка вы знакомы с библиотекой Retrofit. В этой библиотеке нет поддержки сериализации от Kotlin, но у вас есть возможность добавить вспомогательную библиотеку от Джека Вортона в качестве зависимости Gradle:

    Теперь при использовании Retrofit сериализация будет происходить автоматически:

    Дополнительно, но не обязательно вы можете использовать JsonConfiguration для выключения StrictMode. StrictMode включен по умолчанию и запрещает использование неизвестных ключей в JSON и нечисловые значения в числах с плавающей точкой. Хорошая практика — включать StrictMode в «дебажной» версии приложения и выключать его в «релизной».

    Читайте больше полезных статей для начинающих Android-разработчиков:

    А если затянет — приходите на факультет Android-разработки. В время учебы вы разработаете Android-приложение и выложите его в Google Play, даже если никогда не программировали. А также своите языки Java и Kotlin, командную разработку, Material Design и принципы тестирования.

    Источник

    Оцените статью