diff --git a/build.gradle b/build.gradle index a6c3c6c..a7f7c51 100755 --- a/build.gradle +++ b/build.gradle @@ -22,10 +22,11 @@ repositories { } dependencies { + //No dependency } processResources { - filesMatching('lib.properties') { + filesMatching('arsclib.properties') { expand('version': version) } } diff --git a/src/main/java/com/reandroid/lib/apk/ResourceIds.java b/src/main/java/com/reandroid/lib/apk/ResourceIds.java index b394ec4..3bca5c4 100644 --- a/src/main/java/com/reandroid/lib/apk/ResourceIds.java +++ b/src/main/java/com/reandroid/lib/apk/ResourceIds.java @@ -654,9 +654,9 @@ public class ResourceIds { String name=null; Matcher matcher=pattern.matcher(element); while (matcher.find()){ - String attr=matcher.group("Attr").toLowerCase(); - String value=matcher.group("Value"); - element=matcher.group("Next"); + String attr=matcher.group(1).toLowerCase(); + String value=matcher.group(2); + element=matcher.group(3); if(attr.equals("id")){ id=Integer.decode(value); }else if(attr.equals("name")){ @@ -674,7 +674,7 @@ public class ResourceIds { } return new Entry(id, type, name); } - private static final Pattern PATTERN=Pattern.compile("^\\s*(?[^\\s=\"]+)\\s*=\\s*\"(?[^\"]+)\"(?.*)$"); + private static final Pattern PATTERN=Pattern.compile("^\\s*([^\\s=\"]+)\\s*=\\s*\"([^\"]+)\"(.*)$"); } } diff --git a/src/main/java/com/reandroid/lib/arsc/BuildInfo.java b/src/main/java/com/reandroid/lib/arsc/BuildInfo.java index 8c75af9..81e6d84 100755 --- a/src/main/java/com/reandroid/lib/arsc/BuildInfo.java +++ b/src/main/java/com/reandroid/lib/arsc/BuildInfo.java @@ -45,7 +45,7 @@ public class BuildInfo { return sProperties; } private static Properties loadProperties(){ - InputStream inputStream=BuildInfo.class.getResourceAsStream("/lib.properties"); + InputStream inputStream=BuildInfo.class.getResourceAsStream("/arsclib.properties"); Properties properties=new Properties(); try{ properties.load(inputStream); diff --git a/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java b/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java index 05744aa..06e6836 100755 --- a/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java +++ b/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java @@ -43,15 +43,6 @@ public abstract class BlockItem extends Block { mBytes=bts; onBytesChanged(); } - final void ensureMinLength(int minLen){ - int len=mBytes.length; - if(minLen<=len){ - return; - } - byte[] bts=new byte[minLen]; - System.arraycopy(bts, 0, mBytes, 0, mBytes.length); - mBytes=bts; - } final void setBytesLength(int length){ setBytesLength(length, true); } @@ -104,8 +95,7 @@ public abstract class BlockItem extends Block { } @Override public void onReadBytes(BlockReader reader) throws IOException{ - byte[] bts=getBytesInternal(); - reader.readFully(bts); + reader.readFully(getBytesInternal()); onBytesChanged(); } @Override diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java b/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java index 39cb3e4..9f50580 100755 --- a/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java +++ b/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java @@ -15,8 +15,6 @@ */ package com.reandroid.lib.arsc.value; - - import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -427,6 +425,9 @@ public class ResConfigHelper { } return ret.toString(); } + /* + * Encodes density to value + * densityName is full name like: mdpi, xxxdpi, 580dpi ... */ public static short encodeDensity(String densityName){ short density=0; if(densityName==null){ @@ -436,29 +437,31 @@ public class ResConfigHelper { if(!matcher.find()){ return density; } - String d=matcher.group("A"); - if("l".equals(d)){ - density = DENSITY_LOW; - }else if("m".equals(d)){ - density = DENSITY_MEDIUM; - }else if("h".equals(d)){ - density = DENSITY_HIGH; - }else if("tv".equals(d)){ - density = DENSITY_TV; - }else if("xh".equals(d)){ - density = DENSITY_XHIGH; - }else if("xxh".equals(d)){ - density = DENSITY_XXHIGH; - }else if("xxxh".equals(d)){ - density = DENSITY_XXXHIGH; - }else if("any".equals(d)){ - density = DENSITY_ANY; - }else if("no".equals(d)){ - density = DENSITY_NONE; - }else if(isDecimal(d)){ - density = (short) Integer.parseInt(d); + return encodeDensityName(matcher.group(1)); + } + private static short encodeDensityName(String name){ + if("l".equals(name)){ + return DENSITY_LOW; + }else if("m".equals(name)){ + return DENSITY_MEDIUM; + }else if("h".equals(name)){ + return DENSITY_HIGH; + }else if("tv".equals(name)){ + return DENSITY_TV; + }else if("xh".equals(name)){ + return DENSITY_XHIGH; + }else if("xxh".equals(name)){ + return DENSITY_XXHIGH; + }else if("xxxh".equals(name)){ + return DENSITY_XXXHIGH; + }else if("any".equals(name)){ + return DENSITY_ANY; + }else if("no".equals(name)){ + return DENSITY_NONE; + }else if(isDecimal(name)){ + return (short) Integer.parseInt(name); } - return density; + return 0; } private static void encodeDensity(ResConfig resConfig, String[] split){ int density=0; @@ -471,28 +474,8 @@ public class ResConfigHelper { if(!matcher.find()){ continue; } - String d=matcher.group("A"); - if("l".equals(d)){ - density = DENSITY_LOW; - }else if("m".equals(d)){ - density = DENSITY_MEDIUM; - }else if("h".equals(d)){ - density = DENSITY_HIGH; - }else if("tv".equals(d)){ - density = DENSITY_TV; - }else if("xh".equals(d)){ - density = DENSITY_XHIGH; - }else if("xxh".equals(d)){ - density = DENSITY_XXHIGH; - }else if("xxxh".equals(d)){ - density = DENSITY_XXXHIGH; - }else if("any".equals(d)){ - density = DENSITY_ANY; - }else if("no".equals(d)){ - density = DENSITY_NONE; - }else if(isDecimal(d)){ - density = Integer.parseInt(d); - }else { + density=encodeDensityName(matcher.group(1)); + if(density==0){ continue; } split[i]=null; @@ -840,50 +823,28 @@ public class ResConfigHelper { return ret.toString(); } private static void encodeOrientation(ResConfig resConfig, String[] split){ - byte orientation=0; + byte orientationByte=0; for(int i=0;ib){ @@ -1359,23 +1316,23 @@ public class ResConfigHelper { return matcher.find(); } - private static final Pattern PATTERN_SDK_VERSION=Pattern.compile("^-?v(?[0-9]+)$"); + private static final Pattern PATTERN_SDK_VERSION=Pattern.compile("^-?v([0-9]+)$"); - private static final Pattern PATTERN_SCREEN_DP=Pattern.compile("^(?[wh])(?[0-9]+)dp$"); + private static final Pattern PATTERN_SCREEN_DP=Pattern.compile("^([wh])([0-9]+)dp$"); - private static final Pattern PATTERN_SCREEN_SMALLEST_DP=Pattern.compile("^(?(sw)|(sh))(?[0-9]+)dp$"); + private static final Pattern PATTERN_SCREEN_SMALLEST_DP=Pattern.compile("^sw([0-9]+)dp$"); private static final Pattern PATTERN_LANG_NAME=Pattern.compile("^[a-z]{2}$"); private static final Pattern PATTERN_COUNTRY_NAME=Pattern.compile("^[a-zA-Z]{2,3}$"); - private static final Pattern PATTERN_MCC_MNC=Pattern.compile("^(?m[cn]c)(?[0-9]{2,3})$"); + private static final Pattern PATTERN_MCC_MNC=Pattern.compile("^(m[cn]c)([0-9]{2,3})$"); - private static final Pattern PATTERN_DENSITY=Pattern.compile("^(?[^\\s]+)dpi$"); + private static final Pattern PATTERN_DENSITY=Pattern.compile("^([^\\s]+)dpi$"); private static final Pattern PATTERN_NUMBER=Pattern.compile("^[0-9]+$"); - private static final Pattern PATTERN_SCREEN_SIZE=Pattern.compile("^-?(?[0-9]+)x(?[0-9]+)$"); + private static final Pattern PATTERN_SCREEN_SIZE=Pattern.compile("^-?([0-9]+)x([0-9]+)$"); public final static short MASK_LAYOUTDIR = 0xc0; @@ -1404,11 +1361,6 @@ public class ResConfigHelper { public final static short SCREENLAYOUT_ROUND_YES = 0x2; - public final static byte ORIENTATION_ANY = 0; - public final static byte ORIENTATION_PORT = 1; - public final static byte ORIENTATION_LAND = 2; - public final static byte ORIENTATION_SQUARE = 3; - public final static byte MASK_UI_MODE_TYPE = 0x0f; public final static byte UI_MODE_TYPE_ANY = 0x00; public final static byte UI_MODE_TYPE_NORMAL = 0x01; diff --git a/src/main/java/com/reandroid/lib/arsc/value/array/ArrayBag.java b/src/main/java/com/reandroid/lib/arsc/value/array/ArrayBag.java index f231ab1..bdea1b2 100644 --- a/src/main/java/com/reandroid/lib/arsc/value/array/ArrayBag.java +++ b/src/main/java/com/reandroid/lib/arsc/value/array/ArrayBag.java @@ -15,8 +15,6 @@ */ package com.reandroid.lib.arsc.value.array; -import com.reandroid.lib.arsc.item.SpecString; -import com.reandroid.lib.arsc.item.TypeString; import com.reandroid.lib.arsc.value.EntryBlock; import com.reandroid.lib.arsc.value.ResValueBag; import com.reandroid.lib.arsc.value.attribute.AttributeBag; @@ -34,22 +32,14 @@ public class ArrayBag { if(entryBlock==null){ return null; } - SpecString spec = entryBlock.getSpecString(); - if(spec==null){ - return null; - } - return spec.get(); + return entryBlock.getName(); } public String getTypeName(){ EntryBlock entryBlock=getBagItems()[0].getBagItem().getEntryBlock(); if(entryBlock==null){ return null; } - TypeString typeString = entryBlock.getTypeString(); - if(typeString==null){ - return null; - } - return typeString.get(); + return entryBlock.getTypeName(); } @Override public String toString() { @@ -81,11 +71,11 @@ public class ArrayBag { if(entryBlock==null){ return false; } - TypeString typeString = entryBlock.getTypeString(); - if(typeString==null){ + String type = entryBlock.getTypeName(); + if(type==null){ return false; } - if(!NAME.equals(typeString.get())){ + if(!type.startsWith(NAME)){ return false; } return ArrayBagItem.create(resValueBag.getBagItems()) != null; diff --git a/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeItemType.java b/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeItemType.java index a5c4991..4c3a8c2 100755 --- a/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeItemType.java +++ b/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeItemType.java @@ -45,8 +45,7 @@ public enum AttributeItemType { return null; } name=name.toUpperCase(); - AttributeItemType[] all=values(); - for(AttributeItemType bagType:all){ + for(AttributeItemType bagType:values()){ if(name.equals(bagType.name())){ return bagType; } diff --git a/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBag.java b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBag.java index df2a4cd..8413b54 100644 --- a/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBag.java +++ b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBag.java @@ -15,8 +15,6 @@ */ package com.reandroid.lib.arsc.value.plurals; -import com.reandroid.lib.arsc.item.SpecString; -import com.reandroid.lib.arsc.item.TypeString; import com.reandroid.lib.arsc.value.EntryBlock; import com.reandroid.lib.arsc.value.ResValueBag; import com.reandroid.lib.arsc.value.attribute.AttributeBag; @@ -34,22 +32,14 @@ public class PluralsBag { if(entryBlock==null){ return null; } - SpecString spec = entryBlock.getSpecString(); - if(spec==null){ - return null; - } - return spec.get(); + return entryBlock.getName(); } public String getTypeName(){ EntryBlock entryBlock=getBagItems()[0].getBagItem().getEntryBlock(); if(entryBlock==null){ return null; } - TypeString typeString = entryBlock.getTypeString(); - if(typeString==null){ - return null; - } - return typeString.get(); + return entryBlock.getTypeName(); } @Override @@ -82,11 +72,11 @@ public class PluralsBag { if(entryBlock==null){ return false; } - TypeString typeString = entryBlock.getTypeString(); - if(typeString==null){ + String type = entryBlock.getTypeName(); + if(type==null){ return false; } - if(!NAME.equals(typeString.get())){ + if(!type.startsWith(NAME)){ return false; } return PluralsBagItem.create(resValueBag.getBagItems()) != null; diff --git a/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBagItem.java b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBagItem.java index 59ea422..ee686ec 100644 --- a/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBagItem.java +++ b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsBagItem.java @@ -109,6 +109,7 @@ public class PluralsBagItem { for(int i=0;i