adb.js 7.7 KB

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