28
28
29
29
// apk_normalized是为了diff/patch过程兼容apk的v2版签名而提供;
30
30
// 该过程对zip\jar\apk包进行规范化处理:
31
- // 输入包文件,重新按固定压缩算法生成对齐的新包文件(扩展字段、 注释、jar的签名和apk文件的v1签名会被保留,apk的v2签名数据会被删除)
31
+ // 输入包文件,重新按固定压缩算法生成对齐的新包文件(注释、jar的签名和apk文件的v1签名会被保留,扩展字段在未压缩.so文件页面对齐时可能会被修改, apk的v2签名数据会被删除)
32
32
// 规范化后可以用Android签名工具对输出的apk文件执行v2签名,比如:
33
33
// $apksigner sign --v1-signing-enabled true --v2-signing-enabled true --ks *.keystore --ks-pass pass:* --in normalized.apk --out release.apk
34
34
@@ -49,7 +49,7 @@ static void printUsage(){
49
49
" ApkNormalized normalized zip file:\n "
50
50
" recompress all compressed files's data by zlib,\n "
51
51
" align file data offset in zip file (compatible with AndroidSDK#zipalign),\n "
52
- " remove all data descriptor, reserve & normalized Extra field and Comment,\n "
52
+ " remove all data descriptor, normalized Extra field & reserve Comment,\n "
53
53
" compatible with jar sign(apk v1 sign), etc...\n "
54
54
" if apk file only used apk v1 sign, don't re-sign normalizedApk file!\n "
55
55
" if apk file used apk v2 sign or later, must re-sign normalizedApk file after ApkNormalized;\n "
@@ -60,14 +60,27 @@ static void printUsage(){
60
60
" compress speed is very slow when patching.\n "
61
61
" -as-alignSize\n "
62
62
" set align size for uncompressed file in zip for optimize app run speed,\n "
63
- " 1 <= alignSize <= 4k, recommended 4,8, DEFAULT -as-8.\n "
64
- " NOTE: if -ap-1, must 4096%%alignSize==0;\n "
65
- " -ap-isPageAlignSoFile\n "
66
- " if found uncompressed .so file in the zip, need align it to 4k page?\n "
67
- " -ap-0 not page-align uncompressed .so files;\n "
68
- " -ap-1 DEFAULT, page-align uncompressed .so files.\n "
69
- " WARNING: if have uncompressed .so file & do page-align,\n "
70
- " it can't patch by old(version<v1.7.0) ZipPatch!\n "
63
+ " 1 <= alignSize <= PageSize, recommended 4,8, DEFAULT -as-8.\n "
64
+ " NOTE: if not -ap-0, must PageSize%%alignSize==0;\n "
65
+ " -ap-pageAlignSoFile\n "
66
+ " if found uncompressed .so file in the zip, need align it to page size?\n "
67
+ " -ap-0 not page-align uncompressed .so files;\n "
68
+ " -ap-4k (or -ap-1) DEFAULT, page-align uncompressed .so files to 4KB;\n "
69
+ " compatible with all version of ZipPatch;\n "
70
+ " WARNING: if have uncompressed .so file,\n "
71
+ " it not compatible with Android 15 with 16KB page size;\n "
72
+ " -ap-16k page-align uncompressed .so files to 16KB;\n "
73
+ " compatible with Android 15 with 16KB page size;\n "
74
+ " WARNING: if have uncompressed .so file,\n "
75
+ " it can't patch by old(version<v1.8.0) ZipPatch!\n "
76
+ " -ap-c16k page-align uncompressed .so files to 16KB;\n "
77
+ " compatible with all version of ZipPatch,\n "
78
+ " & compatible with Android 15 with 16KB page size;\n "
79
+ " Note: normalized apk file size maybe larger than -ap-16k;\n "
80
+ " -ap-64k page-align uncompressed .so files to 64KB;\n "
81
+ " compatible with Android 15 with 16KB(or 64KB) page size;\n "
82
+ " WARNING: if have uncompressed .so file,\n "
83
+ " it can't patch by old(version<v1.8.0) ZipPatch!\n "
71
84
" -nce-isNotCompressEmptyFile\n "
72
85
" if found compressed empty file in the zip, need change it to not compressed?\n "
73
86
" -nce-0 keep the original compress setting for empty file;\n "
@@ -112,7 +125,8 @@ int main(int argc,char* argv[]){
112
125
113
126
int normalized_cmd_line (int argc, const char * argv[]){
114
127
hpatch_BOOL isNotCompressEmptyFile=_kNULL_VALUE;
115
- hpatch_BOOL isPageAlignSoFile=_kNULL_VALUE;
128
+ size_t pageAlignSoFile=_kNULL_SIZE;
129
+ hpatch_BOOL pageAlignSoFileCompatible=_kNULL_VALUE;
116
130
hpatch_BOOL isOutputVersion=_kNULL_VALUE;
117
131
size_t compressLevel = _kNULL_SIZE;
118
132
size_t alignSize = _kNULL_SIZE;
@@ -137,7 +151,7 @@ int normalized_cmd_line(int argc, const char * argv[]){
137
151
} break ;
138
152
case ' q' :{
139
153
_options_check ((op[2 ]==' \0 ' )," -q" );
140
- g_isPrintApkNormalizedFileName =false ;
154
+ g_isPrintNormalizingFileName =false ;
141
155
} break ;
142
156
case ' n' :{
143
157
if ((op[2 ]==' c' )&&(op[3 ]==' e' )&&(op[4 ]==' -' )&&((op[5 ]==' 0' )||(op[5 ]==' 1' ))){
@@ -158,15 +172,22 @@ int normalized_cmd_line(int argc, const char * argv[]){
158
172
}
159
173
} break ;
160
174
case ' a' :{
161
- if ((op[2 ]==' s' )&&(op[3 ]==' -' )){
175
+ if ((op[2 ]==' p' )&&(op[3 ]==' -' )){
176
+ _options_check (pageAlignSoFile==_kNULL_SIZE," -ap-?" );
177
+ const char * pnum=op+4 ;
178
+ pageAlignSoFileCompatible=(pnum[0 ]==' c' )||(pnum[0 ]==' C' );
179
+ if (pageAlignSoFileCompatible) ++pnum;
180
+ _options_check (kmg_to_size (pnum,strlen (pnum),&pageAlignSoFile)," -ap-?" );
181
+ #define _kMaxPageAlignSize (64 *1024 )
182
+ #define _kDefaultPageAlignSize (4 *1024 )
183
+ if (pageAlignSoFile==1 ) pageAlignSoFile=_kDefaultPageAlignSize;
184
+ _options_check ((pageAlignSoFile==0 )||(pageAlignSoFile==16 *1024 )
185
+ ||(pageAlignSoFile==_kDefaultPageAlignSize)||(pageAlignSoFile==_kMaxPageAlignSize)," -ap-?" );
186
+ }else if ((op[2 ]==' s' )&&(op[3 ]==' -' )){
162
187
_options_check (alignSize==_kNULL_SIZE," -as-?" )
163
188
const char * pnum=op+4 ;
164
189
_options_check (kmg_to_size (pnum,strlen (pnum),&alignSize)," -as-?" );
165
- const size_t _kMaxAlignSize=4 *1024 ;
166
- _options_check ((1 <=alignSize)&&(alignSize<=_kMaxAlignSize)," -as-?" );
167
- }else if ((op[2 ]==' p' )&&(op[3 ]==' -' )&&((op[4 ]==' 0' )||(op[4 ]==' 1' ))){
168
- _options_check (isPageAlignSoFile==_kNULL_VALUE," -ap-?" );
169
- isPageAlignSoFile=(hpatch_BOOL)(op[4 ]==' 1' );
190
+ _options_check ((1 <=alignSize)&&(alignSize<=_kMaxPageAlignSize)," -as-?" );
170
191
}else {
171
192
_options_check (hpatch_FALSE," -a?" );
172
193
}
@@ -178,8 +199,10 @@ int normalized_cmd_line(int argc, const char * argv[]){
178
199
}
179
200
if (isNotCompressEmptyFile==_kNULL_VALUE)
180
201
isNotCompressEmptyFile=hpatch_TRUE;
181
- if (isPageAlignSoFile==_kNULL_VALUE)
182
- isPageAlignSoFile=hpatch_TRUE;
202
+ if (pageAlignSoFile==_kNULL_SIZE)
203
+ pageAlignSoFile=_kDefaultPageAlignSize;
204
+ if (pageAlignSoFile==_kDefaultPageAlignSize)
205
+ pageAlignSoFileCompatible=hpatch_TRUE;
183
206
if (compressLevel==_kNULL_SIZE)
184
207
compressLevel=kDefaultZlibCompressLevel ;
185
208
if (alignSize==_kNULL_SIZE)
@@ -203,7 +226,7 @@ int normalized_cmd_line(int argc, const char * argv[]){
203
226
double time0=clock_s ();
204
227
int apkFilesRemoved=0 ;
205
228
if (!ZipNormalized (srcApk,dstApk,(int )alignSize,(int )compressLevel,
206
- (bool )isNotCompressEmptyFile,( bool )isPageAlignSoFile ,&apkFilesRemoved)){
229
+ (bool )isNotCompressEmptyFile,pageAlignSoFile,pageAlignSoFileCompatible ,&apkFilesRemoved)){
207
230
printf (" \n run ApkNormalized ERROR!\n " );
208
231
return _kResult_NORMALIZED_ERROR;
209
232
}
0 commit comments