Skip to content

Commit

Permalink
Version 4.0.0 Alexa Auto SDK
Browse files Browse the repository at this point in the history
The Alexa Auto SDK is for automotive OEMs to integrate Alexa directly into vehicles.

**v4.0.0**

* v4.0.0 released on 2021-12-15

**Enhancements**
* Deprecated the C++ and Java platform interfaces in favor of an asynchronous message-based API. Auto SDK client applications use the new `MessageBroker` to publish and subscribe to Alexa Auto Services Bridge (AASB) messages. The C++ sample app is refactored to use the new API to provide a reference implementation for Linux platforms. The Alexa Auto Client Service (AACS) sample app provides the reference implementation for Android platforms. See the [Auto SDK Migration Guide](./MIGRATION.md) for help migrating your application to use the new API.

* Enhanced the Auto SDK build system with the Conan package manager. The new build system introduces modular builds, better dependency management, and simpler build artifacts. The Auto SDK build system includes the Auto SDK Builder Tool script, which wraps the Conan build commands with a simple interface similar to the previous version of Auto SDK Builder. See the [Build Alexa Auto SDK documentation](./BUILDING.md) for details about the build system and the [Migration Guide](./MIGRATION.md) for help migrating your build to the new version of Builder Tool.

* Extended the features of Alexa Presentation Language (APL) support for automotive. The `APL` module provides messages to report vehicle properties such as the display theme, driving state, and ambient light conditions. The property settings affect how APL documents render on screen; for example, some APL content is automatically hidden when the vehicle starts moving, and the display contrast updates with the day or night mode setting. Auto SDK 4.0 supports APL 1.9. For more information about the Auto SDK `APL` interface, see the [APL module documentation.](./modules/apl/README.md)

* Added the `CustomDomain` interface, which establishes a bidirectional communication channel between your Auto SDK client application and your custom cloud skill. `CustomDomain` includes messages for exchanging directives, events, and context between the vehicle and your skill, achieving a fully customizable experience. For more information about the Auto SDK `CustomDomain` interface, See the [Custom Domain module documentation.](./modules/custom-domain/README.md)

* Added the `MediaPlaybackRequestor` interface, which enables Alexa to play the user’s favorite media content as soon as they start their vehicle. `MediaPlaybackRequestor` simplifies content selection for the user by removing the need for the user to use buttons or voice commands to resume the Alexa media content that was playing when they stopped the vehicle. For more information about the Auto SDK `MediaPlaybackRequestor` interface, See the [Alexa module documentation.](./modules/alexa/README.md)

* Extended the `AudioOutput` interface and added configuration to allow ducking Alexa media. Your application can use this feature for enhanced control of Alexa content audio focus according to your platform requirements. For more information about audio ducking, see the [Core module documentation.](./modules/core/README.md)

