├── settings.gradle ├── image ├── homepage.JPG ├── checkout_cn.jpg ├── homepage_cn.jpg ├── checkout-page.JPG ├── purchase-result.JPG └── purchase_result_cn.png ├── app ├── build │ ├── intermediates │ │ ├── compatible_screen_manifest │ │ │ └── debug │ │ │ │ └── createDebugCompatibleScreenManifests │ │ │ │ └── out │ │ │ │ └── output.json │ │ ├── apk_list │ │ │ └── debug │ │ │ │ └── mainApkListPersistenceDebug │ │ │ │ └── apk-list.gson │ │ ├── merged_manifests │ │ │ ├── debugAndroidTest │ │ │ │ ├── output.json │ │ │ │ └── AndroidManifest.xml │ │ │ └── debug │ │ │ │ ├── output.json │ │ │ │ └── AndroidManifest.xml │ │ ├── metadata_feature_manifest │ │ │ └── debug │ │ │ │ └── processDebugManifest │ │ │ │ └── metadata-feature │ │ │ │ └── output.json │ │ ├── instant_app_manifest │ │ │ └── debug │ │ │ │ ├── output.json │ │ │ │ └── AndroidManifest.xml │ │ ├── bundle_manifest │ │ │ └── debug │ │ │ │ └── processDebugManifest │ │ │ │ └── bundle-manifest │ │ │ │ ├── output.json │ │ │ │ └── AndroidManifest.xml │ │ └── manifest_merge_blame_file │ │ │ └── debug │ │ │ └── manifest-merger-blame-debug-report.txt │ ├── generated │ │ └── source │ │ │ └── buildConfig │ │ │ ├── debug │ │ │ └── com │ │ │ │ └── huawei │ │ │ │ └── hms │ │ │ │ └── BuildConfig.java │ │ │ └── androidTest │ │ │ └── debug │ │ │ └── com │ │ │ └── huawei │ │ │ └── vrshop │ │ │ └── test │ │ │ └── BuildConfig.java │ └── outputs │ │ └── logs │ │ └── manifest-merger-debug-report.txt ├── src │ └── main │ │ ├── res │ │ ├── drawable │ │ │ ├── iap.png │ │ │ └── bg_blue_circle.xml │ │ ├── values │ │ │ ├── strings.xml │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ └── layout │ │ │ └── activity_main.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── huawei │ │ └── hms │ │ └── iap │ │ └── vrpaydemo │ │ ├── Constant.java │ │ ├── PaySignUtil.java │ │ └── MainActivity.java ├── proguard-rules.pro ├── build.gradle └── app.iml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── readme_zh.md ├── gradlew.bat ├── README.md └── gradlew /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name='VRShop' 3 | -------------------------------------------------------------------------------- /image/homepage.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/homepage.JPG -------------------------------------------------------------------------------- /image/checkout_cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/checkout_cn.jpg -------------------------------------------------------------------------------- /image/homepage_cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/homepage_cn.jpg -------------------------------------------------------------------------------- /app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/out/output.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /image/checkout-page.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/checkout-page.JPG -------------------------------------------------------------------------------- /image/purchase-result.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/purchase-result.JPG -------------------------------------------------------------------------------- /image/purchase_result_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/image/purchase_result_cn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/iap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/app/src/main/res/drawable/iap.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HMS-Core/hms-iap-vr-clientdemo/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | VRShop 3 | VRShop 4 | 5 | -------------------------------------------------------------------------------- /app/build/intermediates/apk_list/debug/mainApkListPersistenceDebug/apk-list.gson: -------------------------------------------------------------------------------- 1 | [{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"}] -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blue_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon May 18 20:14:07 CST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /app/build/intermediates/merged_manifests/debugAndroidTest/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug-androidTest.apk","fullName":"debugAndroidTest","baseName":"debug-androidTest"},"path":"AndroidManifest.xml","properties":{}}] -------------------------------------------------------------------------------- /app/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"METADATA_FEATURE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{}}] -------------------------------------------------------------------------------- /app/build/intermediates/merged_manifests/debug/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.huawei.vrshop","split":"","minSdkVersion":"26"}}] -------------------------------------------------------------------------------- /app/build/intermediates/instant_app_manifest/debug/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"INSTANT_APP_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.huawei.vrshop","split":"","minSdkVersion":"26"}}] -------------------------------------------------------------------------------- /app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"BUNDLE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":10000300,"versionName":"1.0.0.300","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.huawei.vrshop","split":"","minSdkVersion":"26"}}] -------------------------------------------------------------------------------- /app/build/generated/source/buildConfig/debug/com/huawei/hms/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Automatically generated file. DO NOT MODIFY 3 | */ 4 | package com.huawei.hms; 5 | 6 | public final class BuildConfig { 7 | public static final boolean DEBUG = Boolean.parseBoolean("true"); 8 | public static final String APPLICATION_ID = "com.huawei.vrshop"; 9 | public static final String BUILD_TYPE = "debug"; 10 | public static final String FLAVOR = ""; 11 | public static final int VERSION_CODE = 10000300; 12 | public static final String VERSION_NAME = "1.0.0.300"; 13 | } 14 | -------------------------------------------------------------------------------- /app/build/generated/source/buildConfig/androidTest/debug/com/huawei/vrshop/test/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Automatically generated file. DO NOT MODIFY 3 | */ 4 | package com.huawei.vrshop.test; 5 | 6 | public final class BuildConfig { 7 | public static final boolean DEBUG = Boolean.parseBoolean("true"); 8 | public static final String APPLICATION_ID = "com.huawei.vrshop.test"; 9 | public static final String BUILD_TYPE = "debug"; 10 | public static final String FLAVOR = ""; 11 | public static final int VERSION_CODE = 10000300; 12 | public static final String VERSION_NAME = "1.0.0.300"; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | 21 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'com.huawei.agconnect' 3 | 4 | def app_versionName = "1.0.0.300" 5 | def app_versionCode = 10000300 6 | 7 | android { 8 | signingConfigs { 9 | debug { 10 | storeFile file('../keystore/keystore.jks') 11 | storePassword '***' 12 | keyAlias = '***' 13 | keyPassword '***' 14 | } 15 | } 16 | compileSdkVersion 28 17 | buildToolsVersion "28.0.3" 18 | defaultConfig { 19 | applicationId "com.huawei.vrshop" 20 | minSdkVersion 26 21 | targetSdkVersion 28 22 | versionCode app_versionCode 23 | versionName app_versionName 24 | signingConfig signingConfigs.debug 25 | } 26 | 27 | buildTypes { 28 | release { 29 | minifyEnabled false 30 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 31 | debuggable = true 32 | signingConfig signingConfigs.debug 33 | } 34 | debug { 35 | signingConfig signingConfigs.debug 36 | } 37 | } 38 | 39 | } 40 | 41 | dependencies { 42 | implementation fileTree(dir: 'libs', include: ['*.jar']) 43 | implementation 'com.android.support:appcompat-v7:28.0.0' 44 | implementation 'com.huawei.hms:iap:5.0.4.301' 45 | 46 | } 47 | 48 | -------------------------------------------------------------------------------- /readme_zh.md: -------------------------------------------------------------------------------- 1 | # 华为应用内支付服务VR支付客户端示例代码 2 | 3 | 本文主要介绍华为应用内支付服务(HUAWEI In-App Purchases,IAP)VR支付的客户端开发步骤,帮助您快速了解华为VR支付提供的客户端接口及其使用方法。 4 | 5 | ## 目录 6 | - [简介](#简介) 7 | - [开发准备](#开发准备) 8 | - [环境要求](#环境要求) 9 | - [运行结果](#运行结果) 10 | - [授权许可](#授权许可) 11 | 12 | 13 | ## 简介 14 | 15 | 华为应用内支付服务为VR设备提供VR支付服务。目前,我们仅提供价格定义接口,商品信息的定义需要您在自己的应用中实现。 16 | 免责声明:本demo仅演示商品购买过程,并未实际使用购买的商品。 17 | 18 | ## 开发准备 19 | 1. 确认Android Studio开发环境准备就绪,使用Android Studio打开示例代码工程路径下的build.gradle文件。 20 | 21 | 2. 在AppGallery Connect中创建应用并配置应用信息。详情请参见配置AppGallery Connect。 22 | 23 | 3. 在 Android Studio(3.0及以上版本)导入demo,再进行构建。 24 | 25 | 4. 配置示例代码: 26 | - 在AppGallery Connect中下载应用的agconnect-services.json文件,把该文件添加至本demo的应用根目录(app)中。 27 | - 添加证书文件,在应用级build.gradle文件中添加配置。 28 | - 打开AndroidManifest文件,修改package的值为您的应用包名。 29 | - 将Constant类中的PUBLIC_KEY替换为您应用的公钥。 30 | - 将Constant类中的PRIVATE_KEY替换为您应用的私钥。 31 | - Replace the APPID and MERCHANTID in the Constant class with the appid and merchantid of your app.将Constant类中的APPID替换为创建应用的App ID,将Constant类中的MERCHANTID替换为创建应用的CP ID。 32 | 33 | 5. 在Android设备或模拟机上运行该示例代码。 34 | 35 | ## 环境要求 36 | 37 | 推荐使用Android SDK 22及以上版本、JDK 1.8及以上版本。 38 | 39 | ## 运行结果 40 | 41 | 运行demo后,会出现如下页面。 42 | 43 | 44 | 45 | 点击“确认支付 ¥0.01”,demo会调用pay接口,跳转至付款界面。该界面跳转由华为应用内支付服务支持。 46 | 47 | 48 | 49 | 付款成功后,页面将显示支付结果。该页面跳转由华为应用内支付服务支持。 50 | 51 | 52 | 53 | ## 授权许可 54 | 55 | 华为应用内支付服务VR支付客户端示例代码经过Apache License 2.0授权许可。 56 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #008577 4 | #00574B 5 | #D81B60 6 | 7 | 8 | #FF000000 9 | 10 | #80000000 11 | 12 | #4C000000 13 | 14 | 15 | #FF0000 16 | #0000FF 17 | #EEEE00 18 | #FF7F00 19 | 20 | #C0000000 21 | 22 | #07000000 23 | 24 | 25 | #aa72d572 26 | #aa738ffe 27 | #aae84e40 28 | #00000000 29 | #25808080 30 | #f5f5f5 31 | #aae84e40 32 | #aa738ffe 33 | 34 | #fef6f3 35 | #efc5b8 36 | #f0460e 37 | 38 | #007dff 39 | 40 | #00000000 41 | 42 | #fff 43 | #456E94 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/huawei/hms/iap/vrpaydemo/Constant.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.huawei.hms.iap.vrpaydemo; 18 | 19 | /** 20 | * Constant 21 | * 支付相关参数及公私钥,需商户根据自己的应用进行配置 22 | * 23 | * @since 2020/12/2 24 | */ 25 | public class Constant { 26 | /** 27 | * APPID 28 | */ 29 | private static final String APPID = ""; 30 | /** 31 | * 商户ID 32 | */ 33 | private static final String MERCHANTID = ""; 34 | 35 | /** 36 | * 私钥 非单机应用一定要在服务器端储存签名私钥 37 | */ 38 | private static final String PRIVATE_KEY = ""; 39 | /** 40 | * 公钥 41 | */ 42 | private static final String PUBLIC_KEY = ""; 43 | 44 | public static String getAppID() { 45 | return APPID; 46 | } 47 | 48 | public static String getPrivateKey() { 49 | return PRIVATE_KEY; 50 | } 51 | 52 | public static String getPublicKey() { 53 | return PUBLIC_KEY; 54 | } 55 | 56 | public static String getMerchantID() { 57 | return MERCHANTID; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 21 | 22 | 23 | 31 | 32 | 33 | 40 | 41 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HUAWEI In-App Purchases(IAP) Clientdemo for VR 2 | 3 | The iap_demo App demonstrates Huawei VR Pay client APIs and usages. 4 | 5 | 6 | ## Table of Content 7 | 8 | 9 | 10 | 11 | - [Table of Content](#table-of-content) 12 | - [Introduction](#introduction) 13 | - [Getting Started](#getting-started) 14 | - [Supported Environments](#supported-environments) 15 | - [Result](#result) 16 | - [License](#license) 17 | 18 | 19 | 20 | ## Introduction 21 | 22 | Huawei VR Pay is a payment service provided by Huawei in-app Purchases in VR devices. Currently, only the api for customizing prices is provided. CP need to define offering information in their apps. 23 | 24 | Disclaimer: The demo only demonstrates the purchase procedure, and it does not have a real use of purchased products. 25 | 26 | ## Getting Started 27 | 28 | 1. Check whether the Android studio development environment is ready. Open the sample code project directory with file "build.gradle" in Android Studio. 29 | 30 | 2. Finish the configuration in AppGallery Connect. 31 | See details: [Configuring AppGallery Connect](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/config-agc-0000001050033072-V5) 32 | 33 | 3. To build this demo, please first import the demo in the Android Studio (3.x+). 34 | 35 | 4. Configure the sample code: 36 | - Download the file "agconnect-services.json" of the app on AGC, and add the file to the app root directory(\app) of the demo. 37 | - Add the certificate file to the project and add your configuration to in the app-level `build.gradle` file. 38 | - Open the `AndroidManifest` file and change the value of package to your app package name. 39 | - Replace the PUBLIC_KEY in the Constant class with the public key of your app. 40 | - Replace the PRIVATE_KEY in the Constant class with the private key of your app. 41 | - Replace the APPID and MERCHANTID in the Constant class with the appid and merchantid of your app. 42 | 43 | 5. Run the sample on your Android device or emulator. 44 | 45 | ## Supported Environments 46 | Android SDK Version >= 22 and JDK version >= 1.8 is recommended. 47 | 48 | ## Result 49 | 50 | Once you start the demo, you should be able to see the following page. 51 | 52 | demo home page 53 | 54 | Tap **确认支付 ¥0.01**, the demo will call the `pay` API, and jump to the checkout page which is provided by IAP Service. 55 | 56 | payment selection 57 | 58 | Once purchase succeed, IAP Service will display the purchase result. 59 | 60 | payment result 61 | 62 | ## Question or issues 63 | If you want to evaluate more about HMS Core, 64 | [r/HMSCore on Reddit](https://www.reddit.com/r/HuaweiDevelopers/) is for you to keep up with latest news about HMS Core, and to exchange insights with other developers. 65 | 66 | If you have questions about how to use HMS samples, try the following options: 67 | - [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with 68 | `huawei-mobile-services`. 69 | - [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001) HMS Core Module is great for general questions, or seeking recommendations and opinions. 70 | 71 | If you run into a bug in our samples, please submit an [issue](https://github.com/HMS-Core/hms-iap-vr-clientdemo/issues) to the Repository. Even better you can submit a [Pull Request](https://github.com/HMS-Core/hms-iap-vr-clientdemo/pulls) with a fix. 72 | 73 | ## License 74 | 75 | This demo is licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). 76 | -------------------------------------------------------------------------------- /app/build/intermediates/merged_manifests/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 43 | 46 | 49 | 52 | 53 | 58 | 59 | 60 | 68 | 71 | 72 | 76 | 77 | 78 | 82 | 83 | 86 | 87 | 92 | 95 | 96 | 101 | 104 | 105 | 106 | 111 | 112 | 113 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 43 | 46 | 49 | 52 | 53 | 58 | 59 | 60 | 68 | 71 | 72 | 76 | 77 | 78 | 82 | 83 | 86 | 87 | 92 | 95 | 96 | 101 | 104 | 105 | 106 | 111 | 112 | 113 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 40 | 44 | 47 | 50 | 53 | 54 | 59 | 60 | 61 | 69 | 72 | 73 | 77 | 78 | 79 | 83 | 84 | 87 | 88 | 93 | 96 | 97 | 102 | 105 | 106 | 107 | 112 | 113 | 114 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /app/src/main/java/com/huawei/hms/iap/vrpaydemo/PaySignUtil.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.huawei.hms.iap.vrpaydemo; 18 | 19 | import android.text.TextUtils; 20 | import android.util.Base64; 21 | import android.util.Log; 22 | import com.huawei.hms.support.api.pay.OrderResult; 23 | import com.huawei.hms.support.api.pay.PayResultInfo; 24 | import java.io.UnsupportedEncodingException; 25 | import java.security.InvalidKeyException; 26 | import java.security.KeyFactory; 27 | import java.security.NoSuchAlgorithmException; 28 | import java.security.PrivateKey; 29 | import java.security.PublicKey; 30 | import java.security.SignatureException; 31 | import java.security.spec.InvalidKeySpecException; 32 | import java.security.spec.PKCS8EncodedKeySpec; 33 | import java.security.spec.X509EncodedKeySpec; 34 | import java.util.ArrayList; 35 | import java.util.Collections; 36 | import java.util.HashMap; 37 | import java.util.List; 38 | import java.util.Map; 39 | 40 | /** 41 | * PaySignUtil 42 | * 43 | * @since 2020/12/2 44 | */ 45 | public class PaySignUtil { 46 | private static final String TAG = "PaySignUtil"; 47 | 48 | private static final String SIGN_ALGORITHMS = "SHA256WithRSA"; 49 | /** 50 | * 对支付结果的签名进行校验 51 | * @param rst 支付结果 52 | * @param pubKey 公钥 53 | * @return 是否校验通过 54 | */ 55 | public static boolean checkSign(PayResultInfo rst, String pubKey) { 56 | 57 | if (rst == null || pubKey == null) { 58 | return false; 59 | } 60 | 61 | Map paramsa = new HashMap(); 62 | 63 | // 必选参数 64 | paramsa.put("returnCode", rst.getReturnCode()); 65 | paramsa.put("userName", rst.getUserName()); 66 | paramsa.put("requestId", rst.getRequestId()); 67 | paramsa.put("amount", rst.getAmount()); 68 | paramsa.put("time", rst.getTime()); 69 | 70 | // 可选参数 71 | paramsa.put("orderID", rst.getOrderID()); 72 | paramsa.put("withholdID", rst.getWithholdID()); 73 | paramsa.put("errMsg", rst.getErrMsg()); 74 | 75 | String noSignStr = getNoSign(paramsa, false); 76 | return doCheck(noSignStr, rst.getSign(), pubKey); 77 | } 78 | 79 | /** 80 | * 根据参数map获取待签名字符串 81 | * @param params 待签名参数map 82 | * @param includeEmptyParam 是否包含值为空的参数: 83 | * 与 HMS-SDK 支付能力交互的签名或验签,需要为false(不包含空参数) 84 | * 由华为支付服务器回调给开发者的服务器的支付结果验签,需要为true(包含空参数) 85 | * @return 待签名字符串 86 | */ 87 | private static String getNoSign(Map params, boolean includeEmptyParam) { 88 | //对参数按照key做升序排序,对map的所有value进行处理,转化成string类型 89 | //拼接成key=value&key=value&....格式的字符串 90 | StringBuilder content = new StringBuilder(); 91 | 92 | // 按照key做排序 93 | List keys = new ArrayList(params.keySet()); 94 | Collections.sort(keys); 95 | 96 | String value = null; 97 | Object object = null; 98 | boolean isFirstParm = true; 99 | for (int i = 0; i < keys.size(); i++) { 100 | String key = (String) keys.get(i); 101 | object = params.get(key); 102 | 103 | if (object == null) { 104 | value = ""; 105 | }else if (object instanceof String) { 106 | value = (String) object; 107 | } else { 108 | value = String.valueOf(object); 109 | } 110 | 111 | if (includeEmptyParam || !TextUtils.isEmpty(value)) { 112 | content.append((isFirstParm ? "" : "&") + key + "=" + value); 113 | isFirstParm = false; 114 | } else { 115 | continue; 116 | } 117 | } 118 | 119 | //待签名的字符串 120 | return content.toString(); 121 | } 122 | 123 | /** 124 | * 校验签名信息 125 | * @param noSignStr 待校验未字符串 126 | * @param sign 签名字符串 127 | * @param publicKey 公钥 128 | * @return 是否校验通过 129 | */ 130 | public static boolean doCheck(String noSignStr, String sign, String publicKey) { 131 | 132 | if (sign == null || noSignStr == null || publicKey == null) { 133 | return false; 134 | } 135 | 136 | try { 137 | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 138 | byte[] encodedKey = Base64.decode(publicKey, Base64.DEFAULT); 139 | PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey)); 140 | 141 | java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS); 142 | 143 | signature.initVerify(pubKey); 144 | signature.update(noSignStr.getBytes("UTF-8")); 145 | 146 | return signature.verify(Base64.decode(sign, Base64.DEFAULT)); 147 | } catch (Exception e) { 148 | // 这里是安全算法,为避免出现异常时泄露加密信息,这里不打印具体日志 149 | Log.e(TAG, "doCheck error"); 150 | } 151 | return false; 152 | } 153 | 154 | public static String getSignData(Map params) { 155 | StringBuffer content = new StringBuffer(); 156 | // 按照key做排序 157 | List keys = new ArrayList(params.keySet()); 158 | Collections.sort(keys); 159 | String value = null; 160 | Object object = null; 161 | for (int i = 0; i < keys.size(); i++) { 162 | String key = (String) keys.get(i); 163 | object = params.get(key); 164 | if (object instanceof String) { 165 | value = (String) object; 166 | } else { 167 | value = String.valueOf(object); 168 | } 169 | 170 | if (value != null) { 171 | content.append((i == 0 ? "" : "&") + key + "=" + value); 172 | } else { 173 | continue; 174 | } 175 | } 176 | return content.toString(); 177 | } 178 | 179 | public static String rsaSign(String content) { 180 | if (null == content) { 181 | return null; 182 | } 183 | String privateKey = Constant.getPrivateKey(); 184 | String charset = "UTF-8"; 185 | try { 186 | PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey, Base64.DEFAULT)); 187 | KeyFactory keyf = KeyFactory.getInstance("RSA"); 188 | PrivateKey priKey = keyf.generatePrivate(priPKCS8); 189 | java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS); 190 | signature.initSign(priKey); 191 | signature.update(content.getBytes(charset)); 192 | byte[] signed = signature.sign(); 193 | return Base64.encodeToString(signed, Base64.DEFAULT); 194 | } catch (NoSuchAlgorithmException e) { 195 | Log.e(TAG, "sign NoSuchAlgorithmException"); 196 | } catch (InvalidKeySpecException e) { 197 | Log.e(TAG, "sign InvalidKeySpecException"); 198 | } catch (InvalidKeyException e) { 199 | Log.e(TAG, "sign InvalidKeyException"); 200 | } catch (SignatureException e) { 201 | Log.e(TAG, "sign SignatureException"); 202 | } catch (UnsupportedEncodingException e) { 203 | Log.e(TAG, "sign UnsupportedEncodingException"); 204 | } 205 | return null; 206 | } 207 | 208 | /** 209 | * 对查询普通订单结果签名进行校验 210 | * @param result 查询订单结果 211 | * @param pubKey 公钥 212 | * @return 是否校验通过 213 | */ 214 | public static boolean checkSign(OrderResult result, String pubKey) { 215 | 216 | if (result == null || pubKey == null) { 217 | return false; 218 | } 219 | 220 | Map paramsa = new HashMap(); 221 | //必选参数 222 | paramsa.put("returnCode", result.getReturnCode()); 223 | paramsa.put("returnDesc", result.getReturnDesc()); 224 | 225 | //可选参数 226 | paramsa.put("requestId", result.getRequestId()); 227 | paramsa.put("orderID", result.getOrderID()); 228 | paramsa.put("status", result.getOrderStatus()); 229 | paramsa.put("orderTime", result.getOrderTime()); 230 | paramsa.put("tradeTime", result.getTradeTime()); 231 | 232 | String noSignStr = getNoSign(paramsa, false); 233 | return doCheck(noSignStr, result.getSign(), pubKey); 234 | } 235 | 236 | } 237 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /app/src/main/java/com/huawei/hms/iap/vrpaydemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.huawei.hms.iap.vrpaydemo; 18 | 19 | import android.app.Activity; 20 | import android.content.Context; 21 | import android.content.Intent; 22 | import android.content.IntentSender; 23 | import android.util.Log; 24 | import android.view.View; 25 | import android.widget.Button; 26 | import android.os.Bundle; 27 | import android.widget.Toast; 28 | import androidx.annotation.Nullable; 29 | import androidx.appcompat.app.AppCompatActivity; 30 | import com.huawei.hms.R; 31 | import com.huawei.hms.api.ConnectionResult; 32 | import com.huawei.hms.api.HuaweiApiClient; 33 | import com.huawei.hms.iap.entity.OrderStatusCode; 34 | import com.huawei.hms.support.api.client.PendingResult; 35 | import com.huawei.hms.support.api.client.ResultCallback; 36 | import com.huawei.hms.support.api.client.Status; 37 | import com.huawei.hms.support.api.entity.pay.HwPayConstant; 38 | import com.huawei.hms.support.api.entity.pay.OrderRequest; 39 | import com.huawei.hms.support.api.entity.pay.PayReq; 40 | import com.huawei.hms.support.api.entity.pay.PayStatusCodes; 41 | import com.huawei.hms.support.api.pay.HuaweiPay; 42 | import com.huawei.hms.support.api.pay.OrderResult; 43 | import com.huawei.hms.support.api.pay.PayResult; 44 | import com.huawei.hms.support.api.pay.PayResultInfo; 45 | import java.security.SecureRandom; 46 | import java.text.SimpleDateFormat; 47 | import java.util.Date; 48 | import java.util.HashMap; 49 | import java.util.Locale; 50 | import java.util.Map; 51 | 52 | /** 53 | * MainActivity 54 | * 55 | * @since 2020/12/2 56 | */ 57 | public class MainActivity extends AppCompatActivity implements View.OnClickListener { 58 | private final String TAG = "VRShop MainActivity"; 59 | 60 | private Button payBtn; 61 | 62 | private static final int REQUEST_PAY = 2000; 63 | 64 | private HuaweiApiClient mClient; 65 | 66 | // client连接 67 | private static final int CONNECT_STATUS_SUCCUSS = 0; 68 | 69 | private static final int CONNECT_STATUS_SUSSPAND = 1; 70 | 71 | private static final int CONNECT_STATUS_FAILED = 2; 72 | 73 | // 配置在华为开发者联盟的回调URL 74 | private static final String KEY_URL = "https://*****"; 75 | 76 | @Override 77 | protected void onCreate(Bundle savedInstanceState) { 78 | super.onCreate(savedInstanceState); 79 | setContentView(R.layout.activity_main); 80 | initView(); 81 | } 82 | 83 | private void initView() { 84 | payBtn = (Button) findViewById(R.id.btn_pay2); 85 | payBtn.setOnClickListener(new View.OnClickListener() { 86 | @Override 87 | public void onClick(View v) { 88 | toPay(); 89 | } 90 | }); 91 | } 92 | 93 | @Override 94 | public void onClick(View v) { 95 | 96 | } 97 | 98 | private void toPay() { 99 | Context context = this.getApplicationContext(); 100 | mClient = getApiClient(context); 101 | if (mClient != null && !mClient.isConnected()) { 102 | startConnect(); 103 | } 104 | } 105 | 106 | private void startConnect() { 107 | Log.i(TAG, "startConnect"); 108 | mClient.connect(MainActivity.this); 109 | } 110 | 111 | private HuaweiApiClient getApiClient(Context context) { 112 | return new HuaweiApiClient.Builder(context) 113 | .addApi(HuaweiPay.PAY_API) 114 | .addConnectionCallbacks(new HuaweiApiClient.ConnectionCallbacks() { 115 | @Override 116 | public void onConnected() { 117 | Log.i(TAG, "onConnected"); 118 | onConnectResult(CONNECT_STATUS_SUCCUSS); 119 | } 120 | 121 | @Override 122 | public void onConnectionSuspended(int i) { 123 | Log.i(TAG, "onConnectionSuspended"); 124 | onConnectResult(CONNECT_STATUS_SUSSPAND); 125 | } 126 | }) 127 | .addOnConnectionFailedListener(new HuaweiApiClient.OnConnectionFailedListener() { 128 | @Override 129 | public void onConnectionFailed(ConnectionResult connectionResult) { 130 | Log.i(TAG, "onConnectionFailed"); 131 | onConnectResult(CONNECT_STATUS_FAILED); 132 | } 133 | }) 134 | .build(); 135 | } 136 | 137 | private void onConnectResult(int connectStatus) { 138 | if (connectStatus == CONNECT_STATUS_SUCCUSS) { 139 | if (mClient != null && mClient.isConnected()) { 140 | Log.i(TAG, "connect success"); 141 | startPay(); 142 | } 143 | } else if (connectStatus == CONNECT_STATUS_SUSSPAND) { 144 | Log.i(TAG, "connect suspend"); 145 | startConnect(); 146 | } else if (connectStatus == CONNECT_STATUS_FAILED) { 147 | Toast.makeText(this, "client connect failed", Toast.LENGTH_SHORT).show(); 148 | } 149 | } 150 | 151 | private void startPay() { 152 | PendingResult payResult = 153 | HuaweiPay.HuaweiPayApi.pay(mClient, createPayReq("黄金会员", "开通会员服务", "0.01")); 154 | payResult.setResultCallback(new ResultCallback() { 155 | @Override 156 | public void onResult(PayResult payResult) { 157 | if (payResult == null) { 158 | Log.e(TAG, "payResult is null"); 159 | return; 160 | } 161 | Status status = payResult.getStatus(); 162 | if (status == null) { 163 | Log.e(TAG, "status is null"); 164 | return; 165 | } 166 | int rstCode = status.getStatusCode(); 167 | if (rstCode == PayStatusCodes.PAY_STATE_SUCCESS) { 168 | //启动支付流程 169 | try { 170 | status.startResolutionForResult(MainActivity.this, REQUEST_PAY); 171 | } catch (IntentSender.SendIntentException e) { 172 | Log.e(TAG, "SendIntentException"); 173 | } 174 | } else { 175 | Log.e(TAG, "pay state failed"); 176 | } 177 | } 178 | }); 179 | } 180 | 181 | @Override 182 | protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 183 | super.onActivityResult(requestCode, resultCode, data); 184 | 185 | if (requestCode == REQUEST_PAY) { 186 | if (resultCode == Activity.RESULT_OK) { 187 | //获取支付完成信息 188 | PayResultInfo payResultInfo = HuaweiPay.HuaweiPayApi.getPayResultInfoFromIntent(data); 189 | dealPayResult(payResultInfo); 190 | } 191 | } 192 | } 193 | 194 | private void dealPayResult(PayResultInfo payResultInfo) { 195 | if (payResultInfo == null) { 196 | return; 197 | } 198 | int retuenCode = payResultInfo.getReturnCode(); 199 | if (retuenCode == PayStatusCodes.PAY_STATE_SUCCESS) { 200 | Toast.makeText(this, "pay success", Toast.LENGTH_SHORT).show(); 201 | boolean checkRst = PaySignUtil.checkSign(payResultInfo, Constant.getPublicKey()); 202 | if(checkRst){ 203 | // 支付成功且验签成功,发放商品 204 | Log.i(TAG, "pay success"); 205 | } else { 206 | // 签名失败,需要查询订单状态:对于没有服务器的单机应用,调用查询订单接口查询;其他应用到开发者服务器查询订单状态 207 | startQueryOrder(payResultInfo.getRequestId()); 208 | } 209 | } else { 210 | dealPayResultErrCode(retuenCode); 211 | } 212 | } 213 | 214 | private void startQueryOrder(String requestID) { 215 | PendingResult orderDetail = HuaweiPay.HuaweiPayApi.getOrderDetail(mClient, createOrderRequest(requestID)); 216 | orderDetail.setResultCallback(new ResultCallback() { 217 | @Override 218 | public void onResult(OrderResult orderResult) { 219 | Log.i(TAG, "startQueryOrder success"); 220 | if (orderResult.getReturnCode() == OrderStatusCode.ORDER_STATE_SUCCESS) { 221 | // 订单查询成功 222 | boolean orderSignCheck = PaySignUtil.checkSign(orderResult, Constant.getPublicKey()); 223 | if (orderSignCheck) { 224 | // 订单验签成功, 发放商品 225 | Log.i(TAG, "orderResult checkSign success"); 226 | } else { 227 | // 订单验签失败 228 | Log.i(TAG, "orderResult checkSign failed"); 229 | } 230 | } else { 231 | // 订单查询失败 232 | Log.i(TAG, "getOrderDetail failed"); 233 | } 234 | 235 | } 236 | }); 237 | } 238 | 239 | /** 240 | * 创建支付请求参数 241 | * 242 | * @param productName 商品名 243 | * @param productDesc 商品描述 244 | * @param amount 商品金额 245 | * @return 请求参数 246 | */ 247 | private PayReq createPayReq(String productName, String productDesc, String amount) { 248 | Map params = new HashMap(); 249 | params.put(HwPayConstant.KEY_MERCHANTID, Constant.getMerchantID()); 250 | params.put(HwPayConstant.KEY_APPLICATIONID, Constant.getAppID()); 251 | params.put(HwPayConstant.KEY_PRODUCTNAME, productName); 252 | params.put(HwPayConstant.KEY_PRODUCTDESC, productDesc); 253 | // 254 | params.put(HwPayConstant.KEY_REQUESTID, getRequestID()); 255 | params.put(HwPayConstant.KEY_SDKCHANNEL, 1); 256 | params.put(HwPayConstant.KEY_URLVER, "2"); 257 | // 请保留小数点后两位,如20.00。如果不按照格式传入金额,会导致支付失败。 258 | params.put(HwPayConstant.KEY_AMOUNT, amount); 259 | // 说明一下 常量 260 | params.put(HwPayConstant.KEY_URL, KEY_URL); 261 | 262 | params.put(HwPayConstant.KEY_COUNTRY, "CN"); 263 | params.put(HwPayConstant.KEY_CURRENCY, "CNY"); 264 | 265 | // 强烈建议在 商户服务端做签名处理,且私钥存储在服务端 266 | String noSign = PaySignUtil.getSignData(params); 267 | String sign = PaySignUtil.rsaSign(noSign); 268 | 269 | PayReq payReq = new PayReq(); 270 | // 商品名称 必填。 此名称将会在支付时显示给用户确认 注意:该字段中不能包含特殊字符,包括# " & / ? $ ^ *:) \ < > , 271 | payReq.productName = (String) params.get(HwPayConstant.KEY_PRODUCTNAME); 272 | 273 | // 商品描述 必填。注意:该字段中不能包含特殊字符,包括# " & / ? $ ^ *:) \ < > , | 274 | payReq.productDesc = (String) params.get(HwPayConstant.KEY_PRODUCTDESC); 275 | 276 | // 商户ID 必填。 由华为开发者联盟分配 277 | payReq.merchantId = Constant.getMerchantID(); 278 | 279 | // 应用ID 必填 由华为开发者联盟分配 280 | payReq.applicationID = (String) params.get(HwPayConstant.KEY_APPLICATIONID); 281 | 282 | // 待支付金额 必填 。格式为:元.角分,最小金额为分, 例如:20.00,此金额将会在支付时显示给用户确认),保留到小数点后两位 283 | payReq.amount = (String) params.get(HwPayConstant.KEY_AMOUNT); 284 | 285 | // 请求订单号 必填。其值由商户定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。 286 | // 支付平台在服务器回调接口中会原样返回requestId的值。 287 | // 注意:该字段中不能包含特殊字符,包括# " & / ? $ ^ *:) \ < > , | 288 | payReq.requestId = (String) params.get(HwPayConstant.KEY_REQUESTID); 289 | 290 | // 支付结果回调URL 选填, 华为服务器收到后检查该应用有无在开发者联盟配置回调URL,如果配置了则使用应用配置的URL,否则使用此url 291 | // 作为该次支付的回调URL 292 | // 建议直接 以配置在 华为开发者联盟的回调URL为准 293 | payReq.url = (String) params.get(HwPayConstant.KEY_URL); 294 | // 295 | // // 渠道信息,选填。 取值如下:0 代表自有应用,无渠道 1 代表智汇云渠道 2 代表预装渠道 3 代表游戏吧 296 | payReq.sdkChannel = (Integer) params.get(HwPayConstant.KEY_SDKCHANNEL); 297 | 298 | // 回调接口版本号, 选填。 建议传值2, 额外回调信息,具体参考接口文档 299 | payReq.urlVer = (String) params.get(HwPayConstant.KEY_URLVER); 300 | 301 | // // 国家码 选填。建议无特殊需要,不传 302 | payReq.country = (String) params.get(HwPayConstant.KEY_COUNTRY); 303 | // // 币种 选填。建议无特殊需要不传此参数。目前仅支持CNY,默认CNY 304 | payReq.currency = (String) params.get(HwPayConstant.KEY_CURRENCY); 305 | 306 | /* 以上字段皆需要参与签名 * */ 307 | 308 | // 签名字段 必填。采用华为开发者联盟分配的私钥进行签名,强烈建议在服务端进行签名 . 309 | // 【注意】以下参数不参与签名: 310 | // a)sign参数 311 | // b)参数说明中标识不参与签名的参数 312 | // c)没有值的参数,包括null和“”两种情况 313 | // 2、排序完成之后,再把所有参数名和参数值的键值对以“&”字符连接起来,得到的字符串即为待签名串。如: 314 | // amount=XXX&applicationID=XXX&country=XXX¤cy=XXX&merchantId=XXX&productDesc=XXX&productName=XXX&requestId=XXX&sdkChannel=XXX&url=XXX&urlver=XXX 315 | // 3、将待签名字符串使用RSA私钥进行签名,采用 SHA256WithRSA签名算法 得到的字符串即为sign参数的值 316 | payReq.sign = sign; 317 | 318 | // 商户名称,必填,不参与签名。会显示在支付结果页面 319 | payReq.merchantName = getString(R.string.merchantName); 320 | 321 | // 分类,选填,不参与签名。该字段会影响风控策略 322 | // X4:主题 X5:应用商店 X6:游戏 X7:天际通 X8:云空间 X9:电子书 X10:华为学习 X11:音乐 X12 视频 323 | // X31 话费充值 X32 机票/酒店 X33 电影票 X34 团购 X35 手机预购 X36 公共缴费 X39 流量充值 324 | payReq.serviceCatalog = "X6"; 325 | 326 | return payReq; 327 | } 328 | 329 | /** 330 | * 创建订单请求参数 331 | * 332 | * @param requestId 商户订单号 333 | * @return 订单请求参数 334 | */ 335 | private static OrderRequest createOrderRequest(String requestId) { 336 | String merchantId = Constant.getMerchantID(); 337 | String time = String.valueOf(System.currentTimeMillis()); 338 | 339 | OrderRequest orderRequest = new OrderRequest(); 340 | orderRequest.setRequestId(requestId); 341 | orderRequest.setKeyType("1"); 342 | orderRequest.setMerchantId(merchantId); 343 | orderRequest.setTime(time); 344 | 345 | //以上信息按照一定规则进行签名,建议CP在服务器端储存签名私钥,并在服务器端进行签名操作。 346 | Map params = new HashMap<>(); 347 | params.put(HwPayConstant.KEY_MERCHANTID, merchantId); 348 | params.put(HwPayConstant.KEY_REQUESTID, requestId); 349 | params.put("keyType", "1"); 350 | params.put("time", time); 351 | String noSign = PaySignUtil.getSignData(params); 352 | String sign = PaySignUtil.rsaSign(noSign); 353 | orderRequest.setSign(sign); 354 | return orderRequest; 355 | } 356 | 357 | /** 358 | * 支付失败处理 359 | * @param returnCode 360 | */ 361 | private void dealPayResultErrCode(int returnCode) { 362 | Log.e(TAG, "dealPayResultErrCode"); 363 | String logMsg = ""; 364 | switch (returnCode) { 365 | case PayStatusCodes.PAY_STATE_CANCEL: 366 | // 用户取消支付 367 | logMsg = "cancel pay"; 368 | break; 369 | case PayStatusCodes.PAY_STATE_NET_ERROR: 370 | // 网络连接异常 371 | logMsg = "network error"; 372 | break; 373 | case PayStatusCodes.PAY_STATE_PARAM_ERROR: 374 | // 参数错误,包括无参 375 | logMsg = "params error"; 376 | break; 377 | case PayStatusCodes.PAY_STATE_TIME_OUT: 378 | // 支付结果查询超时(建议此时客户端去服务器查询订单是否支付成功) 379 | logMsg = "pay result query timeout"; 380 | break; 381 | default: 382 | logMsg = "pay failed, errorcode: " + returnCode; 383 | break; 384 | } 385 | Log.e(TAG, logMsg); 386 | } 387 | 388 | private static String getRequestID() { 389 | SimpleDateFormat sdf = null; 390 | sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SSS", Locale.US); 391 | // 生成6位真随机数 392 | SecureRandom random = new SecureRandom(); 393 | String randomNum = String.format(Locale.ROOT, "%06d", random.nextInt(1000000)); 394 | return sdf.format(new Date()) + "-" + randomNum; 395 | } 396 | } 397 | -------------------------------------------------------------------------------- /app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt: -------------------------------------------------------------------------------- 1 | 1 2 | 2 6 | 6 7 | 7 D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 10 | 9 android:targetSdkVersion="28" /> 11 | 9-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 12 | 10 13 | 11 14 | 12 15 | 12-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:10:5-67 16 | 12-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:10:22-64 17 | 13 18 | 13-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:12:5-81 19 | 13-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:12:22-78 20 | 14 21 | 14-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:14:5-79 22 | 14-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:14:22-76 23 | 15 24 | 15-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:16:5-83 25 | 15-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:16:22-80 26 | 16 27 | 16-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:18:5-106 28 | 16-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:18:22-103 29 | 17 30 | 18 31 | 19 D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:5:5-20:19 33 | 20 android:allowBackup="true" 34 | 20-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:6:9-35 35 | 21 android:appComponentFactory="androidx.core.app.CoreComponentFactory" 36 | 21-->[androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:22:18-86 37 | 22 android:debuggable="true" 38 | 23 android:icon="@drawable/iap" 39 | 23-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:7:9-37 40 | 24 android:label="@string/app_name" 41 | 24-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:8:9-41 42 | 25 android:roundIcon="@drawable/iap" 43 | 25-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:9:9-42 44 | 26 android:supportsRtl="true" 45 | 26-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:10:9-35 46 | 27 android:theme="@style/AppTheme" > 47 | 27-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:11:9-40 48 | 28 49 | 28-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:12:9-18:20 50 | 28-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:12:19-75 51 | 29 52 | 29-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:13:13-17:29 53 | 30 54 | 30-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:14:17-69 55 | 30-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:14:25-66 56 | 31 57 | 32 58 | 32-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:16:17-77 59 | 32-->D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:16:27-74 60 | 33 61 | 34 62 | 35 63 | 36 [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:12:9-14:45 65 | 37 android:name="com.huawei.hms.client.service.name:iap" 66 | 37-->[com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:13:13-66 67 | 38 android:value="iap:5.0.4.301" /> 68 | 38-->[com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:14:13-42 69 | 39 73 | 43 [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:18:9-20:46 75 | 44 android:name="com.huawei.hms.client.service.name:base" 76 | 44-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:19:13-67 77 | 45 android:value="base:5.0.4.301" /> 78 | 45-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:20:13-43 79 | 46 [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:23:9-25:33 81 | 47 android:name="com.huawei.hms.min_api_level:base:hmscore" 82 | 47-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:24:13-69 83 | 48 android:value="1" /> 84 | 48-->[com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:25:13-30 85 | 49 [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:23:9-25:35 87 | 50 android:name="availableLoaded" 88 | 50-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:24:13-43 89 | 51 android:value="yes" /> 90 | 51-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:25:13-32 91 | 52 92 | 53 [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:27:9-32:20 94 | 54 android:name="com.huawei.hms.update.provider.UpdateProvider" 95 | 54-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:28:13-73 96 | 55 android:authorities="com.huawei.vrshop.hms.update.provider" 97 | 55-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:29:13-71 98 | 56 android:exported="false" 99 | 56-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:30:13-37 100 | 57 android:grantUriPermissions="true" > 101 | 57-->[com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:31:13-47 102 | 58 103 | 59 104 | 60 [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:10:9-21:20 106 | 61 android:name="com.huawei.hms.activity.BridgeActivity" 107 | 61-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:11:13-66 108 | 62 android:configChanges="orientation|locale|layoutDirection|fontScale|screenSize|smallestScreenSize|screenLayout|uiMode" 109 | 62-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:12:13-131 110 | 63 android:excludeFromRecents="true" 111 | 63-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:13:13-46 112 | 64 android:exported="false" 113 | 64-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:14:13-37 114 | 65 android:hardwareAccelerated="true" 115 | 65-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:15:13-47 116 | 66 android:screenOrientation="behind" 117 | 66-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:16:13-47 118 | 67 android:theme="@android:style/Theme.Translucent" > 119 | 67-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:17:13-61 120 | 68 [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:18:13-20:77 122 | 69 android:name="hwc-theme" 123 | 69-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:19:17-41 124 | 70 android:value="androidhwext:style/Theme.Emui.Translucent" /> 125 | 70-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:20:17-74 126 | 71 127 | 72 [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:22:9-26:20 129 | 73 android:name="com.huawei.hms.activity.EnableServiceActivity" 130 | 73-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:23:13-73 131 | 74 android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout" 132 | 74-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:24:13-106 133 | 75 android:exported="false" > 134 | 75-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:25:13-37 135 | 76 136 | 77 137 | 78 [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:11:9-14:40 139 | 79 android:name="com.huawei.agconnect.core.provider.AGConnectInitializeProvider" 140 | 79-->[com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:12:13-90 141 | 80 android:authorities="com.huawei.vrshop.AGCInitializeProvider" 142 | 80-->[com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:13:13-73 143 | 81 android:exported="false" /> 144 | 81-->[com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:14:13-37 145 | 82 146 | 83 [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:16:9-18:40 148 | 84 android:name="com.huawei.agconnect.core.ServiceDiscovery" 149 | 84-->[com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:17:13-70 150 | 85 android:exported="false" /> 151 | 85-->[com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:18:13-37 152 | 86 153 | 87 [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:21:9-29:20 155 | 88 android:name="com.huawei.updatesdk.service.otaupdate.AppUpdateActivity" 156 | 88-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:22:13-84 157 | 89 android:configChanges="orientation|screenSize" 158 | 89-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:23:13-59 159 | 90 android:exported="false" 160 | 90-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:24:13-37 161 | 91 android:theme="@android:style/Theme.Translucent.NoTitleBar" > 162 | 91-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:25:13-72 163 | 92 [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:18:13-20:77 165 | 93 android:name="hwc-theme" 166 | 93-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:19:17-41 167 | 94 android:value="androidhwext:style/Theme.Emui.Translucent.NoTitleBar" /> 168 | 94-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:20:17-74 169 | 95 170 | 96 [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:30:9-38:20 172 | 97 android:name="com.huawei.updatesdk.support.pm.PackageInstallerActivity" 173 | 97-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:31:13-84 174 | 98 android:configChanges="orientation|keyboardHidden|screenSize" 175 | 98-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:32:13-74 176 | 99 android:exported="false" 177 | 99-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:33:13-37 178 | 100 android:theme="@android:style/Theme.Translucent.NoTitleBar" > 179 | 100-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:34:13-72 180 | 101 [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:18:13-20:77 182 | 102 android:name="hwc-theme" 183 | 102-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:19:17-41 184 | 103 android:value="androidhwext:style/Theme.Emui.Translucent" /> 185 | 103-->[com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:20:17-74 186 | 104 187 | 105 188 | 106 [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:40:9-45:20 190 | 107 android:name="com.huawei.updatesdk.fileprovider.UpdateSdkFileProvider" 191 | 107-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:41:13-83 192 | 108 android:authorities="com.huawei.vrshop.updateSdk.fileProvider" 193 | 108-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:42:13-74 194 | 109 android:exported="false" 195 | 109-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:43:13-37 196 | 110 android:grantUriPermissions="true" > 197 | 110-->[com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:44:13-47 198 | 111 199 | 112 200 | 113 [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:10:9-12:40 202 | 114 android:name="org.apache.http.legacy" 203 | 114-->[com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:11:13-50 204 | 115 android:required="false" /> 205 | 115-->[com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:12:13-37 206 | 116 207 | 117 208 | 118 209 | -------------------------------------------------------------------------------- /app/build/outputs/logs/manifest-merger-debug-report.txt: -------------------------------------------------------------------------------- 1 | -- Merging decision tree log --- 2 | manifest 3 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 4 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 5 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 6 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 7 | MERGED from [androidx.appcompat:appcompat:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fd6515207cf4940577d2f862c3be9f5f\appcompat-1.0.0\AndroidManifest.xml:17:1-22:12 8 | MERGED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:2:1-17:12 9 | MERGED from [androidx.fragment:fragment:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\ccca59f2e409d33d5c4ad964d2a01ab7\fragment-1.0.0\AndroidManifest.xml:17:1-22:12 10 | MERGED from [androidx.vectordrawable:vectordrawable-animated:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\0ff2602ece6dd35ce8928cf37abeece7\vectordrawable-animated-1.0.0\AndroidManifest.xml:17:1-22:12 11 | MERGED from [androidx.legacy:legacy-support-core-ui:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1a2f516db355d59400e2865c58e3fed6\legacy-support-core-ui-1.0.0\AndroidManifest.xml:17:1-22:12 12 | MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e197428a1206ff57b7d821eed8122d13\legacy-support-core-utils-1.0.0\AndroidManifest.xml:17:1-22:12 13 | MERGED from [androidx.vectordrawable:vectordrawable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4c26dd8169e3751edf66cde328d5e651\vectordrawable-1.0.0\AndroidManifest.xml:17:1-22:12 14 | MERGED from [androidx.loader:loader:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fc7996c6179d557db94083720ef45c53\loader-1.0.0\AndroidManifest.xml:17:1-22:12 15 | MERGED from [androidx.viewpager:viewpager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\151fe59817ff32b9b11a890d5ae2b553\viewpager-1.0.0\AndroidManifest.xml:17:1-22:12 16 | MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\211a7a48c10b1db29a056c5022e273a7\coordinatorlayout-1.0.0\AndroidManifest.xml:17:1-22:12 17 | MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\2f5d2becd73409c9bf7f17eeaa0bcd1c\drawerlayout-1.0.0\AndroidManifest.xml:17:1-22:12 18 | MERGED from [androidx.slidingpanelayout:slidingpanelayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\54403d019bfd395e459b3fb80fcd0a70\slidingpanelayout-1.0.0\AndroidManifest.xml:17:1-22:12 19 | MERGED from [androidx.customview:customview:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e581696c9485c4f7bb001fd7085c1e80\customview-1.0.0\AndroidManifest.xml:17:1-22:12 20 | MERGED from [androidx.swiperefreshlayout:swiperefreshlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bdeb6cd723d251ce5a3f44991a760526\swiperefreshlayout-1.0.0\AndroidManifest.xml:17:1-22:12 21 | MERGED from [androidx.asynclayoutinflater:asynclayoutinflater:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\03e9fb33b2c6fc391c4ea72ed2ebb47d\asynclayoutinflater-1.0.0\AndroidManifest.xml:17:1-22:12 22 | MERGED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:17:1-24:12 23 | MERGED from [androidx.versionedparcelable:versionedparcelable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e02fb77f8341f96dab9a1878f3ab35e5\versionedparcelable-1.0.0\AndroidManifest.xml:17:1-25:12 24 | MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9e9a33c8b0b25e3b1090a7a3cc67e630\cursoradapter-1.0.0\AndroidManifest.xml:17:1-22:12 25 | MERGED from [androidx.lifecycle:lifecycle-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\eb2e1dd9abbc8d346d1dd36ae53ba257\lifecycle-runtime-2.0.0\AndroidManifest.xml:17:1-22:12 26 | MERGED from [androidx.documentfile:documentfile:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bd26be8e6bf5975cfd327cdaa661f92f\documentfile-1.0.0\AndroidManifest.xml:17:1-22:12 27 | MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9231e5214458b9fe4d613fca3c5246ba\localbroadcastmanager-1.0.0\AndroidManifest.xml:17:1-22:12 28 | MERGED from [androidx.print:print:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4bc597a71550912f2265dc34e5976c6a\print-1.0.0\AndroidManifest.xml:17:1-22:12 29 | MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\077e96c5cc397195394d36eff30d37d5\lifecycle-viewmodel-2.0.0\AndroidManifest.xml:17:1-22:12 30 | MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\53eda91b53962a6fbe7b69b68fe0c514\lifecycle-livedata-2.0.0\AndroidManifest.xml:17:1-22:12 31 | MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b27f809968e43585468cfbc9fe7fab\lifecycle-livedata-core-2.0.0\AndroidManifest.xml:17:1-22:12 32 | MERGED from [androidx.arch.core:core-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d850533df33e73ebf3b21a82f50825bc\core-runtime-2.0.0\AndroidManifest.xml:17:1-22:12 33 | MERGED from [androidx.interpolator:interpolator:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\51a5b84d4f7e87d9c349b92132981d44\interpolator-1.0.0\AndroidManifest.xml:17:1-22:12 34 | MERGED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:2:1-28:12 35 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:2:1-35:12 36 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:2:1-16:12 37 | MERGED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:2:1-29:12 38 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:2:1-14:12 39 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:2:1-14:12 40 | MERGED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:2:1-21:12 41 | MERGED from [com.huawei.hmf:tasks:1.4.1.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\67fc636539997858505be4c26ed24142\tasks-1.4.1.300\AndroidManifest.xml:2:1-10:12 42 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:2:1-48:12 43 | MERGED from [com.huawei.hms:network-grs:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\5bf68cf7ff69270a5222f9c9c3a3e966\network-grs-4.0.18.300\AndroidManifest.xml:2:1-11:12 44 | MERGED from [com.huawei.android.hms:security-encrypt:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1d39a18fd76720d9aafd160eb599327f\security-encrypt-1.1.5.302\AndroidManifest.xml:2:1-11:12 45 | MERGED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:2:1-15:12 46 | MERGED from [com.huawei.hms:network-common:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fe4099e15013c88154dd7f0958982cbe\network-common-4.0.18.300\AndroidManifest.xml:2:1-11:12 47 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 48 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 49 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 50 | package 51 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:3:5-29 52 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 53 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 54 | android:versionName 55 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 56 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 57 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 58 | android:versionCode 59 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 60 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 61 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 62 | xmlns:android 63 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:11-69 64 | application 65 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:5:5-20:19 66 | MERGED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:11:5-15:19 67 | MERGED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:11:5-15:19 68 | MERGED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:22:5-89 69 | MERGED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:22:5-89 70 | MERGED from [androidx.versionedparcelable:versionedparcelable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e02fb77f8341f96dab9a1878f3ab35e5\versionedparcelable-1.0.0\AndroidManifest.xml:22:5-23:19 71 | MERGED from [androidx.versionedparcelable:versionedparcelable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e02fb77f8341f96dab9a1878f3ab35e5\versionedparcelable-1.0.0\AndroidManifest.xml:22:5-23:19 72 | MERGED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:12:5-26:19 73 | MERGED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:12:5-26:19 74 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:20:5-33:19 75 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:20:5-33:19 76 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:14:5-20 77 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:14:5-20 78 | MERGED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:9:5-27:19 79 | MERGED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:9:5-27:19 80 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:12:5-20 81 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:12:5-20 82 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:12:5-20 83 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:12:5-20 84 | MERGED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:10:5-19:19 85 | MERGED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:10:5-19:19 86 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:20:5-46:19 87 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:20:5-46:19 88 | MERGED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:9:5-13:19 89 | MERGED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:9:5-13:19 90 | android:appComponentFactory 91 | ADDED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:22:18-86 92 | android:supportsRtl 93 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:10:9-35 94 | android:label 95 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:8:9-41 96 | android:roundIcon 97 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:9:9-42 98 | android:icon 99 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:7:9-37 100 | android:allowBackup 101 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:6:9-35 102 | android:theme 103 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:11:9-40 104 | activity#com.huawei.hms.iap.vrpaydemo.MainActivity 105 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:12:9-18:20 106 | android:name 107 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:12:19-75 108 | intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER 109 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:13:13-17:29 110 | action#android.intent.action.MAIN 111 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:14:17-69 112 | android:name 113 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:14:25-66 114 | category#android.intent.category.LAUNCHER 115 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:16:17-77 116 | android:name 117 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:16:27-74 118 | uses-sdk 119 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml reason: use-sdk injection requested 120 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 121 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 122 | MERGED from [androidx.appcompat:appcompat:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fd6515207cf4940577d2f862c3be9f5f\appcompat-1.0.0\AndroidManifest.xml:20:5-44 123 | MERGED from [androidx.appcompat:appcompat:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fd6515207cf4940577d2f862c3be9f5f\appcompat-1.0.0\AndroidManifest.xml:20:5-44 124 | MERGED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:7:5-9:41 125 | MERGED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:7:5-9:41 126 | MERGED from [androidx.fragment:fragment:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\ccca59f2e409d33d5c4ad964d2a01ab7\fragment-1.0.0\AndroidManifest.xml:20:5-44 127 | MERGED from [androidx.fragment:fragment:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\ccca59f2e409d33d5c4ad964d2a01ab7\fragment-1.0.0\AndroidManifest.xml:20:5-44 128 | MERGED from [androidx.vectordrawable:vectordrawable-animated:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\0ff2602ece6dd35ce8928cf37abeece7\vectordrawable-animated-1.0.0\AndroidManifest.xml:20:5-44 129 | MERGED from [androidx.vectordrawable:vectordrawable-animated:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\0ff2602ece6dd35ce8928cf37abeece7\vectordrawable-animated-1.0.0\AndroidManifest.xml:20:5-44 130 | MERGED from [androidx.legacy:legacy-support-core-ui:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1a2f516db355d59400e2865c58e3fed6\legacy-support-core-ui-1.0.0\AndroidManifest.xml:20:5-44 131 | MERGED from [androidx.legacy:legacy-support-core-ui:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1a2f516db355d59400e2865c58e3fed6\legacy-support-core-ui-1.0.0\AndroidManifest.xml:20:5-44 132 | MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e197428a1206ff57b7d821eed8122d13\legacy-support-core-utils-1.0.0\AndroidManifest.xml:20:5-44 133 | MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e197428a1206ff57b7d821eed8122d13\legacy-support-core-utils-1.0.0\AndroidManifest.xml:20:5-44 134 | MERGED from [androidx.vectordrawable:vectordrawable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4c26dd8169e3751edf66cde328d5e651\vectordrawable-1.0.0\AndroidManifest.xml:20:5-44 135 | MERGED from [androidx.vectordrawable:vectordrawable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4c26dd8169e3751edf66cde328d5e651\vectordrawable-1.0.0\AndroidManifest.xml:20:5-44 136 | MERGED from [androidx.loader:loader:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fc7996c6179d557db94083720ef45c53\loader-1.0.0\AndroidManifest.xml:20:5-44 137 | MERGED from [androidx.loader:loader:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fc7996c6179d557db94083720ef45c53\loader-1.0.0\AndroidManifest.xml:20:5-44 138 | MERGED from [androidx.viewpager:viewpager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\151fe59817ff32b9b11a890d5ae2b553\viewpager-1.0.0\AndroidManifest.xml:20:5-44 139 | MERGED from [androidx.viewpager:viewpager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\151fe59817ff32b9b11a890d5ae2b553\viewpager-1.0.0\AndroidManifest.xml:20:5-44 140 | MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\211a7a48c10b1db29a056c5022e273a7\coordinatorlayout-1.0.0\AndroidManifest.xml:20:5-44 141 | MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\211a7a48c10b1db29a056c5022e273a7\coordinatorlayout-1.0.0\AndroidManifest.xml:20:5-44 142 | MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\2f5d2becd73409c9bf7f17eeaa0bcd1c\drawerlayout-1.0.0\AndroidManifest.xml:20:5-44 143 | MERGED from [androidx.drawerlayout:drawerlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\2f5d2becd73409c9bf7f17eeaa0bcd1c\drawerlayout-1.0.0\AndroidManifest.xml:20:5-44 144 | MERGED from [androidx.slidingpanelayout:slidingpanelayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\54403d019bfd395e459b3fb80fcd0a70\slidingpanelayout-1.0.0\AndroidManifest.xml:20:5-44 145 | MERGED from [androidx.slidingpanelayout:slidingpanelayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\54403d019bfd395e459b3fb80fcd0a70\slidingpanelayout-1.0.0\AndroidManifest.xml:20:5-44 146 | MERGED from [androidx.customview:customview:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e581696c9485c4f7bb001fd7085c1e80\customview-1.0.0\AndroidManifest.xml:20:5-44 147 | MERGED from [androidx.customview:customview:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e581696c9485c4f7bb001fd7085c1e80\customview-1.0.0\AndroidManifest.xml:20:5-44 148 | MERGED from [androidx.swiperefreshlayout:swiperefreshlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bdeb6cd723d251ce5a3f44991a760526\swiperefreshlayout-1.0.0\AndroidManifest.xml:20:5-44 149 | MERGED from [androidx.swiperefreshlayout:swiperefreshlayout:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bdeb6cd723d251ce5a3f44991a760526\swiperefreshlayout-1.0.0\AndroidManifest.xml:20:5-44 150 | MERGED from [androidx.asynclayoutinflater:asynclayoutinflater:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\03e9fb33b2c6fc391c4ea72ed2ebb47d\asynclayoutinflater-1.0.0\AndroidManifest.xml:20:5-44 151 | MERGED from [androidx.asynclayoutinflater:asynclayoutinflater:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\03e9fb33b2c6fc391c4ea72ed2ebb47d\asynclayoutinflater-1.0.0\AndroidManifest.xml:20:5-44 152 | MERGED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:20:5-44 153 | MERGED from [androidx.core:core:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\882d2ce137ed0039d1b61a751140503b\core-1.0.0\AndroidManifest.xml:20:5-44 154 | MERGED from [androidx.versionedparcelable:versionedparcelable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e02fb77f8341f96dab9a1878f3ab35e5\versionedparcelable-1.0.0\AndroidManifest.xml:20:5-44 155 | MERGED from [androidx.versionedparcelable:versionedparcelable:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\e02fb77f8341f96dab9a1878f3ab35e5\versionedparcelable-1.0.0\AndroidManifest.xml:20:5-44 156 | MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9e9a33c8b0b25e3b1090a7a3cc67e630\cursoradapter-1.0.0\AndroidManifest.xml:20:5-44 157 | MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9e9a33c8b0b25e3b1090a7a3cc67e630\cursoradapter-1.0.0\AndroidManifest.xml:20:5-44 158 | MERGED from [androidx.lifecycle:lifecycle-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\eb2e1dd9abbc8d346d1dd36ae53ba257\lifecycle-runtime-2.0.0\AndroidManifest.xml:20:5-44 159 | MERGED from [androidx.lifecycle:lifecycle-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\eb2e1dd9abbc8d346d1dd36ae53ba257\lifecycle-runtime-2.0.0\AndroidManifest.xml:20:5-44 160 | MERGED from [androidx.documentfile:documentfile:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bd26be8e6bf5975cfd327cdaa661f92f\documentfile-1.0.0\AndroidManifest.xml:20:5-44 161 | MERGED from [androidx.documentfile:documentfile:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\bd26be8e6bf5975cfd327cdaa661f92f\documentfile-1.0.0\AndroidManifest.xml:20:5-44 162 | MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9231e5214458b9fe4d613fca3c5246ba\localbroadcastmanager-1.0.0\AndroidManifest.xml:20:5-44 163 | MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\9231e5214458b9fe4d613fca3c5246ba\localbroadcastmanager-1.0.0\AndroidManifest.xml:20:5-44 164 | MERGED from [androidx.print:print:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4bc597a71550912f2265dc34e5976c6a\print-1.0.0\AndroidManifest.xml:20:5-44 165 | MERGED from [androidx.print:print:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\4bc597a71550912f2265dc34e5976c6a\print-1.0.0\AndroidManifest.xml:20:5-44 166 | MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\077e96c5cc397195394d36eff30d37d5\lifecycle-viewmodel-2.0.0\AndroidManifest.xml:20:5-44 167 | MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\077e96c5cc397195394d36eff30d37d5\lifecycle-viewmodel-2.0.0\AndroidManifest.xml:20:5-44 168 | MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\53eda91b53962a6fbe7b69b68fe0c514\lifecycle-livedata-2.0.0\AndroidManifest.xml:20:5-44 169 | MERGED from [androidx.lifecycle:lifecycle-livedata:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\53eda91b53962a6fbe7b69b68fe0c514\lifecycle-livedata-2.0.0\AndroidManifest.xml:20:5-44 170 | MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b27f809968e43585468cfbc9fe7fab\lifecycle-livedata-core-2.0.0\AndroidManifest.xml:20:5-44 171 | MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b27f809968e43585468cfbc9fe7fab\lifecycle-livedata-core-2.0.0\AndroidManifest.xml:20:5-44 172 | MERGED from [androidx.arch.core:core-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d850533df33e73ebf3b21a82f50825bc\core-runtime-2.0.0\AndroidManifest.xml:20:5-44 173 | MERGED from [androidx.arch.core:core-runtime:2.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d850533df33e73ebf3b21a82f50825bc\core-runtime-2.0.0\AndroidManifest.xml:20:5-44 174 | MERGED from [androidx.interpolator:interpolator:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\51a5b84d4f7e87d9c349b92132981d44\interpolator-1.0.0\AndroidManifest.xml:20:5-44 175 | MERGED from [androidx.interpolator:interpolator:1.0.0] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\51a5b84d4f7e87d9c349b92132981d44\interpolator-1.0.0\AndroidManifest.xml:20:5-44 176 | MERGED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:5:5-7:41 177 | MERGED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:5:5-7:41 178 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:5:5-7:41 179 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:5:5-7:41 180 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:5:5-7:41 181 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:5:5-7:41 182 | MERGED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:5:5-7:41 183 | MERGED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:5:5-7:41 184 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:5:5-7:41 185 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:5:5-7:41 186 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:5:5-7:41 187 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:5:5-7:41 188 | MERGED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:6:5-8:41 189 | MERGED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:6:5-8:41 190 | MERGED from [com.huawei.hmf:tasks:1.4.1.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\67fc636539997858505be4c26ed24142\tasks-1.4.1.300\AndroidManifest.xml:6:5-8:41 191 | MERGED from [com.huawei.hmf:tasks:1.4.1.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\67fc636539997858505be4c26ed24142\tasks-1.4.1.300\AndroidManifest.xml:6:5-8:41 192 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:7:5-9:41 193 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:7:5-9:41 194 | MERGED from [com.huawei.hms:network-grs:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\5bf68cf7ff69270a5222f9c9c3a3e966\network-grs-4.0.18.300\AndroidManifest.xml:7:5-9:41 195 | MERGED from [com.huawei.hms:network-grs:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\5bf68cf7ff69270a5222f9c9c3a3e966\network-grs-4.0.18.300\AndroidManifest.xml:7:5-9:41 196 | MERGED from [com.huawei.android.hms:security-encrypt:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1d39a18fd76720d9aafd160eb599327f\security-encrypt-1.1.5.302\AndroidManifest.xml:7:5-9:41 197 | MERGED from [com.huawei.android.hms:security-encrypt:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\1d39a18fd76720d9aafd160eb599327f\security-encrypt-1.1.5.302\AndroidManifest.xml:7:5-9:41 198 | MERGED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:7:5-43 199 | MERGED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:7:5-43 200 | MERGED from [com.huawei.hms:network-common:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fe4099e15013c88154dd7f0958982cbe\network-common-4.0.18.300\AndroidManifest.xml:7:5-9:41 201 | MERGED from [com.huawei.hms:network-common:4.0.18.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\fe4099e15013c88154dd7f0958982cbe\network-common-4.0.18.300\AndroidManifest.xml:7:5-9:41 202 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 203 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 204 | android:targetSdkVersion 205 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 206 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 207 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 208 | android:minSdkVersion 209 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 210 | ADDED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 211 | INJECTED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml 212 | meta-data#com.huawei.hms.client.service.name:iap 213 | ADDED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:12:9-14:45 214 | android:value 215 | ADDED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:14:13-42 216 | android:name 217 | ADDED from [com.huawei.hms:iap:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\8aa7a86062906fcf7c6e8d2ed750712d\iap-5.0.4.301\AndroidManifest.xml:13:13-66 218 | uses-permission#android.permission.INTERNET 219 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:10:5-67 220 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:10:5-67 221 | MERGED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:10:5-67 222 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:10:5-67 223 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:10:5-67 224 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:11:5-67 225 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:11:5-67 226 | android:name 227 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:10:22-64 228 | meta-data#com.huawei.hms.client.service.name:base 229 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:18:9-20:46 230 | android:value 231 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:20:13-43 232 | android:name 233 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:19:13-67 234 | meta-data#com.huawei.hms.min_api_level:base:hmscore 235 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:23:9-25:33 236 | android:value 237 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:25:13-30 238 | android:name 239 | ADDED from [com.huawei.hms:base:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\c77082f1933c329a7947c2c6799c6fda\base-5.0.4.301\AndroidManifest.xml:24:13-69 240 | uses-permission#android.permission.WRITE_EXTERNAL_STORAGE 241 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:12:5-81 242 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:10:5-81 243 | MERGED from [com.huawei.hms:log:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\d7ec1a2266bb95cda429bc89b60b14f1\log-5.0.4.301\AndroidManifest.xml:10:5-81 244 | android:name 245 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:12:22-78 246 | uses-permission#android.permission.ACCESS_NETWORK_STATE 247 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:14:5-79 248 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:12:5-79 249 | MERGED from [com.huawei.hms:stats:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\769473e38838668f20040ef6dee4b0f9\stats-5.0.4.301\AndroidManifest.xml:12:5-79 250 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:10:5-79 251 | MERGED from [com.huawei.hms:device:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\88cd741f65dfd3ba76690af939601eb6\device-5.0.4.301\AndroidManifest.xml:10:5-79 252 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:12:5-79 253 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:12:5-79 254 | android:name 255 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:14:22-76 256 | uses-permission#android.permission.REQUEST_INSTALL_PACKAGES 257 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:16:5-83 258 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:15:5-83 259 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:15:5-83 260 | android:name 261 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:16:22-80 262 | uses-permission#com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA 263 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:18:5-106 264 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:18:5-106 265 | MERGED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:18:5-106 266 | android:name 267 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:18:22-103 268 | meta-data#availableLoaded 269 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:23:9-25:35 270 | android:value 271 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:25:13-32 272 | android:name 273 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:24:13-43 274 | provider#com.huawei.hms.update.provider.UpdateProvider 275 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:27:9-32:20 276 | android:grantUriPermissions 277 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:31:13-47 278 | android:authorities 279 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:29:13-71 280 | android:exported 281 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:30:13-37 282 | android:name 283 | ADDED from [com.huawei.hms:availableupdate:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\7cd149c1f376a74dc15ea59734c28037\availableupdate-5.0.4.301\AndroidManifest.xml:28:13-73 284 | uses-permission#android.permission.READ_EXTERNAL_STORAGE 285 | IMPLIED from D:\VR\project\huawei-iap-VR-client-android-demo\app\src\main\AndroidManifest.xml:2:1-22:12 reason: com.huawei.hms.base.availableupdate requested WRITE_EXTERNAL_STORAGE 286 | activity#com.huawei.hms.activity.BridgeActivity 287 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:10:9-21:20 288 | android:screenOrientation 289 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:16:13-47 290 | android:excludeFromRecents 291 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:13:13-46 292 | android:hardwareAccelerated 293 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:15:13-47 294 | android:exported 295 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:14:13-37 296 | android:configChanges 297 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:12:13-131 298 | android:theme 299 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:17:13-61 300 | android:name 301 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:11:13-66 302 | meta-data#hwc-theme 303 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:18:13-20:77 304 | android:value 305 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:20:17-74 306 | android:name 307 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:19:17-41 308 | activity#com.huawei.hms.activity.EnableServiceActivity 309 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:22:9-26:20 310 | android:exported 311 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:25:13-37 312 | android:configChanges 313 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:24:13-106 314 | android:name 315 | ADDED from [com.huawei.hms:ui:5.0.4.301] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\365171fe5f49dde266fc8747895f6109\ui-5.0.4.301\AndroidManifest.xml:23:13-73 316 | provider#com.huawei.agconnect.core.provider.AGConnectInitializeProvider 317 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:11:9-14:40 318 | android:authorities 319 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:13:13-73 320 | android:exported 321 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:14:13-37 322 | android:name 323 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:12:13-90 324 | service#com.huawei.agconnect.core.ServiceDiscovery 325 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:16:9-18:40 326 | android:exported 327 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:18:13-37 328 | android:name 329 | ADDED from [com.huawei.agconnect:agconnect-core:1.4.0.300] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\b519c66257cbfebbea2437196f7c20e7\agconnect-core-1.4.0.300\AndroidManifest.xml:17:13-70 330 | activity#com.huawei.updatesdk.service.otaupdate.AppUpdateActivity 331 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:21:9-29:20 332 | android:exported 333 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:24:13-37 334 | android:configChanges 335 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:23:13-59 336 | android:theme 337 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:25:13-72 338 | android:name 339 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:22:13-84 340 | activity#com.huawei.updatesdk.support.pm.PackageInstallerActivity 341 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:30:9-38:20 342 | android:exported 343 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:33:13-37 344 | android:configChanges 345 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:32:13-74 346 | android:theme 347 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:34:13-72 348 | android:name 349 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:31:13-84 350 | provider#com.huawei.updatesdk.fileprovider.UpdateSdkFileProvider 351 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:40:9-45:20 352 | android:grantUriPermissions 353 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:44:13-47 354 | android:authorities 355 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:42:13-74 356 | android:exported 357 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:43:13-37 358 | android:name 359 | ADDED from [com.huawei.hms:update:2.0.7.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\32b80d23466b1797a202507f85cff620\update-2.0.7.302\AndroidManifest.xml:41:13-83 360 | uses-library#org.apache.http.legacy 361 | ADDED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:10:9-12:40 362 | android:required 363 | ADDED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:12:13-37 364 | android:name 365 | ADDED from [com.huawei.android.hms:security-ssl:1.1.5.302] C:\Users\g00520444\.gradle\caches\transforms-2\files-2.1\25eca41ba9b4be352298fd10486b0762\security-ssl-1.1.5.302\AndroidManifest.xml:11:13-50 366 | --------------------------------------------------------------------------------