Updated on 2026-08-14

This commit is contained in:
Tangem 2026-08-14 10:36:51 +00:00
parent 616d2df779
commit 358144ee61
6 changed files with 2022 additions and 0 deletions

45
README.md Normal file
View file

@ -0,0 +1,45 @@
# **How to build application**
# Project Build Documentation
## 1. Required Tools
To build the project, you will need to have **Android Studio** version 2024.1.1 or higher. The embedded version of **Java** should be version **17** or higher.
### Steps:
1. Install **Android Studio**
- You can download the latest version from the [official Android Studio website](https://developer.android.com/studio).
2. Setup JDK
- In the Android Studio go to *Android Studio* option in top menu bar -> *Preferences* -> *Build, Execution,
Deployment* -> *Build Tools* -> *Gradle*.
- In *Gradle JDK* field check if you have JDK 17. If not, choose *Download JDK* in the drop down menu and choose **Amazon Coretto 17.0.14**
(or any other version starts with 17).
- Apply changes, press **Ok** and restart the Android Studio.
## 2. Required Dependencies
To be able to use key dependencies, you need to be able to pull them from **GitHub Package Registry**.
### Steps:
1. Go to [GitHub Settings → Developer settings → Personal access tokens](https://github.com/settings/tokens).
2. Click *Generate new token* -> *Generate new token (classic)* -> type any name for the token -> dont change anything, just check the box `read:packages` -> press “Generate token” -> copy the generated token
3. Open the `local.properties` file in the root project directory (or you can press **Command+Shift+O** and type “local.
properties” to find the file) and add the following lines:
```properties
gpr.user=YOUR_GITHUB_USERNAME
gpr.key=YOUR_GENERATED_TOKEN
```
- `YOUR_GITHUB_USERNAME` — your GitHub username
- `YOUR_GENERATED_TOKEN` — the token you generated in the previous step.
## 3. Sync Gradle and Build the Project
Once all the previous steps are completed, you need to sync your Gradle files and run the build.
### Steps:
1. Checkout the **master** branch.
2. Select **Build Variant** for the project as **googleExternal**.
3. In Android Studio, go to the **File** menu and select **Sync Project with Gradle Files**.
4. Once the sync is complete, you can build the project by selecting **Build → Make Project** or pressing **Ctrl+F9** (Windows/Linux) or **Cmd+F9** (macOS) or **Build → Build App Bundle(s) → Build APK(s)**.
5. Ensure there are no errors in the **Build Output** and that the project is successfully built.
**Alternative:**
Instead of steps 25, you can build the project from the command line:
`./gradlew assembleGoogleExternal`

View file

@ -0,0 +1,3 @@
store_password=android
key_alias=dummy
key_password=android

View file

@ -0,0 +1,225 @@
{
"amplitudeApiKey": "PLACEHOLDER",
"amplitudeApiKeyDev": "PLACEHOLDER",
"appsFlyer": {
"appsFlyerDevKey": "PLACEHOLDER",
"appsFlyerAppID": "PLACEHOLDER"
},
"blockchairApiKeys": [
"PLACEHOLDER"
],
"blockchairAuthorizationToken": "PLACEHOLDER",
"blockcypherTokens": [
"PLACEHOLDER"
],
"bscQuiknodeApiKey": "PLACEHOLDER",
"bscQuiknodeSubdomain": "PLACEHOLDER",
"getBlockAccessTokens": {
"avalanche": {
"jsonRpc": "PLACEHOLDER"
},
"ethereum": {
"jsonRpc": "PLACEHOLDER"
},
"ethereumClassic": {
"jsonRpc": "PLACEHOLDER"
},
"fantom": {
"jsonRpc": "PLACEHOLDER"
},
"rsk": {
"jsonRpc": "PLACEHOLDER"
},
"bsc": {
"jsonRpc": "PLACEHOLDER"
},
"polygon": {
"jsonRpc": "PLACEHOLDER"
},
"xdai": {
"jsonRpc": "PLACEHOLDER"
},
"cronos": {
"jsonRpc": "PLACEHOLDER"
},
"solana": {
"jsonRpc": "PLACEHOLDER"
},
"ton": {
"jsonRpc": "PLACEHOLDER"
},
"tron": {
"rest": "PLACEHOLDER"
},
"cosmos-hub": {
"rest": "PLACEHOLDER"
},
"near": {
"jsonRpc": "PLACEHOLDER"
},
"xrp": {
"jsonRpc": "PLACEHOLDER"
},
"cardano": {
"rosetta": "PLACEHOLDER"
},
"dogecoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"litecoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"dash": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"bitcoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"aptos": {
"rest": "PLACEHOLDER"
},
"algorand": {
"rest": "PLACEHOLDER"
},
"polygon-zkevm": {
"jsonRpc": "PLACEHOLDER"
},
"zksync": {
"jsonRpc": "PLACEHOLDER"
},
"base": {
"jsonRpc": "PLACEHOLDER"
},
"blast": {
"jsonRpc": "PLACEHOLDER"
},
"filecoin": {
"jsonRpc": "PLACEHOLDER"
},
"arbitrum-one": {
"jsonRpc": "PLACEHOLDER"
},
"bitcoinCash": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"kusama": {
"jsonRpc": "PLACEHOLDER"
},
"moonbeam": {
"jsonRpc": "PLACEHOLDER"
},
"optimism": {
"jsonRpc": "PLACEHOLDER"
},
"polkadot": {
"jsonRpc": "PLACEHOLDER"
},
"shibarium": {
"jsonRpc": "PLACEHOLDER"
},
"sui": {
"jsonRpc": "PLACEHOLDER"
},
"telos": {
"jsonRpc": "PLACEHOLDER"
},
"tezos": {
"rest": "PLACEHOLDER"
},
"monad": {
"rest": "PLACEHOLDER"
},
"stellar": {
"rest": "PLACEHOLDER"
},
"berachain": {
"rest": "PLACEHOLDER"
}
},
"kaspaSecondaryApiUrl": "PLACEHOLDER",
"infuraProjectId": "PLACEHOLDER",
"mercuryoSecret": "PLACEHOLDER",
"mercuryoWidgetId": "PLACEHOLDER",
"moonPayApiKey": "PLACEHOLDER",
"moonPayApiSecretKey": "PLACEHOLDER",
"nowNodesApiKey": "PLACEHOLDER",
"tonCenterApiKey": {
"mainnet": "PLACEHOLDER",
"testnet": "PLACEHOLDER"
},
"quiknodeApiKey": "PLACEHOLDER",
"quiknodeSubdomain": "PLACEHOLDER",
"quiknodePlasmaApiKey": "PLACEHOLDER",
"quiknodePlasmaSubdomain": "PLACEHOLDER",
"quiknodeMonadApiKey": "PLACEHOLDER",
"quiknodeMonadSubdomain": "PLACEHOLDER",
"quiknodeStellarApiKey": "PLACEHOLDER",
"quiknodeStellarSubdomain": "PLACEHOLDER",
"quiknodeBerachainApiKey": "PLACEHOLDER",
"quiknodeBerachainSubdomain": "PLACEHOLDER",
"quiknodeXRPLApiKey": "PLACEHOLDER",
"quiknodeXRPLSubdomain": "PLACEHOLDER",
"quiknodeRobinhoodApiKey": "PLACEHOLDER",
"quiknodeRobinhoodSubdomain": "PLACEHOLDER",
"quiknodeHederaApiKey": "PLACEHOLDER",
"quiknodeHederaSubdomain": "PLACEHOLDER",
"tronGridApiKey": "PLACEHOLDER",
"walletConnectProjectId": "PLACEHOLDER",
"chiaFireAcademyApiKey": "PLACEHOLDER",
"chiaTangemApiKey": "PLACEHOLDER",
"express": {
"apiKey": "PLACEHOLDER",
"signVerifierPublicKey": "PLACEHOLDER"
},
"devExpress": {
"apiKey": "PLACEHOLDER",
"signVerifierPublicKey": "PLACEHOLDER"
},
"hederaArkhiaKey": "PLACEHOLDER",
"polygonScanApiKey": "PLACEHOLDER",
"koinosProApiKey": "PLACEHOLDER",
"stakeKitApiKey": "PLACEHOLDER",
"bittensorDwellirKey": "PLACEHOLDER",
"dwellirApiKey": "PLACEHOLDER",
"bittensorOnfinalityKey": "PLACEHOLDER",
"alephiumTangemApiKey": "PLACEHOLDER",
"moralisApiKey": "PLACEHOLDER",
"blockaidApiKey": "PLACEHOLDER",
"tangemApiKey": "PLACEHOLDER",
"tangemApiKeyDev": "PLACEHOLDER",
"tangemApiKeyStage": "PLACEHOLDER",
"etherscanApiKey": "PLACEHOLDER",
"yieldModuleApiKey": "PLACEHOLDER",
"yieldModuleApiKeyDev": "PLACEHOLDER",
"blinkApiKey": "PLACEHOLDER",
"tatumApiKey": "PLACEHOLDER",
"bffStaticToken": "PLACEHOLDER",
"bffStaticTokenDev": "PLACEHOLDER",
"p2pApiKey": {
"mainnet": "PLACEHOLDER",
"hoodi": "PLACEHOLDER"
},
"customerIO": {
"androidApiKey": "PLACEHOLDER"
},
"surveySparrow": {
"clientID": "PLACEHOLDER",
"clientSecret": "PLACEHOLDER",
"apiKey": "PLACEHOLDER",
"swapRating": {
"surveyId": "PLACEHOLDER",
"ratingQuestionId": "PLACEHOLDER",
"feedbackQuestionId": "PLACEHOLDER"
}
},
"gaslessTxApiKey": "PLACEHOLDER",
"gaslessTxApiKeyDev": "PLACEHOLDER",
"alchemyApiKey": "PLACEHOLDER",
"authServiceKey": "PLACEHOLDER",
"otplApiKey": "PLACEHOLDER"
}

View file

@ -0,0 +1,225 @@
{
"amplitudeApiKey": "PLACEHOLDER",
"amplitudeApiKeyDev": "PLACEHOLDER",
"appsFlyer": {
"appsFlyerDevKey": "PLACEHOLDER",
"appsFlyerAppID": "PLACEHOLDER"
},
"blockchairApiKeys": [
"PLACEHOLDER"
],
"blockchairAuthorizationToken": "PLACEHOLDER",
"blockcypherTokens": [
"PLACEHOLDER"
],
"bscQuiknodeApiKey": "PLACEHOLDER",
"bscQuiknodeSubdomain": "PLACEHOLDER",
"getBlockAccessTokens": {
"avalanche": {
"jsonRpc": "PLACEHOLDER"
},
"ethereum": {
"jsonRpc": "PLACEHOLDER"
},
"ethereumClassic": {
"jsonRpc": "PLACEHOLDER"
},
"fantom": {
"jsonRpc": "PLACEHOLDER"
},
"rsk": {
"jsonRpc": "PLACEHOLDER"
},
"bsc": {
"jsonRpc": "PLACEHOLDER"
},
"polygon": {
"jsonRpc": "PLACEHOLDER"
},
"xdai": {
"jsonRpc": "PLACEHOLDER"
},
"cronos": {
"jsonRpc": "PLACEHOLDER"
},
"solana": {
"jsonRpc": "PLACEHOLDER"
},
"ton": {
"jsonRpc": "PLACEHOLDER"
},
"tron": {
"rest": "PLACEHOLDER"
},
"cosmos-hub": {
"rest": "PLACEHOLDER"
},
"near": {
"jsonRpc": "PLACEHOLDER"
},
"xrp": {
"jsonRpc": "PLACEHOLDER"
},
"cardano": {
"rosetta": "PLACEHOLDER"
},
"dogecoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"litecoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"dash": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"bitcoin": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"aptos": {
"rest": "PLACEHOLDER"
},
"algorand": {
"rest": "PLACEHOLDER"
},
"polygon-zkevm": {
"jsonRpc": "PLACEHOLDER"
},
"zksync": {
"jsonRpc": "PLACEHOLDER"
},
"base": {
"jsonRpc": "PLACEHOLDER"
},
"blast": {
"jsonRpc": "PLACEHOLDER"
},
"filecoin": {
"jsonRpc": "PLACEHOLDER"
},
"arbitrum-one": {
"jsonRpc": "PLACEHOLDER"
},
"bitcoinCash": {
"blockBookRest": "PLACEHOLDER",
"jsonRpc": "PLACEHOLDER"
},
"kusama": {
"jsonRpc": "PLACEHOLDER"
},
"moonbeam": {
"jsonRpc": "PLACEHOLDER"
},
"optimism": {
"jsonRpc": "PLACEHOLDER"
},
"polkadot": {
"jsonRpc": "PLACEHOLDER"
},
"shibarium": {
"jsonRpc": "PLACEHOLDER"
},
"sui": {
"jsonRpc": "PLACEHOLDER"
},
"telos": {
"jsonRpc": "PLACEHOLDER"
},
"tezos": {
"rest": "PLACEHOLDER"
},
"monad": {
"rest": "PLACEHOLDER"
},
"stellar": {
"rest": "PLACEHOLDER"
},
"berachain": {
"rest": "PLACEHOLDER"
}
},
"kaspaSecondaryApiUrl": "PLACEHOLDER",
"infuraProjectId": "PLACEHOLDER",
"mercuryoSecret": "PLACEHOLDER",
"mercuryoWidgetId": "PLACEHOLDER",
"moonPayApiKey": "PLACEHOLDER",
"moonPayApiSecretKey": "PLACEHOLDER",
"nowNodesApiKey": "PLACEHOLDER",
"tonCenterApiKey": {
"mainnet": "PLACEHOLDER",
"testnet": "PLACEHOLDER"
},
"quiknodeApiKey": "PLACEHOLDER",
"quiknodeSubdomain": "PLACEHOLDER",
"quiknodePlasmaApiKey": "PLACEHOLDER",
"quiknodePlasmaSubdomain": "PLACEHOLDER",
"quiknodeMonadApiKey": "PLACEHOLDER",
"quiknodeMonadSubdomain": "PLACEHOLDER",
"quiknodeStellarApiKey": "PLACEHOLDER",
"quiknodeStellarSubdomain": "PLACEHOLDER",
"quiknodeBerachainApiKey": "PLACEHOLDER",
"quiknodeBerachainSubdomain": "PLACEHOLDER",
"quiknodeXRPLApiKey": "PLACEHOLDER",
"quiknodeXRPLSubdomain": "PLACEHOLDER",
"quiknodeRobinhoodApiKey": "PLACEHOLDER",
"quiknodeRobinhoodSubdomain": "PLACEHOLDER",
"quiknodeHederaApiKey": "PLACEHOLDER",
"quiknodeHederaSubdomain": "PLACEHOLDER",
"tronGridApiKey": "PLACEHOLDER",
"walletConnectProjectId": "PLACEHOLDER",
"chiaFireAcademyApiKey": "PLACEHOLDER",
"chiaTangemApiKey": "PLACEHOLDER",
"express": {
"apiKey": "PLACEHOLDER",
"signVerifierPublicKey": "PLACEHOLDER"
},
"devExpress": {
"apiKey": "PLACEHOLDER",
"signVerifierPublicKey": "PLACEHOLDER"
},
"hederaArkhiaKey": "PLACEHOLDER",
"polygonScanApiKey": "PLACEHOLDER",
"koinosProApiKey": "PLACEHOLDER",
"stakeKitApiKey": "PLACEHOLDER",
"bittensorDwellirKey": "PLACEHOLDER",
"dwellirApiKey": "PLACEHOLDER",
"bittensorOnfinalityKey": "PLACEHOLDER",
"alephiumTangemApiKey": "PLACEHOLDER",
"moralisApiKey": "PLACEHOLDER",
"blockaidApiKey": "PLACEHOLDER",
"tangemApiKey": "PLACEHOLDER",
"tangemApiKeyDev": "PLACEHOLDER",
"tangemApiKeyStage": "PLACEHOLDER",
"etherscanApiKey": "PLACEHOLDER",
"yieldModuleApiKey": "PLACEHOLDER",
"yieldModuleApiKeyDev": "PLACEHOLDER",
"blinkApiKey": "PLACEHOLDER",
"tatumApiKey": "PLACEHOLDER",
"bffStaticToken": "PLACEHOLDER",
"bffStaticTokenDev": "PLACEHOLDER",
"p2pApiKey": {
"mainnet": "PLACEHOLDER",
"hoodi": "PLACEHOLDER"
},
"customerIO": {
"androidApiKey": "PLACEHOLDER"
},
"surveySparrow": {
"clientID": "PLACEHOLDER",
"clientSecret": "PLACEHOLDER",
"apiKey": "PLACEHOLDER",
"swapRating": {
"surveyId": "PLACEHOLDER",
"ratingQuestionId": "PLACEHOLDER",
"feedbackQuestionId": "PLACEHOLDER"
}
},
"gaslessTxApiKey": "PLACEHOLDER",
"gaslessTxApiKeyDev": "PLACEHOLDER",
"alchemyApiKey": "PLACEHOLDER",
"authServiceKey": "PLACEHOLDER",
"otplApiKey": "PLACEHOLDER"
}

File diff suppressed because it is too large Load diff