* Updated the Auto SDK to use AVS Device SDK Version 1.25.0. For information about this version of AVS Device SDK, see the [AVS Device SDK release notes.](https://developer.amazon.com/en-US/docs/alexa/avs-device-sdk/release-notes.html#version-1250)

* Added LVC support for Alexa Custom Assistant specialized handoffs. You can configure the default fallback and self-introduction prompts for your custom assistant while offline. For more information, see the `Alexa Custom Assistant` extension documentation.

* Integrated the Auto SDK Conan build system enhancements to AACS and the AACS sample app. You can use a single Gradle command to build AACS and the AACS sample app. For build instructions, see the [AACS documentation.](./aacs/android/README.md)

* Added the following enhancements to the AACS sample app:

    * **Additional languages—** The AACS sample app supports the following languages: *US English* (`en-US`), *Australian English* (`en-AU`), *Canadian English* (`en-CA`), *Indian English* (`en-IN`), *British English* (`en-GB`), *German* (d`e-DE`), *Spanish* (`es-ES`), *Mexican Spanish* (`es-MX`), *US Spanish* (`es-US`), *French* (`fr-FR`), *Canadian French* (`fr-CA`), *Hindi* (`hi-IN`), *Italian* (`it-IT`), *Japanese* (`ja-JP`), and *Brazilian Portuguese* (`pr-BR`).

        The sample app language setting matches the device’s system language setting and syncs the with Alexa as long as the setting is in the supported language list. If Alexa does not support the system language, the sample app GUI defaults to en-US and presents a list of languages for the user to choose from. Once the user selects the language override, the system language does not sync with the sample app again until the user logs out or disables Alexa.

    * **Network error prompts—** You can configure the sample app to provide feedback to the user when Alexa cannot respond due internet connection issues. The feedback is a voice prompt or an error screen depending on the user action.

    * **Alexa app assets—** The sample app can show Alexa logos (assets) on the setup screen and display cards instead of showing placeholder assets.

    * **Comms UI improvements—** Updated the contacts uploading logic in the `Comms UI` AACS app component to ensure the sample app only uploads the contacts for the primary phone.

* Updated the AACS Telephony library to get the outgoing phone account using the Android standard API `getDefaultOutgoingPhoneAccount`. AACS Telephony no longer sends an account query intent when receiving the `PhoneCallController.Dial` message from the Auto SDK Engine.

* Added a new intent `com.amazon.aacstelephony.bluetooth.connectionCheckCompleted`, which AACS Telephony service broadcasts when it finishes the initial bluetooth connection check.

* Updated the `alexa-auto-lwa-auth` app component to use the `Authorization` Auto SDK interface for CBL authorization.

**Other changes**

* Moved several source code directories within the `aac-sdk` root directory to support the enhanced build system.

    * Removed `aac-sdk/platforms/android/`. The deprecated Java platform interfaces and JNI are in their respective modules. For example, the Alexa module Java interfaces and JNI are moved from `aac-sdk/platforms/android/modules/alexa/` to `aac-sdk/modules/alexa/android/`

    * Removed `aac-sdk/extensions/aasb/` because using AASB messages with MessageBroker is the primary Auto SDK API. AASB code for each module is in the respective module directory. For example, the AASB code for the Alexa module is in `aac-sdk/modules/alexa/aasb/`. Note that the AASB message headers to include in your application are not in this directory since they are generated as part of the Auto SDK build output.

    * Moved `aac-sdk/extensions/system-audio/` to `aac-sdk/modules/system-audio/`

    * Moved `aac-sdk/extensions/bluetooth/` to `aac-sdk/modules/bluetooth/`

    * Moved `aac-sdk/extensions/loopback-detector/` to `aac-sdk/modules/loopback-detector/`

    * Moved  `aac-sdk/platforms/android/alexa-auto-client-service/` to `aac-sdk/aacs/android/`

    * Moved `aac-sdk/platforms/android/alexa-auto-client-service/app-components/` to `aac-sdk/aacs/android/app-components/`

    * Moved `aac-sdk/samples/android-aacs-sample-app/` to `aac-sdk/aacs/android/sample-app/`

    * Moved `aac-sdk/platforms/android/alexa-auto-client-service` `/commonutils/` , `/ipc/`, and `/constants/` to `aac-sdk/aacs/android/common/`

    * Moved AACS media player files to a directory `audioOutput` within `aac-sdk/platforms/android/alexa-auto-client-service/service/`

    * Moved the Media App Command and Control Android library from `aac-sdk/platforms/android/maccandroid/` to `aac-sdk/aacs/android/service/modules/maccandroid/`

* In the LVC extension, the `LocalSearchProvider` AASB messages now have topic `LocalNavigation`. For example, the existing message `LocalSearchProvider.SearchRequest` in 3.3 is `LocalNavigation.SearchRequest` in 4.0. The next major release version of Auto SDK will change the topic back to `LocalSearchProvider`.

* Deprecated the option to build AACS as an APK. Starting from Auto SDK 4.0, you can only build AACS as an AAR.

* Removed the Android sample app based on the Java platform interfaces. The AACS sample app demonstrates using Auto SDK on Android.

**Resolved Issues**

* Fixed an issue preventing the generic `DEFAULT` type `LocalMediaSource` from working in offline mode with LVC.

* Fixed a race condition in `SpeechRecognizer` in which enabling wake word detection immediately after calling `startCapture()` resulted in a missing call to `stopAudioInput()` when wake word detection was later disabled.

* Fixed a deadlock that could occur in an application that uses the deprecated `AuthProvider` interface and starts, stops, and restarts the Engine in quick succession.

* Fixed an issue in which Spotify playback commands were delayed on QNX.

* Fixed an issue in which the Engine added malformed `PhoneCallController` context to `PhoneCallController` events sent to Alexa.

* Fixed an issue in which AACS did not acquire audio focus prior to playing Alexa speech.

**Known Issues**

**General**

* If you do not specify the `deviceSettings.locales` field of the Alexa module configuration, the Engine automatically declares support for the following locale combinations: ["en-US", "es-US"], ["es-US", "en-US"], ["en-IN", "hi-IN"], ["hi-IN", "en-IN"], ["fr-CA", "en-CA"], ["en-CA", "fr-CA"].
    The Engine does not automatically declare support for default locale combinations if you assign an empty value to the `locales` field.

* The Engine does not persist the `aace.alexa.wakewordEnabled` Engine property setting across device reboots. Your application has to persist the setting and set the property again at each Engine start. AACS implements persisting this property and hence does not have this issue.

* If your Linux platform does not use AVX2 instructions, the Amazonlite wake word library initialization causes an illegal instruction error.

* When using LVC and stopping the Engine, the `AlexaClient` connection status remains `CONNECTED` because the connection to LVC is not disabled. Your application should not accept user utterances while the Engine is stopped despite the connection status showing `CONNECTED`.

* The [Alexa Automotive UX guidelines](https://developer.amazon.com/en-US/docs/alexa/alexa-auto/display-cards.html#dismiss-display-cards) specify when to automatically dismiss a `TemplateRuntime` display card for each template type. The Engine publishes the `TemplateRuntime` interface messages `ClearTemplate` and `ClearPlayerInfo` based on the timeouts configured in the `aace.alexa.templateRuntimeCapabilityAgent` Engine configuration. However, the configuration does not provide enough granularity to specify timeouts for different types of display cards. Consequently, there is no way for your application to configure automatically dismissing local search templates (e.g., `LocalSearchListTemplate2`) with a different timeout than other templates (e.g., `WeatherTemplate`). The configuration also does not provide a way for you to specify infinite timeout for `NowPlaying` cards. You must implement your application’s dismissal logic for display cards and media info accordingly.

* When the user requests to view their list of timers on an APL-enabled application, they cannot use an utterance such as “Alexa, scroll up” to scroll through the list shown on the APL card.

* There is a rare race condition in which publishing the `AlexaClient.StopForegroundActivity` message does not cancel the active Alexa interaction. The race condition can happen when the application publishes the message at the beginning of the `THINKING` state `AlexaClient.DialogStateChanged` transition.

* On the Poky Linux 32-bit platform, the C++ sample app shuts down with an error on launch.

* In offline mode with LVC, you might not see the `AlexaClient.DialogStateChanged` `THINKING` state transition if the user invokes Alexa with hold-to-talk and your application provides the audio input data in one large chunk.

* In offline mode with LVC, Alexa gets stuck in the `THINKING` state and does not respond after changing the locale setting. The state recovers after a few minutes.

* The `CBL` module uses a backoff when refreshing the access token after expiry. If the internet is disconnected when the Engine attempts the refresh, it might take up to a minute to refresh the token after the internet connection is restored.

* Some `Core` module messages published by the Engine do not have a corresponding message for the application to report a handling failure. For example, if the user invokes Alexa by tap-to-talk, and the application cannot handle the `AudioInput.StartAudioInput` message, the Engine assumes the application handled the message properly and will provide audio data. As a result, the Engine state and application state might become out of sync. The affected messages are the following:
    * `AudioInput`:
        * `StartAudioInput`
    * `AudioOutput`:
        * `SetPosition`
        * `VolumeChanged`
        * `MutedStateChanged`

**Car control**

* If you configure the Auto SDK Engine and connect to Alexa using a set of endpoint configurations, you cannot delete any endpoint in the set from Alexa. For example, after you configure set A with endpoints 1, 2, and 3, if you change your car control configuration during development to set B with endpoints 2, 3, and 4, Alexa retains endpoint 1 from set A, which might interfere with resolving the correct endpoint ID for your utterances. However, any endpoint configurations with matching IDs override previous configurations. For example, the configuration of endpoint 2 in set B replaces endpoint 2 in set A. During development, limit configuration changes to create only supersets of previous endpoint configurations. Work with your Solutions Architect or Partner Manager to produce the correct configuration on the first try.

**Communications**

* Alexa does not understand DTMF utterances that include letters. For example, "press A" and "dial 3*#B" do not result in the correct DTMF directives.

* The user might experience unexpected results by trying to dial or place calls in the following ways:
    * Using utterances that include “double”, “triple”, “hundred”, or “thousand.” For example, calling a number such as 1-800-xxx-xxxx by saying “Alexa call one eight *double oh*...”
    * Pressing special characters such has “#” or “*” by saying "Alexa press * #."

* The user cannot accept or reject incoming Alexa-to-Alexa calls by voice while playing a skill with extended multi-turn dialogs, such as Jeopardy or Skyrim.

**Entertainment**

* If the user requests Alexa to read notifications while music is playing, they might hear the music play for a split second between the end of one notification and the start of the next.

* When an external media player authorization is in progress during Engine shutdown, a rare race condition might cause the Engine to crash.

* If your application cancels an Alexa interaction by sending the `AlexaClient.StopForegroundActivity` message to the Engine during music playback, the Engine might erroneously request your application to dismiss the` NowPlaying` media info by publishing the `TemplateRuntime.ClearPlayerInfo` message. Your application should not dismiss the media info in this scenario.

* When using the `System Audio` module, Audible and Amazon music might not play correctly on i.MX8 boards.

**Local search and navigation**

* In offline mode with LVC, after the user requests a list of POIs with an utterance such as “Alexa, find a nearby Starbucks”, Alexa does not recognize followup requests such as "Alexa, select the first one" and does not display or read detailed information about the requested selection.

**AACS**

* If you do not use the default audio output implementation (i.e., your application handles `AudioOutput` AASB messages), your application will not receive the `AudioOutput.Stop` message if Alexa media is playing when AACS shuts down. As a workaround, your application can listen to `AASB.StopService` or adopt `AACSPinger` to listen to the `STOPPED` state of AACS and stop the media accordingly.

**AACS Sample App**

* The AACS Sample App does not show the language selection screen when the app is built with Preview Mode.

* The AACS Sample App only shows the language selection screen if there is a language mismatch with the system language setting at the first app launch.

[Read the SDK Docs](https://alexa.github.io/alexa-auto-sdk/)
  • Loading branch information
MuniSakkuru authored and Muni Sakkuru committed Dec 15, 2021
1 parent 2607c7b commit 9324a77
Show file tree
Hide file tree
Showing 4,438 changed files with 576,805 additions and 258,113 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
/build
# CLion build folder
/cmake-build-*
/extras
/extensions/*/**
compile_commands.json
tools/builder
__pycache__
730 changes: 730 additions & 0 deletions BUILDING.md

Large diffs are not rendered by default.

203 changes: 182 additions & 21 deletions CHANGELOG.md

Large diffs are not rendered by default.

52 changes: 0 additions & 52 deletions CMakeLists.txt

This file was deleted.

4 changes: 2 additions & 2 deletions GETSTARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ Follow these steps to get started with the Auto SDK:
4. Install the built package on your device as described in the builder [README](./builder/README.md).

5. Create and configure an instance of the Engine. For details, see the [C++](./modules/core/README.md#creating-the-engine) or [Android](./platforms/android/modules/core/README.md#creating-the-engine) Core module documentation.
5. Create and configure an instance of the Engine. For details, see the [Core module](./modules/core/README.md#creating-the-engine) documentation.

6. Extend the Auto SDK interfaces by creating a custom handler for each interface that you want to implement and registering the handler with the Engine.

7. Start the Engine using the `start()` command.

8. Use the Sample App ([C++](./samples/cpp/README.md) or [Android](./samples/android/README.md)) to see how the Auto SDK works and to test end-to-end functionality.
8. Use the Sample App ([C++](./samples/cpp/README.md) or [Android](./aacs/android/sample-app/README.md)) to see how the Auto SDK works and to test end-to-end functionality.

## Downloading Optional Extensions

Expand Down
203 changes: 3 additions & 200 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,202 +1,5 @@
The contents of this repository are distributed under several different license agreements. Please refer to LICENSE file in the corresponding folder before using.

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
If the license is not specified in the folder, the Apache 2.0 License applies. The Apache 2.0 license can be found at “./LICENSE_APACHE_V2”.

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
The resources under ./aacs/android/restrictedAssets are licensed under the Amazon Program Materials License Agreement (the “PMLA”). Please refer to ./aacs/android/restrictedAssets/LICENSE_PMLA file for more information.
Loading

0 comments on commit 9324a77

Please sign in to comment.