Android app config and fixes (#267)

* Android app confuration and fixes

* Adding ignore files

* Prettier

* Asset load

* Run prettier

* Add upload Web.bundle directory as build artifact

* CR

Co-authored-by: Reckless_Satoshi <reckless.satoshi@protonmail.com>
This commit is contained in:
KoalaSat 2022-10-04 18:00:37 +02:00 committed by GitHub
parent 0a100802f2
commit 0689377f2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 16568 additions and 2113 deletions

View File

@ -20,14 +20,14 @@ jobs:
- name: 'Checkout'
uses: actions/checkout@v3
- name: 'Download main.js Artifact'
- name: 'Download Android Web.bundle Artifact (built frontend)'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v2
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: mobile-main-js
path: mobile/html/Web.bundle/js/
name: mobile-web.bundle
path: mobile/html
- name: 'Download main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
@ -39,7 +39,7 @@ jobs:
- name: 'Install npm Dependencies'
run: |
cd mobile
npm install --force
npm install
- uses: actions/setup-java@v3
with:

View File

@ -48,16 +48,16 @@ jobs:
run: |
cd frontend
npm run build
- name: 'Archive Web Built Results'
- name: 'Archive Web Build Results'
uses: actions/upload-artifact@v3
with:
name: web-main-js
path: frontend/static/frontend/main.js
- name: 'Archive Mobile Built Results'
- name: 'Archive Mobile Build Results'
uses: actions/upload-artifact@v3
with:
name: mobile-main-js
path: mobile/html/Web.bundle/js/main.js
name: mobile-web.bundle
path: mobile/html/Web.bundle
# Invoke pre-release image build if this was not a tag push
# Docker images tagged only with short commit hash

15192
frontend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,7 @@
"@typescript-eslint/eslint-plugin": "^5.35.1",
"@typescript-eslint/parser": "^5.35.1",
"babel-loader": "^8.2.5",
"copy-webpack-plugin": "^11.0.0",
"eslint": "^8.23.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-standard-with-typescript": "^22.0.0",

View File

@ -12,7 +12,10 @@ import translationFR from '../../static/locales/fr.json';
import translationCA from '../../static/locales/ca.json';
import translationIT from '../../static/locales/it.json';
import translationPT from '../../static/locales/pt.json';
import translationEU from '../../static/locales/th.json';
import translationTH from '../../static/locales/th.json';
import translationCS from '../../static/locales/cs.json';
import translationEU from '../../static/locales/eu.json';
import translationSV from '../../static/locales/sv.json';
const config = {
resources: {
@ -26,6 +29,10 @@ const config = {
it: { translations: translationIT },
pt: { translations: translationPT },
eu: { translations: translationEU },
cs: { translations: translationCS },
th: { translations: translationTH },
pl: { translations: translationPL },
sv: { translations: translationSV },
},
fallbackLng: 'en',
debug: false,

View File

@ -8,6 +8,7 @@ class ApiNativeClient implements ApiClient {
}
private assetsCache: { [path: string]: string } = {};
private assetsPromises: { [path: string]: Promise<string | undefined> } = {};
private readonly getHeaders: () => HeadersInit = () => {
return { 'Content-Type': 'application/json', 'X-CSRFToken': getCookie('csrftoken') || '' };
@ -51,17 +52,24 @@ class ApiNativeClient implements ApiClient {
if (this.assetsCache[path]) {
return this.assetsCache[path];
} else if (path in this.assetsPromises) {
return this.assetsPromises[path];
}
const fileB64 = await window.NativeRobosats?.postMessage({
category: 'http',
type: 'xhr',
path,
this.assetsPromises[path] = new Promise<string>(async (resolve, reject) => {
const fileB64 = await window.NativeRobosats?.postMessage({
category: 'http',
type: 'xhr',
path,
}).catch(reject);
this.assetsCache[path] = `data:image/png;base64,${fileB64?.b64Data}`;
delete this.assetsPromises[path];
resolve(this.assetsCache[path]);
});
this.assetsCache[path] = `data:image/png;base64,${fileB64?.b64Data}`;
return this.assetsCache[path];
return this.assetsPromises[path];
};
}

View File

@ -1,5 +1,6 @@
import path from 'path';
import { Configuration } from 'webpack';
import CopyPlugin from 'copy-webpack-plugin';
const config: Configuration = {
entry: './src/index.js',
@ -47,6 +48,16 @@ const configMobile: Configuration = {
},
],
},
plugins: [
new CopyPlugin({
patterns: [
{
from: path.resolve(__dirname, 'static/css'),
to: path.resolve(__dirname, '../mobile/html/Web.bundle/css'),
},
],
}),
],
output: {
path: path.resolve(__dirname, '../mobile/html/Web.bundle/js'),
filename: 'main.js',

1
mobile/.gitignore vendored
View File

@ -64,3 +64,4 @@ buck-out/
# frontend js
/html/Web.bundle/js*
/html/Web.bundle/css*

View File

@ -48,6 +48,7 @@ const App = () => {
onMessage={onMessage}
// @ts-expect-error
ref={(ref) => (webViewRef.current = ref)}
overScrollMode='never'
javaScriptEnabled={true}
domStorageEnabled={true}
sharedCookiesEnabled={true}

View File

@ -1,264 +0,0 @@
/* cyrillic-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-1.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-2.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-3.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-4.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-5.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-6.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113,
U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/static/css/fonts/roboto-7.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-8.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-9.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-10.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-11.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-12.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-13.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113,
U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/static/css/fonts/roboto-14.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-15.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-16.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-17.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-18.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-19.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-20.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113,
U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/static/css/fonts/roboto-21.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-22.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-23.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-24.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-25.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-26.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-27.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113,
U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/static/css/fonts/roboto-28.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

View File

@ -1,180 +0,0 @@
html,
body {
height: 100%;
margin: 0;
padding: 0;
font-family: 'Roboto';
}
@media (prefers-color-scheme: dark) {
body {
background: rgb(0, 0, 0);
}
.loaderSpinner {
color: #90caf9;
}
.loaderSpinner:before {
background: rgb(0, 0, 0);
}
.loaderSpinner:after {
background: rgb(0, 0, 0);
}
.slider {
color: #fff;
}
}
#main {
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
#app {
width: 100%;
height: 100%;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.appCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) translate(0, -20px);
}
.alertUnsafe {
position: absolute;
width: 100%;
z-index: 9999;
}
.hideAlertButton {
position: fixed;
}
.clickTrough {
height: 50px;
pointer-events: none;
z-index: 1;
}
/* No arrows on numeric inputs */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type='number'] {
-moz-appearance: textfield;
}
.bottomBar {
position: fixed;
bottom: 0;
}
.amboss {
fill: url(#SVGID_1_);
}
.advancedSwitch {
width: 20;
left: 50%;
transform: translate(62px, 0px);
margin-right: 0;
margin-left: auto;
}
.bottomItem {
margin: 0;
top: -14px;
}
.profileNickname {
margin: 0;
left: -16px;
}
.newAvatar {
border-radius: 50%;
border: 2px solid #555;
filter: drop-shadow(1px 1px 1px #000000);
}
.profileAvatar {
border: 0.5px solid #555;
filter: drop-shadow(0.5px 0.5px 0.5px #000000);
left: 35px;
}
.smallAvatar {
border: 0.5px solid #555;
filter: drop-shadow(0.5px 0.5px 0.5px #000000);
}
.flippedSmallAvatar {
transform: scaleX(-1);
border: 0.3px solid #555;
filter: drop-shadow(0.5px 0.5px 0.5px #000000);
}
.phoneFlippedSmallAvatar img {
transform: scaleX(-1);
border: 1.3px solid #1976d2;
-webkit-filter: grayscale(100%);
filter: grayscale(100%) brightness(150%) contrast(150%) drop-shadow(0.7px 0.7px 0.7px #000000);
}
.phoneFlippedSmallAvatar:after {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
border-radius: 50%;
border: 2.4px solid #1976d2;
box-shadow: inset 0px 0px 35px rgb(255, 255, 255);
}
.MuiButton-textInherit {
color: '#111111';
}
::-webkit-scrollbar {
width: 6px; /* for vertical scrollbars */
height: 6px; /* for horizontal scrollbars */
}
::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.5);
}
.MuiDataGrid-columnHeaders + div {
width: auto !important;
}
@media (max-height: 725px) and (max-width: 925px) {
.appCenter:has(> div.MuiGrid-root:first-child, > div.MuiBox-root:first-child) {
overflow-y: auto;
margin-top: 1em;
padding-bottom: 3em;
height: 100%;
width: 100%;
}
}

View File

@ -1,329 +0,0 @@
.loaderCenter {
margin: 0 auto;
position: absolute;
left: 50%;
top: 50%;
margin-top: -120px;
margin-left: -175px;
width: 350px;
height: 120px;
text-align: center;
}
.loaderSpinner,
.loaderSpinner:before,
.loaderSpinner:after {
border-radius: 50%;
}
.loaderSpinner {
color: #1976d2;
font-size: 11px;
text-indent: -99999em;
margin: 55px auto;
position: relative;
width: 10em;
height: 10em;
box-shadow: inset 0 0 0 1em;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
.loaderSpinner:before,
.loaderSpinner:after {
position: absolute;
content: '';
}
.loaderSpinner:before {
width: 5.2em;
height: 10.2em;
background: #ffffff;
border-radius: 9.2em 0 0 10.2em;
top: -0.1em;
left: -0.1em;
-webkit-transform-origin: 5.1em 5.1em;
transform-origin: 5.1em 5.1em;
-webkit-animation: load2 2s infinite ease 1.5s;
animation: load2 2s infinite ease 1.5s;
}
.loaderSpinner:after {
width: 5.2em;
height: 10.2em;
background: #ffffff;
border-radius: 0 10.2em 10.2em 0;
top: -0.1em;
left: 4.9em;
-webkit-transform-origin: 0.1em 5.1em;
transform-origin: 0.1em 5.1em;
-webkit-animation: load2 2s infinite ease;
animation: load2 2s infinite ease;
}
@-webkit-keyframes load2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes load2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.content-slider {
width: 100%;
height: 180px;
}
.slider {
height: 140px;
width: 350px;
margin: 40px auto 0;
overflow: visible;
position: relative;
}
.mask {
overflow: hidden;
height: 140px;
}
.slider ul {
margin: 0;
padding: 0;
position: relative;
}
.slider li {
text-align: center;
width: 350px;
height: 140px;
position: absolute;
top: -105px;
list-style: none;
}
.slider .quote {
text-align: center;
font-size: 20px;
}
.slider li.anim1 {
animation: cycle 12s linear infinite;
}
.slider li.anim2 {
animation: cycle2 12s linear infinite;
}
.slider li.anim3 {
animation: cycle3 12s linear infinite;
}
.slider li.anim4 {
animation: cycle4 12s linear infinite;
}
.slider li.anim5 {
animation: cycle5 12s linear infinite;
}
.slider:hover li {
animation-play-state: paused;
}
@keyframes cycle {
0% {
top: 0px;
}
4% {
top: 0px;
}
16% {
top: 0px;
opacity: 1;
z-index: 0;
}
20% {
top: 105px;
opacity: 0;
z-index: 0;
}
21% {
top: -105px;
opacity: 0;
z-index: -1;
}
50% {
top: -105px;
opacity: 0;
z-index: -1;
}
92% {
top: -105px;
opacity: 0;
z-index: 0;
}
96% {
top: -105px;
opacity: 0;
}
100% {
top: 0px;
opacity: 1;
}
}
@keyframes cycle2 {
0% {
top: -105px;
opacity: 0;
}
16% {
top: -105px;
opacity: 0;
}
20% {
top: 0px;
opacity: 1;
}
24% {
top: 0px;
opacity: 1;
}
36% {
top: 0px;
opacity: 1;
z-index: 0;
}
40% {
top: 105px;
opacity: 0;
z-index: 0;
}
41% {
top: -105px;
opacity: 0;
z-index: -1;
}
100% {
top: -105px;
opacity: 0;
z-index: -1;
}
}
@keyframes cycle3 {
0% {
top: -105px;
opacity: 0;
}
36% {
top: -105px;
opacity: 0;
}
40% {
top: 0px;
opacity: 1;
}
44% {
top: 0px;
opacity: 1;
}
56% {
top: 0px;
opacity: 1;
z-index: 0;
}
60% {
top: 105px;
opacity: 0;
z-index: 0;
}
61% {
top: -105px;
opacity: 0;
z-index: -1;
}
100% {
top: -105px;
opacity: 0;
z-index: -1;
}
}
@keyframes cycle4 {
0% {
top: -105px;
opacity: 0;
}
56% {
top: -105px;
opacity: 0;
}
60% {
top: 0px;
opacity: 1;
}
64% {
top: 0px;
opacity: 1;
}
76% {
top: 0px;
opacity: 1;
z-index: 0;
}
80% {
top: 105px;
opacity: 0;
z-index: 0;
}
81% {
top: -105px;
opacity: 0;
z-index: -1;
}
100% {
top: -105px;
opacity: 0;
z-index: -1;
}
}
@keyframes cycle5 {
0% {
top: -105px;
opacity: 0;
}
76% {
top: -105px;
opacity: 0;
}
80% {
top: 0px;
opacity: 1;
}
84% {
top: 0px;
opacity: 1;
}
96% {
top: 0px;
opacity: 1;
z-index: 0;
}
100% {
top: 105px;
opacity: 0;
z-index: 0;
}
}

2619
mobile/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
{
"name": "RoboSats",
"name": "robosats",
"version": "0.2.0",
"private": true,
"scripts": {
@ -12,12 +12,12 @@
"format": "prettier --write '**/**/*.{js,jsx,ts,tsx,css,md,json}' --config ./.prettierrc"
},
"dependencies": {
"react": "^18.2.0",
"react-native": "^0.69.1",
"react": "^18.0.0",
"react-native": "^0.69.6",
"react-native-tor": "^0.1.8",
"react-native-v8": "^1.5.0",
"react-native-webview": "^11.22.3",
"v8-android-jit": "^10.100.1"
"v8-android-nointl": "^10.100.1"
},
"devDependencies": {
"@babel/core": "^7.12.9",

View File

@ -4,6 +4,8 @@ Tested on Ubuntu 20.04 and OSX 12.5.1
## Install JDK
Make sure you install version 17
```
sudo apt update
sudo apt install default-jdk
@ -55,6 +57,12 @@ Make sure you have NDK installed : `Tools > SDK Manager > SDK Tools > NDK (Side
## Launch app builder and
Make sure you have the `main.js` file created on `robosats/mobile/html/Web.bundle/js`, if not, go to `robosats/frontend/`
```
npm run dev
```
Point a terminal to `/robosats/mobile/`
```
@ -71,20 +79,24 @@ npx react-native run-android
## Install JDK
Make sure you install version 17
```
https://www.oracle.com/java/technologies/downloads
```
## Install Android Studio
Download and install https://developer.android.com/studio/index.html.
Download and install https://developer.android.com/studio/index.html
Make sure you have the following libraries installed globally.
```
npm -i react-native-cli
npm install -g react-native-cli
brew install android-platform-tools
```
Open `robosats/mobile/android` to start the first build process.
## Install watchman
Check https://github.com/facebook/watchman/releases/download or use brew:
@ -109,14 +121,14 @@ Make sure you have NDK installed : `Tools > SDK Manager > SDK Tools > NDK (Side
## Run app
Make sure you have the `main.js` file created on `robosats/mobile/html/Web.bundle/js`, if not, go to `robosats/frontend/`
```
npm run dev
```
Point a terminal to `robosats/mobile/`
```
npx react-native start --reset-cache
```
To create builds, on another temrinal also in `robosats/mobile/`
```
npx react-native run-android
```