123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- //
- // 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
|