// // PackUtils.m // UUTUtils // // Created by zhuge on 2017/12/27. // Copyright © 2017年 zhuge. All rights reserved. // #import "PackUtils.h" #import "ProjectInfo.h" #import "ZGApkToolUtils.h" #import "ZGApk.h" #import "ZGApkFixUtils.h" #import "ZGFileUtils.h" #import "ZGImageUtils.h" #include "JoinFileDir.h" #include "JoinFile.h" @interface PackUtils() @property (strong) ZGApkFixUtils *fixUtils; @end @implementation PackUtils - (PackUtils *)initWithProjectInfo:(ProjectInfo *)projectInfo { self.projectInfo = projectInfo; return self; } - (void)pack { self.fixUtils = [[ZGApkFixUtils alloc] initWithApk:self.projectInfo.apk configs:self.projectInfo.fixConfigs]; // [self unpackTheApk]; // 解压原始Apk [self changeIcon]; // 替换icon图标 [self changeStringValues]; // 更换各种的id [self replacePackage]; // 替换包名 [self encrytAssets]; [self.fixUtils fix]; // 进行混淆操作 [self.projectInfo.apk save]; // 保存所有的更改 // 打包操作 [ZGApkToolUtils pack:self.projectInfo.path.apkCode]; [ZGApkToolUtils sign:self.projectInfo.path.apkCode keyPath:self.projectInfo.path.config.keystore]; [ZGApkToolUtils align:self.projectInfo.path.apkCode]; [ZGFileUtils copyFileFromPath:self.projectInfo.apk.okApkPath toPath:self.projectInfo.outputApkFilePath]; } #pragma mark fix - (void) encrytAssets { JoinFileDir *_joinFileDir = [JoinFileDir shared]; NSString * dir = [NSString stringWithFormat:@"%@/assets", self.projectInfo.apk.path]; [_joinFileDir dealAssetsYt:dir isAndroid:true packgeName:self.projectInfo.apk.manifest.package typeAddDic:@{}]; } #pragma mark pack - (void) replacePackage { // NSString *oldPackage = self.projectInfo.apk.manifest.package; NSString *newPackage = self.projectInfo.package; [self.projectInfo.apk.manifest replacePackage:newPackage]; // NSString *package_old = [@"id=" stringByAppendingString:oldPackage]; // NSString *package_new = [@"id=" stringByAppendingString:newPackage]; // NSString *oldPackageId2 = [NSString stringWithFormat:@"android:targetPackage=\"%@\"", oldPackage]; // NSString *newPackageId2 = [NSString stringWithFormat:@"android:targetPackage=\"%@\"", newPackage]; // NSString *oldPackageId5 = [NSString stringWithFormat:@"provider android:authorities=\"%@", oldPackage]; // NSString *newPackageId5 = [NSString stringWithFormat:@"provider android:authorities=\"%@", newPackage]; // self.fixUtils.mdChangeString[package_old] = package_new; // self.fixUtils.mdChangeString[oldPackageId2] = newPackageId2; // self.fixUtils.mdChangeString[oldPackageId5] = newPackageId5; } - (void) changeStringValues { // umeng self.projectInfo.apk.string.umengKey = self.projectInfo.local.sdkKeys.umengKey; self.projectInfo.apk.string.umengChannel = @""; // facebook self.projectInfo.apk.string.facebookAppId = self.projectInfo.local.sdkKeys.facebookKey; // app name self.projectInfo.apk.string.appName = self.projectInfo.local.translate.appName; } - (void) changeIcon { NSString *iconFilePath = self.projectInfo.path.config.icon; NSDictionary *toSizes = @{ @"mipmap-hdpi": @"72", @"mipmap-hdpi-v4": @"72", @"mipmap-mdpi": @"48", @"mipmap-mdpi-v4": @"48", @"mipmap-xhdpi": @"96", @"mipmap-xhdpi-v4": @"96", @"mipmap-xxhdpi": @"144", @"mipmap-xxhdpi-v4": @"144", }; for (NSString *dirName in toSizes) { NSString *toSize = [toSizes objectForKey:dirName]; NSString *toPath = [NSString stringWithFormat:@"%@/res/%@/%@.%@", self.projectInfo.path.apkCode, dirName, [self.projectInfo.apk.manifest.iconName stringByReplacingOccurrencesOfString:@"@mipmap/" withString:@""], [iconFilePath pathExtension]]; [ZGImageUtils resizePng:iconFilePath toWidth:[toSize intValue] toHeight:[toSize intValue] toPath:toPath]; } } - (void) unpackTheApk { [ZGFileUtils deleteFileOrDirectoryAtPath:self.projectInfo.path.apkCode]; [ZGApkToolUtils unpack:self.projectInfo.upload.oriApkPath toPath:self.projectInfo.path.apkCode]; } @end