123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- //
- // ZGApkToolUtils.m
- // UUTUtils
- //
- // Created by zhuge on 2017/12/27.
- // Copyright © 2017年 zhuge. All rights reserved.
- //
- #import "ZGApkToolUtils.h"
- #import "WordUtils.h"
- #import "ZGShellUtils.h"
- #import "ZGApkToolPath.h"
- @implementation ZGApkToolUtils
- #pragma mark keystore
- + (NSString *)genRandomKeystoreFile:(NSString *)toPath {
- NSMutableString *msKeyword = [NSMutableString stringWithCapacity:0];
- for (int i = 0; i < 3; i++) {
- [msKeyword appendString:[WordUtils randomKeyword]];
- }
- [ZGApkToolUtils genKeystoreFile:msKeyword toPath:toPath];
- return msKeyword;
- }
- + (void)genKeystoreFile:(NSString *)keyName toPath:(NSString *)toPath {
- [ZGShellUtils execSync:[ZGApkToolPath shared].key args:@[[ZGApkToolPath shared].key_in, keyName, toPath]];
- }
- #pragma mark unpack
- + (void)unpack:(NSString *)apkFilePath {
- NSString *toPath = [apkFilePath stringByDeletingLastPathComponent];
- toPath = [toPath stringByAppendingFormat:@"/%@", [toPath lastPathComponent]];
- [ZGApkToolUtils unpack:apkFilePath toPath:toPath];
- }
- + (void)unpack:(NSString *)apkFilePath toPath:(NSString *)toPath {
- [ZGShellUtils execSync:[ZGApkToolPath shared].apktool args:[NSArray arrayWithObjects:@"d", apkFilePath, @"-o", toPath, nil]];
- }
- #pragma mark pack
- + (void)pack:(NSString *)apkCodePath {
- [ZGShellUtils execSync:[ZGApkToolPath shared].apktool args:@[@"b", apkCodePath]];
- }
- +(void)sign:(NSString *)apkCodePath keyPath:(NSString *)keyPath {
- NSString *distPath = [apkCodePath stringByAppendingString:@"/dist/"];
- NSString *apkName = [ZGApkToolUtils apkNameInApkCodePath:apkCodePath];
- NSString *from = [NSString stringWithFormat:@"%@/%@.apk", distPath, apkName];
- NSString *to = [NSString stringWithFormat:@"%@/%@_sign.apk", distPath, apkName];
-
- NSString *alias = [keyPath lastPathComponent];
- NSString *password = [alias stringByDeletingPathExtension];
-
- NSData *data = [[NSString stringWithFormat:@"%@\n", password] dataUsingEncoding:NSUTF8StringEncoding];
- [ZGShellUtils execSync:[ZGApkToolPath shared].sign_in args:@[keyPath, from, to, alias] data:data];
- }
- +(NSString *)align:(NSString *)apkPath {
- NSString *distPath = [apkPath stringByAppendingString:@"/dist/"];
- NSString *apkName = [ZGApkToolUtils apkNameInApkCodePath:apkPath];
- NSString *from = [NSString stringWithFormat:@"%@/%@_sign.apk", distPath, apkName];
- NSString *to = [NSString stringWithFormat:@"%@/%@_ok.apk", distPath, apkName];
-
- [ZGShellUtils execSync:[ZGApkToolPath shared].align args:@[@"-f", @"-v", @"4", from, to]];
- return to;
- }
- #pragma mark install & uninstall
- +(void)uninstall:(NSString *)package {
- [ZGShellUtils execSync:[ZGApkToolPath shared].adb args:@[@"uninstall", package]];
- }
- + (void)uninstallButKeepData:(NSString *)package {
- [ZGShellUtils execSync:[ZGApkToolPath shared].adb args:@[@"shell", @"pm", @"uninstall", @"-k", package]];
- }
- +(void)install:(NSString *)apkFilePath {
- [ZGShellUtils execSync:[ZGApkToolPath shared].adb args:@[@"install", apkFilePath]];
- }
- +(void) run:(NSString *)package activity:(NSString *)mainActivity {
- NSString *runString = [NSString stringWithFormat:@"%@/%@", package, mainActivity];
- [ZGShellUtils execSync:[ZGApkToolPath shared].adb args:@[@"shell", @"am", @"start", @"-n", runString]];
- }
- #pragma mark private
- + (NSString*) apkNameInApkCodePath:(NSString*) apkCodePath {
- NSString *toolPath = [apkCodePath stringByAppendingString:@"/apktool.yml"];
- NSString *toolString = [NSString stringWithContentsOfFile:toolPath encoding:NSUTF8StringEncoding error:nil];
- NSArray *toolStringLines = [toolString componentsSeparatedByString:@"\n"];
- NSString *apkName = @"";
- for (NSString *line in toolStringLines) {
- if ([line rangeOfString:@"apkFileName"].location != NSNotFound) {
- apkName = [line stringByReplacingOccurrencesOfString:@"apkFileName: " withString:@""];
- apkName = [apkName stringByDeletingPathExtension];
- break;
- }
- }
- return apkName;
- }
- @end
|