adb.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. const gfin = require('get-files-in')
  2. const logger = require('perfect-logger');
  3. const shellExec = require('shell-exec')
  4. const Language = require("@shypes/language-translator");
  5. const inquirer = require('../lib/inquirer');
  6. const common = require('./common')
  7. const chalk = require('chalk');
  8. const globalVariables = require('../lib/globalVars');
  9. const { dualLog } = require('./common');
  10. if (process.platform === 'win32' || process.platform === 'win64') {
  11. adbRun = 'adb'
  12. } else {
  13. adbRun = './adb'
  14. }
  15. module.exports = {
  16. installApk: async (element) => {
  17. Language.setActiveLang(globalVariables.language)
  18. result = await shellExec(adbRun + ' install -r ' + element).then(async function (result) {
  19. if (result.stderr != '') {
  20. common.dualLog('device-not-authorised' + ' ' + result.stderr, 'red')
  21. }
  22. common.dualLog(element + ' - ' + result.stdout)
  23. if (element === "data\\apps\\simpleweather_base.apk") {
  24. await common.downloadFile('http://kithub.cf/Karl/MiWatchKleaner-APKs/raw/master/Others/simpleweather_split_config.armeabi_v7a.apk', './data/apps/simpleweather_split_config.armeabi_v7a.apk')
  25. await common.downloadFile('http://kithub.cf/Karl/MiWatchKleaner-APKs/raw/master/Others/simpleweather_split_config.xhdpi.apk', './data/apps/simpleweather_split_config.xhdpi.apk')
  26. await shellExec(adbRun + ' install-multiple "data\\apps\\simpleweather_base.apk" "data\\apps\\simpleweather_split_config.armeabi_v7a.apk" "data\\apps\\simpleweather_split_config.xhdpi.apk"').then(async function (result) {
  27. common.log(result)
  28. common.dualLog('simple-weather-activated-on-watch')
  29. })
  30. }
  31. if (element === "data\\apps\\MoreLocale.apk") {
  32. await shellExec(adbRun + ' shell pm grant jp.co.c_lis.ccl.morelocale android.permission.CHANGE_CONFIGURATION').then(async function (result) {
  33. common.log(result)
  34. common.dualLog('morelocale-activated-on-watch')
  35. })
  36. }
  37. if (element === "data\\apps\\AlbertoLocale.apk") {
  38. await shellExec(adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION && ' + adbRun + ' shell am start -n com.alberto.locale/com.alberto.locale.MainActivity && ' + adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION').then(async function (result) {
  39. common.log(result)
  40. common.dualLog('alberto-locale-activated-on-watch')
  41. });
  42. }
  43. });
  44. },
  45. removeApk: async (package) => {
  46. Language.setActiveLang(globalVariables.language)
  47. result = await shellExec(adbRun + ' uninstall ' + package)
  48. if (result.stderr != '') {
  49. common.dualLog('device-not-authorised' + ' ' + result.stderr, 'red')
  50. } else {
  51. common.dualLog(await Language.get('removing') + ' ' + package + ' - ' + result.stdout)
  52. }
  53. },
  54. removeXiaomiApk: async (package) => {
  55. Language.setActiveLang(globalVariables.language)
  56. result = await shellExec(adbRun + ' shell pm uninstall -k --user 0 ' + package)
  57. if (result.stderr != '') {
  58. common.dualLog('device-not-authorised' + ' ' + result.stderr, 'red')
  59. } else {
  60. common.dualLog(await Language.get('removing') + ' ' + package + ' - ' + result.stdout)
  61. }
  62. },
  63. restoreXiaomiApk: async (package) => {
  64. Language.setActiveLang(globalVariables.language)
  65. result = await shellExec(adbRun + ' shell cmd package install-existing ' + package)
  66. if (result.stderr != '') {
  67. common.dualLog('device-not-authorised' + ' ' + result.stderr, 'red')
  68. } else {
  69. common.dualLog(await Language.get('removing') + ' ' + package + ' - ' + result.stdout)
  70. }
  71. },
  72. restoreAnyApk: async (package) => {
  73. Language.setActiveLang(globalVariables.language)
  74. result = await shellExec(adbRun + ' shell cmd package install-existing ' + package.restoreAnyApp)
  75. if (result.stderr != '') {
  76. common.dualLog('device-not-authorised' + ' ' + result.stderr, 'red')
  77. } else if (result.stdout.includes('doesn\'t exist')) {
  78. logger.info(result.stdout);
  79. console.log(chalk.redBright(result.stdout));
  80. } else {
  81. common.dualLog(await Language.get('restoring') + ' ' + package + ' - ' + result.stdout)
  82. }
  83. },
  84. getInstalledPacakges: async () => {
  85. Language.setActiveLang(globalVariables.language)
  86. result = await shellExec(adbRun + ' shell pm list packages -3')
  87. logger.info(await Language.get('packages-recieved-from-watch'))
  88. if (result.stderr.includes('error')) {
  89. logger.info(result.stderr)
  90. console.log(chalk.red(await Language.get('device-not-authorised')))
  91. common.pause(3000)
  92. await shellExec(adbRun + ' kill-server').then(async function (result) {
  93. logger.info(await Language.get('restarting-adb'))
  94. logger.info(result.stdout)
  95. console.log(await Language.get('please-reconnect-to-watch'))
  96. common.pause(3000)
  97. logger.info(await Language.get('remove-installed-apps-failed'))
  98. module.exports.mainMenu()
  99. })
  100. } else {
  101. if (process.platform === 'win32' || process.platform === 'win64') {
  102. installedAppList = result.stdout.split('\r\n'); // split string on comma space
  103. installedAppList.splice(-1, 1)
  104. } else {
  105. installedAppList = result.stdout.split('\n'); // split string on comma space
  106. installedAppList.splice(-1, 1)
  107. }
  108. const value = await inquirer.installedApps(installedAppList);
  109. return value
  110. }
  111. },
  112. killAdbServer: async () => {
  113. Language.setActiveLang(globalVariables.language)
  114. let result = await shellExec(adbRun + ' kill-server')
  115. // common.log('')
  116. // common.dualLog('restarting-adb' + ' ' + result.stderr, 'red')
  117. },
  118. watchConnection: async (value) => {
  119. Language.setActiveLang(globalVariables.language)
  120. if (value.connection === "usb") {
  121. await module.exports.killAdbServer()
  122. result = await shellExec(adbRun + ' devices')
  123. console.log(result.stdout)
  124. if (result.stdout.includes('device', 15)) {
  125. common.dualLog(await Language.get('connected-via-usb', 'green'))
  126. await common.pause(3000)
  127. globalVariables.localUSB = "X"
  128. return true
  129. } else {
  130. common.dualLog(await Language.get('not-found', 'red'))
  131. await common.pause(2000)
  132. common.dualLog(await Language.get('try-again', 'white'))
  133. await common.pause(1000)
  134. return false
  135. }
  136. }
  137. if (value.connection === "wifi") {
  138. const value = await inquirer.connectWifi();
  139. await module.exports.killAdbServer()
  140. result = await shellExec(adbRun + ' connect ' + value.connectWifi)
  141. logger.info("Connect Wifi Result " + result.stdout)
  142. if (result.stdout.includes('already connected') || result.stdout.includes('connected to ')) {
  143. common.dualLog(await Language.get('connected', 'green'))
  144. globalVariables.localUSB = ""
  145. globalVariables.miWatchIpaddress = value.connectWifi
  146. await common.pause(3000)
  147. common.dualLog(await Language.get('connect-wifi-complete', 'green'))
  148. return true
  149. } else {
  150. if (result.stdout.includes('failed to authenticate')) {
  151. common.dualLog(await Language.get('not-authenticated', 'red'))
  152. return false
  153. } else {
  154. common.dualLog(result.stdout, 'red')
  155. }
  156. await common.pause(2000)
  157. common.dualLog('try-again', '')
  158. await common.pause(1000)
  159. return false
  160. }
  161. }
  162. }
  163. };