adb.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. if (process.platform === 'win32' || process.platform === 'win64') {
  10. adbRun = 'adb'
  11. } else {
  12. adbRun = './adb'
  13. }
  14. module.exports = {
  15. installApk: async (element) => {
  16. Language.setActiveLang(globalVariables.language)
  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. Language.setActiveLang(globalVariables.language)
  50. result = await shellExec(adbRun + ' uninstall ' + package)
  51. if (result.stderr != '') {
  52. logger.info('Error ' + result.stderr);
  53. console.log(chalk.redBright('Error - Device not authorised'));
  54. } else {
  55. logger.info('Removing ' + package + ' - ' + result.stdout);
  56. console.log('Removing ' + package + ' - ' + result.stdout);
  57. }
  58. },
  59. removeXiaomiApk: async (package) => {
  60. Language.setActiveLang(globalVariables.language)
  61. result = await shellExec(adbRun + ' shell pm uninstall -k --user 0 ' + package)
  62. if (result.stderr != '') {
  63. logger.info('Error ' + result.stderr);
  64. console.log(chalk.redBright('Error - Device not authorised'));
  65. } else {
  66. logger.info('Removing ' + package + ' - ' + result.stdout);
  67. console.log('Removing ' + package + ' - ' + result.stdout);
  68. }
  69. },
  70. restoreXiaomiApk: async (package) => {
  71. Language.setActiveLang(globalVariables.language)
  72. result = await shellExec(adbRun + ' shell cmd package install-existing ' + package)
  73. if (result.stderr != '') {
  74. logger.info('Error ' + result.stderr);
  75. console.log(chalk.redBright('Error - Device not authorised'));
  76. } else {
  77. logger.info('Removing ' + package + ' - ' + result.stdout);
  78. console.log('Removing ' + package + ' - ' + result.stdout);
  79. }
  80. },
  81. restoreAnyApk: async (package) => {
  82. Language.setActiveLang(globalVariables.language)
  83. result = await shellExec(adbRun + ' shell cmd package install-existing ' + package.restoreAnyApp)
  84. if (result.stderr != '') {
  85. logger.info('Error ' + result.stderr);
  86. console.log(chalk.redBright('Error - Device not authorised'));
  87. } else if (result.stdout.includes('doesn\'t exist')) {
  88. logger.info(result.stdout);
  89. console.log(chalk.redBright(result.stdout));
  90. } else {
  91. logger.info('Restoring ' + package.restoreAnyApp + ' - ' + result.stdout);
  92. console.log('Restoring ' + package.restoreAnyApp + ' - ' + result.stdout);
  93. }
  94. },
  95. getInstalledPacakges: async () => {
  96. Language.setActiveLang(globalVariables.language)
  97. result = await shellExec(adbRun + ' shell pm list packages -3')
  98. logger.info(await Language.get('packages-recieved-from-watch'))
  99. if (result.stderr.includes('error')) {
  100. logger.info(result.stderr)
  101. console.log(chalk.red(await Language.get('device-not-authorised')))
  102. common.pause(3000)
  103. await shellExec(adbRun + ' kill-server').then(async function (result) {
  104. logger.info(await Language.get('restarting-adb'))
  105. logger.info(result.stdout)
  106. console.log(await Language.get('please-reconnect-to-watch'))
  107. common.pause(3000)
  108. logger.info(await Language.get('remove-installed-apps-failed'))
  109. module.exports.mainMenu()
  110. })
  111. } else {
  112. if (process.platform === 'win32' || process.platform === 'win64') {
  113. installedAppList = result.stdout.split('\r\n'); // split string on comma space
  114. installedAppList.splice(-1, 1)
  115. } else {
  116. installedAppList = result.stdout.split('\n'); // split string on comma space
  117. installedAppList.splice(-1, 1)
  118. }
  119. const value = await inquirer.installedApps(installedAppList);
  120. return value
  121. }
  122. },
  123. killAdbServer: async () => {
  124. Language.setActiveLang(globalVariables.language)
  125. let result = await shellExec(adbRun + ' kill-server')
  126. logger.info('Restarting ADB')
  127. logger.info(result.stdout)
  128. },
  129. watchConnection: async (value) => {
  130. Language.setActiveLang(globalVariables.language)
  131. if (value.connection === "usb") {
  132. await module.exports.killAdbServer()
  133. result = await shellExec(adbRun + ' devices')
  134. console.log(result.stdout)
  135. if (result.stdout.includes('device', 15)) {
  136. console.log(chalk.green('MiWatch Connected via USB'))
  137. await common.pause(3000)
  138. logger.info("MiWatch connected")
  139. globalVariables.localUSB = "X"
  140. return true
  141. } else {
  142. console.log(chalk.red('MiWatch not found'))
  143. logger.info("MiWatch not found")
  144. await common.pause(2000)
  145. console.log(chalk.white('Try Again'))
  146. await common.pause(1000)
  147. return false
  148. }
  149. }
  150. if (value.connection === "wifi") {
  151. const value = await inquirer.connectWifi();
  152. await module.exports.killAdbServer()
  153. result = await shellExec(adbRun + ' connect ' + value.connectWifi)
  154. logger.info("Connect Wifi Result " + result.stdout)
  155. if (result.stdout.includes('already connected') || result.stdout.includes('connected to ')) {
  156. console.log(chalk.green('MiWatch Connected'))
  157. globalVariables.localUSB = ""
  158. globalVariables.miWatchIpaddress = value.connectWifi
  159. await common.pause(3000)
  160. logger.info("Connect Wifi Complete")
  161. return true
  162. } else {
  163. if (result.stdout.includes('failed to authenticate')) {
  164. console.log(chalk.redBright('MiWatch not authenticated'))
  165. logger.info('MiWatch not authenticated')
  166. return false
  167. } else {
  168. console.log(chalk.red(result.stdout))
  169. logger.info(result.stdout)
  170. }
  171. await common.pause(2000)
  172. console.log(chalk.white('Try Again'))
  173. await common.pause(1000)
  174. return false
  175. }
  176. }
  177. }
  178. };