<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="androidmanagement_v1.html">Android Management API</a> . <a href="androidmanagement_v1.enterprises.html">enterprises</a> . <a href="androidmanagement_v1.enterprises.applications.html">applications</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(name, languageCode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets info about an application.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(name, languageCode=None, x__xgafv=None)</code>
  <pre>Gets info about an application.

Args:
  name: string, The name of the application in the form enterprises/{enterpriseId}/applications/{package_name}. (required)
  languageCode: string, The preferred language for localized application info, as a BCP47 tag (e.g. &quot;en-US&quot;, &quot;de&quot;). If not specified the default language of the application will be used.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Information about an app.
    &quot;name&quot;: &quot;A String&quot;, # The name of the app in the form enterprises/{enterpriseId}/applications/{package_name}.
    &quot;permissions&quot;: [ # The permissions required by the app.
      { # A permission required by the app.
        &quot;description&quot;: &quot;A String&quot;, # A longer description of the permission, providing more detail on what it affects. Localized.
        &quot;name&quot;: &quot;A String&quot;, # The name of the permission. Localized.
        &quot;permissionId&quot;: &quot;A String&quot;, # An opaque string uniquely identifying the permission. Not localized.
      },
    ],
    &quot;managedProperties&quot;: [ # The set of managed properties available to be pre-configured for the app.
      { # Managed property.
        &quot;key&quot;: &quot;A String&quot;, # The unique key that the app uses to identify the property, e.g. &quot;com.google.android.gm.fieldname&quot;.
        &quot;description&quot;: &quot;A String&quot;, # A longer description of the property, providing more detail of what it affects. Localized.
        &quot;defaultValue&quot;: &quot;&quot;, # The default value of the property. BUNDLE_ARRAY properties don&#x27;t have a default value.
        &quot;title&quot;: &quot;A String&quot;, # The name of the property. Localized.
        &quot;entries&quot;: [ # For CHOICE or MULTISELECT properties, the list of possible entries.
          { # An entry of a managed property.
            &quot;name&quot;: &quot;A String&quot;, # The human-readable name of the value. Localized.
            &quot;value&quot;: &quot;A String&quot;, # The machine-readable value of the entry, which should be used in the configuration. Not localized.
          },
        ],
        &quot;type&quot;: &quot;A String&quot;, # The type of the property.
        &quot;nestedProperties&quot;: [ # For BUNDLE_ARRAY properties, the list of nested properties. A BUNDLE_ARRAY property is at most two levels deep.
          # Object with schema name: ManagedProperty
        ],
      },
    ],
    &quot;appTracks&quot;: [ # Application tracks visible to the enterprise.
      { # Id to name association of a app track.
        &quot;trackId&quot;: &quot;A String&quot;, # The unmodifiable unique track identifier, taken from the releaseTrackId in the URL of the Play Console page that displays the app’s track information.
        &quot;trackAlias&quot;: &quot;A String&quot;, # The track name associated with the trackId, set in the Play Console. The name is modifiable from Play Console.
      },
    ],
    &quot;title&quot;: &quot;A String&quot;, # The title of the app. Localized.
  }</pre>
</div>

</body></html>