@@ -661,6 +661,16 @@ private List<Entry> filterResFileEntries(TableString tableString, int resourceId
661
661
});
662
662
return CollectionUtil .toList (itr );
663
663
}
664
+ public int getVersionCode () {
665
+ AndroidManifestBlock manifestBlock = getAndroidManifest ();
666
+ if (manifestBlock != null ) {
667
+ Integer versionCode = manifestBlock .getVersionCode ();
668
+ if (versionCode != null ) {
669
+ return versionCode ;
670
+ }
671
+ }
672
+ return 0 ;
673
+ }
664
674
public String getPackageName (){
665
675
if (hasAndroidManifest ()){
666
676
return getAndroidManifest ().getPackageName ();
@@ -1141,20 +1151,62 @@ public void setLoadDefaultFramework(boolean loadDefaultFramework) {
1141
1151
}
1142
1152
1143
1153
public void merge (ApkModule module ) throws IOException {
1144
- if (module ==null ||module ==this ){
1154
+ merge (module , false );
1155
+ }
1156
+ public void merge (ApkModule module , boolean force ) throws IOException {
1157
+ if (module == null || module == this ){
1145
1158
return ;
1146
1159
}
1147
- logMessage ("Merging: " +module .getModuleName ());
1160
+ logMessage ("Merging: " + module .getModuleName ());
1161
+ validateMerge (module , force );
1148
1162
mergeDexFiles (module );
1149
1163
mergeTable (module );
1150
1164
mergeFiles (module );
1151
1165
getUncompressedFiles ().merge (module .getUncompressedFiles ());
1152
1166
}
1167
+ private void validateMerge (ApkModule apkModule , boolean force ) throws IOException {
1168
+ if (!hasTableBlock ()) {
1169
+ return ;
1170
+ }
1171
+ String packageName = getPackageName ();
1172
+ int code = getVersionCode ();
1173
+ if (packageName == null || code == 0 ) {
1174
+ return ;
1175
+ }
1176
+ String packageName2 = apkModule .getPackageName ();
1177
+ int code2 = apkModule .getVersionCode ();
1178
+ if (packageName2 == null || code2 == 0 ) {
1179
+ return ;
1180
+ }
1181
+ if (!packageName .equals (packageName2 )) {
1182
+ return ;
1183
+ }
1184
+ if (code == code2 ) {
1185
+ return ;
1186
+ }
1187
+ StringBuilder builder = new StringBuilder ();
1188
+ if (!force ) {
1189
+ builder .append ("WARN: " );
1190
+ }
1191
+ builder .append ("Incompatible to merge: {" );
1192
+ builder .append (packageName );
1193
+ builder .append (", " );
1194
+ builder .append (code );
1195
+ builder .append ("}, with {" );
1196
+ builder .append (packageName2 );
1197
+ builder .append (", " );
1198
+ builder .append (code2 );
1199
+ builder .append ("}" );
1200
+ String msg = builder .toString ();
1201
+ if (force ) {
1202
+ throw new IOException (msg );
1203
+ }
1204
+ logMessage (msg );
1205
+ }
1153
1206
private void mergeTable (ApkModule module ) {
1154
1207
if (!module .hasTableBlock ()){
1155
1208
return ;
1156
1209
}
1157
- logMessage ("Merging resource table: " +module .getModuleName ());
1158
1210
TableBlock exist ;
1159
1211
if (!hasTableBlock ()){
1160
1212
exist =new TableBlock ();
0 commit comments