I have a problem with my installation. Previous dev left 4 years ago no documentation ... now it falls on me to build the outdated app because marketing wants a new feature. I'm into embedded systems so I know almost nothing.
Onto the configuration : I have made a Dockerfile so that the environment is stable, I'm using Docker Desktop (Windows 10). The end goal is to make it work in Docker and do a full CI/CD but first I need to generate an apk.
# base image
FROM ubuntu:20.04
# block interactive actions (ex selecting country during installation)
ARG DEBIAN_FRONTEND=noninteractive
# install linux packages
RUN apt-get update && apt-get -y install wget tar unzip openjdk-8-jdk build-essential checkinstall file apt-utils libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
# install python 2.7.18
RUN mkdir /python2.7 && cd /python2.7 && wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz && tar xzf Python-2.7.18.tgz && rm Python-2.7.18.tgz && cd Python-2.7.18 && ./configure --enable-optimizations && make altinstall
# install node js version 10.19.0 for linux
#RUN wget https://nodejs.org/dist/v10.19.0/node-v10.19.0-linux-x64.tar.gz && tar -C /usr/local --strip-components 1 -xzf node-v10.19.0-linux-x64.tar.gz && rm node-v10.19.0-linux-x64.tar.gz
#RUN wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.gz && tar -C /usr/local --strip-components 1 -xzf node-v12.13.0-linux-x64.tar.gz && rm node-v12.13.0-linux-x64.tar.gz
RUN wget https://nodejs.org/download/release/v7.7.0/node-v7.7.0-linux-x64.tar.gz && tar -C /usr/local --strip-components 1 -xzf node-v7.7.0-linux-x64.tar.gz && rm node-v7.7.0-linux-x64.tar.gz
#install gradle 4.10.3 (reinstalling gradle 3.3 during the build ???)
RUN wget https://services.gradle.org/distributions/gradle-4.10.3-bin.zip -P /tmp && unzip -d /opt/gradle /tmp/gradle-4.10.3-bin.zip && rm /tmp/gradle-4.10.3-bin.zip
# install android command line
RUN wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip && mkdir -p /sdk && mv commandlinetools-linux-7583922_latest.zip /sdk && \
cd /sdk && unzip commandlinetools-linux-7583922_latest.zip && rm commandlinetools-linux-7583922_latest.zip
WORKDIR "/sdk/cmdline-tools"
# specific to commandlinetools-linux-7583922 the unzipped folder is not correct, it needs to be under "latest" folder, so /cmdline-tools/latest/...
# see https://stackoverflow.com/a/67413427/14137672 for more informations about this
RUN mkdir .latest && mv * .latest && mv .latest latest
# add sdkmanager java gradle to path platform-tools tools
ENV PATH="/sdk/cmdline-tools/latest/bin:/usr/lib/jvm/java-8-openjdk-amd64/bin/:/sdk/cmdline-tools/latest:/opt/gradle/gradle-4.10.3/bin:/python2.7/Python-2.7.18:${PATH}:/sdk/tools/:/sdk/platform-tools/"
# create env variable ANDROID_SDK_ROOT & GRADLE_HOME
ENV ANDROID_SDK_ROOT=/sdk/cmdline-tools/latest/bin
ENV ANDROID_HOME=/sdk/
ENV GRADLE_HOME=/opt/gradle/gradle-4.10.3
# install project requirements, Android Studio part
WORKDIR "/sdk/cmdline-tools/latest/bin"
RUN chmod +770 /sdk/cmdline-tools/latest/bin/sdkmanager
# accept the licenses BEFORE installing packages else it doesn't install but doesn't launch errors
RUN yes | /sdk/cmdline-tools/latest/bin/sdkmanager --licenses
RUN /sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-19" "platforms;android-20" "platforms;android-21" "platforms;android-22" "platforms;android-23" "platforms;android-24" "platforms;android-25" "system-images;android-28;default;x86" "system-images;android-27;default;x86"
RUN /sdk/cmdline-tools/latest/bin/sdkmanager "platforms;android-26" "platforms;android-27" "platforms;android-28" "platforms;android-29" "platforms;android-30" "platforms;android-31" "skiaparser;1" "system-images;android-29;google_apis;x86"
RUN /sdk/cmdline-tools/latest/bin/sdkmanager "build-tools;31.0.0" "build-tools;30.0.2" "build-tools;29.0.3" "build-tools;29.0.2" "build-tools;29.0.1" "build-tools;29.0.0" "build-tools;28.0.3" "build-tools;20.0.0" "build-tools;19.1.0" "system-images;android-31;default;x86_64"
RUN /sdk/cmdline-tools/latest/bin/sdkmanager "cmdline-tools;5.0" "cmdline-tools;4.0" "ndk;23.1.7779620" "emulator" "extras;google;market_apk_expansion" "extras;google;instantapps" "extras;google;market_licensing" "extras;google;google_play_services"
RUN /sdk/cmdline-tools/latest/bin/sdkmanager "system-images;android-19;default;x86" "system-images;android-21;default;x86" "system-images;android-22;default;x86" "system-images;android-23;default;x86" "system-images;android-24;default;x86" "system-images;android-25;default;x86" "system-images;android-26;default;x86"
# install project dependancies
RUN npm install && npm install -g ionic@5.4.16 cordova@10.0.0 native-run@1.5.0 cordova-res --unsafe-perm
So the line where I have a problem is npm install -g ionic
where I have an error :
npm ERR! Linux 5.4.0-124-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "ionic@5.4.16" "cordova@10.0.0" "native-run@1.5.0" "cordova-res" "--unsafe-perm"
npm ERR! node v7.7.0
npm ERR! npm v4.1.2
npm ERR! path /usr/local/lib/node_modules/.staging/@types/node-14361f48/package.json
npm ERR! code ENOTDIR
npm ERR! errno -20
npm ERR! syscall open
npm ERR! ENOTDIR: not a directory, open '/usr/local/lib/node_modules/.staging/@types/node-14361f48/package.json'
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /home/mathieu/Bureau/toto/toto/npm-debug.log
My package.json is :
{
"name": "toto",
"version": "0.0.3",
"author": "Ionic Framework",
"homepage": "http://ionicframework.com/",
"private": true,
"scripts": {
"run-android": "ionic cordova run android -l -c --device",
"start": "ionic-app-scripts serve",
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"lint": "ionic-app-scripts lint"
},
"dependencies": {
"@angular/animations": "5.2.11",
"@angular/common": "5.2.11",
"@angular/compiler": "5.2.11",
"@angular/compiler-cli": "5.2.11",
"@angular/core": "5.2.11",
"@angular/forms": "5.2.11",
"@angular/http": "5.2.11",
"@angular/platform-browser": "5.2.11",
"@angular/platform-browser-dynamic": "5.2.11",
"@ionic-native/ble": "^4.16.0",
"@ionic-native/core": "~4.15.0",
"@ionic-native/splash-screen": "~4.15.0",
"@ionic-native/status-bar": "~4.15.0",
"@ionic/storage": "^2.2.0",
"@ngx-translate/core": "^9.1.1",
"@ngx-translate/http-loader": "^2.0.1",
"cordova": "^6.5.0",
"cordova-plugin-ble-central": "^1.2.2",
"cordova-plugin-compat": "^1.2.0",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-ionic-keyboard": "^2.1.3",
"cordova-plugin-ionic-webview": "^2.3.3",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",
"help": "3.0.2",
"ionic-angular": "3.9.2",
"ionicons": "3.0.0",
"rxjs": "5.5.11",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.26"
},
"devDependencies": {
"@ionic/app-scripts": "3.2.0",
"BleTotoService": "file:../ble-toto-service",
"cordova-android": "6.4.0",
"typescript": "~2.6.2"
},
"description": "An Ionic project",
"cordova": {
"plugins": {
"cordova-plugin-ble-central": {},
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-ble-toto-service": {}
},
"platforms": [
"android"
]
}
}
Can someone help ? I can't share the sources.
Edit : npm install seems to work now, I went to nodeJS 7.10.0 npm is 4.2.0 But if I do npm update I have "Cannot read property 'version' of undefined
385 verbose stack TypeError: Cannot read property 'version' of undefined
385 verbose stack at /usr/local/lib/node_modules/npm/lib/outdated.js:360:15
385 verbose stack at /usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:356:5
385 verbose stack at checkBinReferences_ (/usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:320:45)
385 verbose stack at final (/usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:354:3)
385 verbose stack at then (/usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:124:5)
385 verbose stack at /usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:243:12
385 verbose stack at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
385 verbose stack at tryToString (fs.js:449:3)
385 verbose stack at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:436:12)
386 verbose cwd /usr/local/myapp/toto
387 error Linux 5.10.16.3-microsoft-standard-WSL2
388 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "update"
389 error node v7.10.0
390 error npm v4.2.0
391 error Cannot read property 'version' of undefined
392 error If you need help, you may report this error at:
392 error <https://github.com/npm/npm/issues>
393 verbose exit [ 1, true ]