UNPKG

bananalyzer

Version:

A simple tool for windows 10, that downloads APKs from Google playstore, analyzes them, and lists all the Google and Huawei SDKs (kits) that are integrated, along with other metadata

100 lines (99 loc) 5.49 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = require("fs"); var path_1 = __importDefault(require("path")); var utils_1 = require("../src/core/utils"); //normal apk var twitterApk = path_1.default.join(__dirname, 'samples', 'com.twitter.android.lite.apk'); var twitterManifest = path_1.default.join(__dirname, 'samples', 'twitter-lite-manifest.json'); var testApkInfo = function (apk, manifestPath) { return __awaiter(void 0, void 0, void 0, function () { var actualManifest, expectedManifest; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, utils_1.getApkInfo)(apk)]; case 1: actualManifest = _a.sent(); expectedManifest = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf-8')); expect(actualManifest).toMatchObject(expectedManifest); return [2 /*return*/]; } }); }); }; describe('Utils', function () { it('should return apk info (manifest) for normal APK', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { testApkInfo(twitterApk, twitterManifest); return [2 /*return*/]; }); }); }); // it('should find inner apk in split apk', async () => { // const destPath = path.join(testTempFolder, path.basename(netflixApk)); // if (!existsSync(testTempFolder)) { // mkdirSync(testTempFolder); // } // const innerApkPath = await getInnerApk(netflixApk, destPath); // expect(innerApkPath).toEqual(destPath); // expect(existsSync(innerApkPath)).toEqual(true); // rmSync(testTempFolder, { recursive: true }); // }); //todo: handle // it('should return apk info (manifest) for split APK', async () => { // testApkInfo(netflixApk, netflixManifest); // }); // it('should throw error for when looking for inner apk for normal apk', async () => { // const destPath = path.join(testTempFolder, path.basename(netflixApk)); // await getInnerApk(twitterApk, destPath).catch((e) => expect(e).toBeTruthy); // }); it('should throw error when looking for manifest in non existing apk', function () { return __awaiter(void 0, void 0, void 0, function () { var missingApk; return __generator(this, function (_a) { switch (_a.label) { case 0: missingApk = path_1.default.join(__dirname, 'apks', 'com.non.existing.apk'); return [4 /*yield*/, (0, utils_1.getApkInfo)(missingApk).catch(function (e) { return expect(e).toBeTruthy; })]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }); });