├── 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 |
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 |
57 |
58 | Once purchase succeed, IAP Service will display the purchase result.
59 |
60 |
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 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | generateDebugSources
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
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 |
--------------------------------------------------------------------------------