From 15e031fdebe4d9bd57e9c4e63703d4a12a62c2ff Mon Sep 17 00:00:00 2001 From: REAndroid Date: Mon, 27 Jun 2022 14:27:50 -0400 Subject: [PATCH] V1.0.1 --- LICENSE | 0 README.md | 34 +- build.gradle | 12 +- gradle/wrapper/gradle-wrapper.jar | Bin gradle/wrapper/gradle-wrapper.properties | 0 gradlew.bat | 168 +++--- settings.gradle | 0 .../com/reandroid/lib/arsc/BuildInfo.java | 0 .../lib/arsc/array/EntryBlockArray.java | 0 .../lib/arsc/array/LibraryInfoArray.java | 0 .../lib/arsc/array/OffsetBlockArray.java | 0 .../lib/arsc/array/PackageArray.java | 0 .../lib/arsc/array/ResValueBagItemArray.java | 0 .../lib/arsc/array/ResXmlAttributeArray.java | 0 .../lib/arsc/array/ResXmlChunkArray.java | 0 .../lib/arsc/array/ResXmlIDArray.java | 0 .../lib/arsc/array/ResXmlStringArray.java | 0 .../lib/arsc/array/SpecBlockArray.java | 0 .../lib/arsc/array/SpecStringArray.java | 0 .../lib/arsc/array/SpecTypePairArray.java | 0 .../reandroid/lib/arsc/array/StringArray.java | 0 .../reandroid/lib/arsc/array/StyleArray.java | 0 .../lib/arsc/array/TableStringArray.java | 0 .../lib/arsc/array/TypeBlockArray.java | 0 .../lib/arsc/array/TypeStringArray.java | 0 .../com/reandroid/lib/arsc/base/Block.java | 0 .../reandroid/lib/arsc/base/BlockArray.java | 0 .../lib/arsc/base/BlockArrayCreator.java | 0 .../lib/arsc/base/BlockContainer.java | 12 + .../reandroid/lib/arsc/base/BlockCounter.java | 0 .../reandroid/lib/arsc/base/BlockCreator.java | 0 .../reandroid/lib/arsc/chunk/BaseChunk.java | 0 .../lib/arsc/chunk/BaseTypeBlock.java | 0 .../reandroid/lib/arsc/chunk/ChunkType.java | 0 .../lib/arsc/chunk/LibraryBlock.java | 0 .../lib/arsc/chunk/PackageBlock.java | 66 +-- .../reandroid/lib/arsc/chunk/SpecBlock.java | 0 .../reandroid/lib/arsc/chunk/TableBlock.java | 104 ++-- .../reandroid/lib/arsc/chunk/TypeBlock.java | 0 .../arsc/chunk/xml/AndroidManifestBlock.java | 166 ++++++ .../lib/arsc/chunk/xml/BaseXmlChunk.java | 17 + .../lib/arsc/chunk/xml/ResXmlAttribute.java | 92 +++- .../lib/arsc/chunk/xml/ResXmlBlock.java | 146 +++++- .../lib/arsc/chunk/xml/ResXmlElement.java | 114 +++- .../lib/arsc/chunk/xml/ResXmlEndElement.java | 0 .../arsc/chunk/xml/ResXmlEndNamespace.java | 0 .../lib/arsc/chunk/xml/ResXmlIDMap.java | 0 .../arsc/chunk/xml/ResXmlStartElement.java | 15 + .../arsc/chunk/xml/ResXmlStartNamespace.java | 0 .../lib/arsc/chunk/xml/ResXmlText.java | 10 + .../lib/arsc/container/BlockList.java | 0 .../container/ExpandableBlockContainer.java | 0 .../arsc/container/FixedBlockContainer.java | 0 .../lib/arsc/container/PackageLastBlocks.java | 0 .../lib/arsc/container/ResValueContainer.java | 0 .../arsc/container/SingleBlockContainer.java | 0 .../lib/arsc/container/SpecTypePair.java | 0 .../lib/arsc/decoder/ResDecoder.java | 85 --- .../arsc/decoder/ResourceNameProvider.java | 10 - .../lib/arsc/decoder/ResourceNameStore.java | 52 -- .../lib/arsc/decoder/ValueDecoder.java | 496 +++++++++++++++++- .../lib/arsc/decoder/xml/ResXmlDecoder.java | 139 ----- .../reandroid/lib/arsc/group/EntryGroup.java | 0 .../reandroid/lib/arsc/group/ItemGroup.java | 0 .../reandroid/lib/arsc/group/StringGroup.java | 0 .../lib/arsc/header/HeaderBlock.java | 0 .../com/reandroid/lib/arsc/io/BlockLoad.java | 0 .../reandroid/lib/arsc/io/BlockReader.java | 11 + .../reandroid/lib/arsc/item/BlockItem.java | 0 .../reandroid/lib/arsc/item/ByteArray.java | 0 .../com/reandroid/lib/arsc/item/ByteItem.java | 0 .../reandroid/lib/arsc/item/IntegerArray.java | 0 .../reandroid/lib/arsc/item/IntegerItem.java | 0 .../reandroid/lib/arsc/item/PackageName.java | 0 .../lib/arsc/item/ReferenceItem.java | 0 .../com/reandroid/lib/arsc/item/ResXmlID.java | 0 .../reandroid/lib/arsc/item/ResXmlString.java | 0 .../reandroid/lib/arsc/item/ShortItem.java | 0 .../reandroid/lib/arsc/item/SpecString.java | 0 .../reandroid/lib/arsc/item/StringItem.java | 0 .../reandroid/lib/arsc/item/StyleItem.java | 0 .../reandroid/lib/arsc/item/TableString.java | 0 .../reandroid/lib/arsc/item/TypeString.java | 0 .../lib/arsc/model/StyleSpanInfo.java | 0 .../lib/arsc/pool/BaseStringPool.java | 11 + .../com/reandroid/lib/arsc/pool/PoolType.java | 0 .../lib/arsc/pool/ResXmlStringPool.java | 0 .../lib/arsc/pool/SpecStringPool.java | 3 + .../lib/arsc/pool/TableStringPool.java | 0 .../lib/arsc/pool/TypeStringPool.java | 3 + .../lib/arsc/pool/builder/SpannedText.java | 16 + .../lib/arsc/pool/builder/StyleBuilder.java | 29 + .../lib/arsc/util/FrameworkTable.java | 151 +++++- .../lib/arsc/value/BaseResValue.java | 0 .../lib/arsc/value/BaseResValueItem.java | 0 .../reandroid/lib/arsc/value/EntryBlock.java | 0 .../reandroid/lib/arsc/value/LibraryInfo.java | 0 .../reandroid/lib/arsc/value/ResConfig.java | 0 .../lib/arsc/value/ResConfigHelper.java | 0 .../reandroid/lib/arsc/value/ResValueBag.java | 0 .../lib/arsc/value/ResValueBagItem.java | 44 +- .../reandroid/lib/arsc/value/ResValueInt.java | 0 .../lib/arsc/value/ResValueItem.java | 0 .../reandroid/lib/arsc/value/ValueType.java | 0 .../arsc/value/attribute/AttributeBag.java | 194 +++++++ .../value/attribute/AttributeBagItem.java | 187 +++++++ .../value/attribute/AttributeItemType.java | 41 ++ .../value/attribute/AttributeValueType.java | 117 +++++ .../arsc/value/plurals/PluralsQuantity.java | 45 ++ .../com/reandroid/lib/common/EntryStore.java | 18 + .../com/reandroid/lib/common/Frameworks.java | 37 ++ .../com/reandroid/lib/common/ROArrayList.java | 21 + .../reandroid/lib/common/ROSingleList.java | 25 + .../reandroid/lib/common/TableEntryStore.java | 111 ++++ .../resources/fwk/android_resources_30.arsc | Bin 0 -> 915764 bytes src/main/resources/lib.properties | 0 116 files changed, 2300 insertions(+), 502 deletions(-) mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 build.gradle mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 gradlew.bat mode change 100644 => 100755 settings.gradle mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/BuildInfo.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/EntryBlockArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/LibraryInfoArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/OffsetBlockArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/PackageArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/ResValueBagItemArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/ResXmlAttributeArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/ResXmlChunkArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/ResXmlIDArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/ResXmlStringArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/SpecBlockArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/SpecStringArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/StringArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/StyleArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/TableStringArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/array/TypeStringArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/Block.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/BlockArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/BlockArrayCreator.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/BlockContainer.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/BlockCounter.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/base/BlockCreator.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/BaseChunk.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/ChunkType.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/LibraryBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java create mode 100644 src/main/java/com/reandroid/lib/arsc/chunk/xml/AndroidManifestBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/BaseXmlChunk.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlAttribute.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndElement.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndNamespace.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlIDMap.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartElement.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartNamespace.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlText.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/BlockList.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/ExpandableBlockContainer.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/FixedBlockContainer.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/ResValueContainer.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/SingleBlockContainer.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java delete mode 100644 src/main/java/com/reandroid/lib/arsc/decoder/ResDecoder.java delete mode 100644 src/main/java/com/reandroid/lib/arsc/decoder/ResourceNameProvider.java delete mode 100644 src/main/java/com/reandroid/lib/arsc/decoder/ResourceNameStore.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/decoder/ValueDecoder.java delete mode 100644 src/main/java/com/reandroid/lib/arsc/decoder/xml/ResXmlDecoder.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/group/EntryGroup.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/group/ItemGroup.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/group/StringGroup.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/header/HeaderBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/io/BlockLoad.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/io/BlockReader.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/BlockItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ByteArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ByteItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/IntegerArray.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/IntegerItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/PackageName.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ReferenceItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ResXmlID.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ResXmlString.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/ShortItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/SpecString.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/StringItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/StyleItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/TableString.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/item/TypeString.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/model/StyleSpanInfo.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/BaseStringPool.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/PoolType.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/ResXmlStringPool.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/SpecStringPool.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/pool/TypeStringPool.java create mode 100755 src/main/java/com/reandroid/lib/arsc/pool/builder/SpannedText.java create mode 100755 src/main/java/com/reandroid/lib/arsc/pool/builder/StyleBuilder.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/util/FrameworkTable.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/BaseResValue.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/BaseResValueItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResConfig.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResValueBag.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResValueBagItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResValueInt.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ResValueItem.java mode change 100644 => 100755 src/main/java/com/reandroid/lib/arsc/value/ValueType.java create mode 100755 src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeBag.java create mode 100755 src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeBagItem.java create mode 100755 src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeItemType.java create mode 100755 src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeValueType.java create mode 100755 src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsQuantity.java create mode 100755 src/main/java/com/reandroid/lib/common/EntryStore.java create mode 100755 src/main/java/com/reandroid/lib/common/Frameworks.java create mode 100755 src/main/java/com/reandroid/lib/common/ROArrayList.java create mode 100755 src/main/java/com/reandroid/lib/common/ROSingleList.java create mode 100755 src/main/java/com/reandroid/lib/common/TableEntryStore.java create mode 100755 src/main/resources/fwk/android_resources_30.arsc mode change 100644 => 100755 src/main/resources/lib.properties diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 8f5a1d7..ce5d24d --- a/README.md +++ b/README.md @@ -7,22 +7,38 @@ public static void example() throws IOException { File inFile=new File("resources.arsc"); - BlockReader blockReader=new BlockReader(inFile); TableBlock tableBlock=new TableBlock(); - tableBlock.readBytes(blockReader); + tableBlock.readBytes(inFile); - // edit tableBlock as desired + //edit tableBlock as desired, for example to change the package: + PackageBlock packageBlock=tableBlock.getPackageArray().get(0); + packageBlock.setPackageName("com.new.package.name"); + //refresh to recalculate offsets tableBlock.refresh(); + + //save the edited table + File outFile=new File("resources_out.arsc"); + tableBlock.writeBytes(outFile); + } - File outFile=new File("resources_out.arsc"); - OutputStream outputStream=new FileOutputStream(outFile, false); + public static void exampleManifest() throws IOException { + File inFile=new File("AndroidManifest.xml"); + + AndroidManifestBlock manifestBlock=new AndroidManifestBlock(); + manifestBlock.readBytes(file); + + //edit AndroidManifest as desired, for example to change the package: - tableBlock.writeBytes(outputStream); - - outputStream.flush(); - outputStream.close(); + manifestBlock.setPackageName("com.new.package.name"); + + //refresh to recalculate offsets + manifestBlock.refresh(); + + //save the edited table + File outFile=new File("AndroidManifest_out.xml"); + manifestBlock.writeBytes(outFile); } ``` diff --git a/build.gradle b/build.gradle old mode 100644 new mode 100755 index 66f27ae..0e23ca1 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'java-library' group 'com.reandroid.lib.arsc' -version '1.0.0' +version '1.0.1' java { sourceCompatibility JavaVersion.VERSION_1_8 @@ -18,12 +18,12 @@ if (JavaVersion.current().isJava8Compatible()) { } repositories { mavenCentral() + mavenLocal() } -dependencies { - +processResources { + filesMatching('lib.properties') { + expand('version': version) + } } -processResources.inputs.property('version', version) -processResources.expand('version': version) - diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 diff --git a/gradlew.bat b/gradlew.bat old mode 100644 new mode 100755 index 0f8d593..6d57edc --- a/gradlew.bat +++ b/gradlew.bat @@ -1,84 +1,84 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/BuildInfo.java b/src/main/java/com/reandroid/lib/arsc/BuildInfo.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/EntryBlockArray.java b/src/main/java/com/reandroid/lib/arsc/array/EntryBlockArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/LibraryInfoArray.java b/src/main/java/com/reandroid/lib/arsc/array/LibraryInfoArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/OffsetBlockArray.java b/src/main/java/com/reandroid/lib/arsc/array/OffsetBlockArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java b/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/ResValueBagItemArray.java b/src/main/java/com/reandroid/lib/arsc/array/ResValueBagItemArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/ResXmlAttributeArray.java b/src/main/java/com/reandroid/lib/arsc/array/ResXmlAttributeArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/ResXmlChunkArray.java b/src/main/java/com/reandroid/lib/arsc/array/ResXmlChunkArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/ResXmlIDArray.java b/src/main/java/com/reandroid/lib/arsc/array/ResXmlIDArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/ResXmlStringArray.java b/src/main/java/com/reandroid/lib/arsc/array/ResXmlStringArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/SpecBlockArray.java b/src/main/java/com/reandroid/lib/arsc/array/SpecBlockArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/SpecStringArray.java b/src/main/java/com/reandroid/lib/arsc/array/SpecStringArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java b/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/StringArray.java b/src/main/java/com/reandroid/lib/arsc/array/StringArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/StyleArray.java b/src/main/java/com/reandroid/lib/arsc/array/StyleArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/TableStringArray.java b/src/main/java/com/reandroid/lib/arsc/array/TableStringArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java b/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/array/TypeStringArray.java b/src/main/java/com/reandroid/lib/arsc/array/TypeStringArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/base/Block.java b/src/main/java/com/reandroid/lib/arsc/base/Block.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/base/BlockArray.java b/src/main/java/com/reandroid/lib/arsc/base/BlockArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/base/BlockArrayCreator.java b/src/main/java/com/reandroid/lib/arsc/base/BlockArrayCreator.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/base/BlockContainer.java b/src/main/java/com/reandroid/lib/arsc/base/BlockContainer.java old mode 100644 new mode 100755 index b65082f..08df044 --- a/src/main/java/com/reandroid/lib/arsc/base/BlockContainer.java +++ b/src/main/java/com/reandroid/lib/arsc/base/BlockContainer.java @@ -9,6 +9,18 @@ public abstract class BlockContainer extends Block{ public BlockContainer(){ super(); } + + protected final BlockContainer getTopContainer(){ + Block parent=this; + BlockContainer result=this; + while (parent!=null){ + if(parent instanceof BlockContainer){ + result=(BlockContainer)parent; + } + parent=parent.getParent(); + } + return result; + } protected abstract void onRefreshed(); public final void refresh(){ if(isNull()){ diff --git a/src/main/java/com/reandroid/lib/arsc/base/BlockCounter.java b/src/main/java/com/reandroid/lib/arsc/base/BlockCounter.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/base/BlockCreator.java b/src/main/java/com/reandroid/lib/arsc/base/BlockCreator.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/BaseChunk.java b/src/main/java/com/reandroid/lib/arsc/chunk/BaseChunk.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/ChunkType.java b/src/main/java/com/reandroid/lib/arsc/chunk/ChunkType.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/LibraryBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/LibraryBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java old mode 100644 new mode 100755 index edf0b0a..d39810f --- a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java @@ -4,7 +4,6 @@ import com.reandroid.lib.arsc.array.SpecTypePairArray; import com.reandroid.lib.arsc.base.Block; import com.reandroid.lib.arsc.container.PackageLastBlocks; import com.reandroid.lib.arsc.container.SpecTypePair; -import com.reandroid.lib.arsc.decoder.ResourceNameProvider; import com.reandroid.lib.arsc.group.EntryGroup; import com.reandroid.lib.arsc.item.IntegerItem; import com.reandroid.lib.arsc.item.PackageName; @@ -12,15 +11,13 @@ import com.reandroid.lib.arsc.item.ReferenceItem; import com.reandroid.lib.arsc.pool.SpecStringPool; import com.reandroid.lib.arsc.pool.TableStringPool; import com.reandroid.lib.arsc.pool.TypeStringPool; -import com.reandroid.lib.arsc.value.BaseResValue; import com.reandroid.lib.arsc.value.EntryBlock; import com.reandroid.lib.arsc.value.LibraryInfo; -import com.reandroid.lib.arsc.value.ResValueBag; import java.util.*; -public class PackageBlock extends BaseChunk implements ResourceNameProvider { +public class PackageBlock extends BaseChunk { private final IntegerItem mPackageId; private final PackageName mPackageName; @@ -270,67 +267,6 @@ public class PackageBlock extends BaseChunk implements ResourceNameProvider { refreshKeyStrings(); } - @Override - public String getResourceFullName(int resId, boolean includePackageName) { - EntryGroup entryGroup=getEntryGroup(resId); - if(entryGroup==null){ - return null; - } - String type=entryGroup.getTypeName(); - if(type==null){ - return null; - } - String spec=entryGroup.getSpecName(); - if(spec==null){ - return null; - } - StringBuilder builder=new StringBuilder(); - builder.append('@'); - if(includePackageName){ - builder.append(getPackageName()); - builder.append(':'); - } - builder.append(type); - builder.append('/'); - builder.append(spec); - return builder.toString(); - } - - @Override - public String getResourceName(int resId, boolean includePackageName) { - EntryGroup entryGroup=getEntryGroup(resId); - if(entryGroup==null){ - return null; - } - String spec=entryGroup.getSpecName(); - if(spec==null){ - return null; - } - StringBuilder builder=new StringBuilder(); - if(includePackageName){ - builder.append(getPackageName()); - builder.append(':'); - } - builder.append(spec); - return builder.toString(); - } - @Override - public ResValueBag getAttributeBag(int resId){ - EntryGroup entryGroup=getEntryGroup(resId); - if(entryGroup==null){ - return null; - } - EntryBlock entryBlock=entryGroup.pickOne(); - if(entryBlock==null){ - return null; - } - BaseResValue resValue=entryBlock.getResValue(); - if(resValue instanceof ResValueBag){ - return (ResValueBag)resValue; - } - return null; - } - @Override public String toString(){ StringBuilder builder=new StringBuilder(); diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java old mode 100644 new mode 100755 index 586c479..0495055 --- a/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java @@ -1,14 +1,16 @@ package com.reandroid.lib.arsc.chunk; import com.reandroid.lib.arsc.array.PackageArray; -import com.reandroid.lib.arsc.decoder.ResourceNameProvider; +import com.reandroid.lib.arsc.chunk.xml.ResXmlBlock; +import com.reandroid.lib.arsc.header.HeaderBlock; +import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.item.IntegerItem; import com.reandroid.lib.arsc.pool.TableStringPool; -import com.reandroid.lib.arsc.value.ResValueBag; +import java.io.*; import java.util.Collection; -public class TableBlock extends BaseChunk implements ResourceNameProvider { +public class TableBlock extends BaseChunk { private final IntegerItem mPackageCount; private final TableStringPool mTableStringPool; private final PackageArray mPackageArray; @@ -42,43 +44,34 @@ public class TableBlock extends BaseChunk implements ResourceNameProvider { protected void onChunkRefreshed() { refreshPackageCount(); } - @Override - public String getResourceFullName(int resId, boolean includePackageName) { - byte pkgId= (byte) ((resId>>24)&0xFF); - if(pkgId==0){ - return null; - } - PackageBlock packageBlock=getPackageBlockById(pkgId); - if(packageBlock!=null){ - return packageBlock.getResourceFullName(resId, includePackageName); - } - return null; - } @Override - public String getResourceName(int resId, boolean includePackageName) { - byte pkgId= (byte) ((resId>>24)&0xFF); - if(pkgId==0){ - return null; - } - PackageBlock packageBlock=getPackageBlockById(pkgId); - if(packageBlock!=null){ - return packageBlock.getResourceName(resId, includePackageName); - } - return null; + public int onWriteBytes(OutputStream stream) throws IOException{ + int result=super.onWriteBytes(stream); + stream.flush(); + stream.close(); + return result; } - @Override - public ResValueBag getAttributeBag(int resId){ - byte pkgId= (byte) ((resId>>24)&0xFF); - if(pkgId==0){ - return null; - } - PackageBlock packageBlock=getPackageBlockById(pkgId); - if(packageBlock!=null){ - return packageBlock.getAttributeBag(resId); - } - return null; + public void readBytes(File file) throws IOException{ + BlockReader reader=new BlockReader(file); + super.readBytes(reader); } + public void readBytes(InputStream inputStream) throws IOException{ + BlockReader reader=new BlockReader(inputStream); + super.readBytes(reader); + } + public final int writeBytes(File file) throws IOException{ + if(isNull()){ + throw new IOException("Can NOT save null block"); + } + File dir=file.getParentFile(); + if(dir!=null && !dir.exists()){ + dir.mkdirs(); + } + OutputStream outputStream=new FileOutputStream(file); + return super.writeBytes(outputStream); + } + @Override public String toString(){ StringBuilder builder=new StringBuilder(); @@ -89,4 +82,43 @@ public class TableBlock extends BaseChunk implements ResourceNameProvider { return builder.toString(); } + + public static boolean isResTableBlock(File file){ + if(file==null){ + return false; + } + try { + InputStream inputStream=new FileInputStream(file); + return isResTableBlock(inputStream); + } catch (FileNotFoundException ignored) { + return false; + } + } + public static boolean isResTableBlock(InputStream inputStream){ + try { + HeaderBlock headerBlock= BlockReader.readHeaderBlock(inputStream); + return isResTableBlock(headerBlock); + } catch (IOException ignored) { + return false; + } + } + public static boolean isResTableBlock(BlockReader blockReader){ + if(blockReader==null){ + return false; + } + try { + HeaderBlock headerBlock = blockReader.readHeaderBlock(); + return isResTableBlock(headerBlock); + } catch (IOException ignored) { + return false; + } + } + public static boolean isResTableBlock(HeaderBlock headerBlock){ + if(headerBlock==null){ + return false; + } + ChunkType chunkType=headerBlock.getChunkType(); + return chunkType==ChunkType.TABLE; + } + } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/AndroidManifestBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/AndroidManifestBlock.java new file mode 100644 index 0000000..67b98c0 --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/AndroidManifestBlock.java @@ -0,0 +1,166 @@ +package com.reandroid.lib.arsc.chunk.xml; + +import com.reandroid.lib.arsc.item.ResXmlString; +import com.reandroid.lib.arsc.pool.ResXmlStringPool; +import com.reandroid.lib.arsc.value.ValueType; + +import java.util.ArrayList; +import java.util.List; + +public class AndroidManifestBlock extends ResXmlBlock{ + public AndroidManifestBlock(){ + super(); + } + public List getPermissions(){ + List results=new ArrayList<>(); + ResXmlElement manifestElement=getManifestElement(); + if(manifestElement==null){ + return results; + } + List permissionList = manifestElement.searchElementsByTagName(TAG_uses_permission); + for(ResXmlElement permission:permissionList){ + ResXmlAttribute nameAttr = permission.searchAttributeByName(ATTR_android_name); + if(nameAttr==null){ + continue; + } + String val=nameAttr.getValueString(); + if(val!=null){ + results.add(val); + } + } + return results; + } + public String getPackageName(){ + return getManifestAttributeString(ATTR_PACKAGE); + } + public boolean setPackageName(String packageName){ + return setManifestAttributeString(ATTR_PACKAGE, packageName); + } + public Integer getCompileSdkVersion(){ + return getManifestAttributeInt(ATTR_compileSdkVersion); + } + public boolean setCompileSdkVersion(int val){ + return setManifestAttributeInt(ATTR_compileSdkVersion, val); + } + public String getCompileSdkVersionCodename(){ + return getManifestAttributeString(ATTR_compileSdkVersionCodename); + } + public boolean setCompileSdkVersionCodename(String val){ + return setManifestAttributeString(ATTR_compileSdkVersionCodename, val); + } + public Integer getVersionCode(){ + return getManifestAttributeInt(ATTR_versionCode); + } + public boolean setVersionCode(int val){ + return setManifestAttributeInt(ATTR_versionCode, val); + } + public String getVersionName(){ + return getManifestAttributeString(ATTR_versionName); + } + public boolean setVersionName(String packageName){ + return setManifestAttributeString(ATTR_versionName, packageName); + } + private String getManifestAttributeString(String name){ + ResXmlElement manifestElement=getManifestElement(); + if(manifestElement==null){ + return null; + } + ResXmlAttribute attribute= manifestElement.searchAttributeByName(name); + if(attribute==null){ + return null; + } + int raw=attribute.getRawValue(); + ResXmlStringPool pool = getStringPool(); + ResXmlString resXmlString = pool.get(raw); + if(resXmlString==null){ + return null; + } + return resXmlString.getHtml(); + } + private boolean setManifestAttributeString(String name, String value){ + ResXmlElement manifestElement=getManifestElement(); + if(manifestElement==null){ + return false; + } + ResXmlAttribute attribute= manifestElement.searchAttributeByName(name); + if(attribute==null){ + return false; + } + attribute.setValueType(ValueType.STRING); + ResXmlString resXmlString=attribute.setValueString(value); + return resXmlString!=null; + } + private boolean setManifestAttributeInt(String name, int value){ + ResXmlElement manifestElement=getManifestElement(); + if(manifestElement==null){ + return false; + } + ResXmlAttribute attribute= manifestElement.searchAttributeByName(name); + if(attribute==null){ + return false; + } + attribute.setValueType(ValueType.INT_DEC); + attribute.setValueString(String.valueOf(value)); + attribute.setRawValue(value); + return true; + } + private Integer getManifestAttributeInt(String name){ + ResXmlElement manifestElement=getManifestElement(); + if(manifestElement==null){ + return null; + } + ResXmlAttribute attribute= manifestElement.searchAttributeByName(name); + if(attribute==null){ + return null; + } + return attribute.getRawValue(); + } + private ResXmlElement getManifestElement(){ + ResXmlElement manifestElement=getResXmlElement(); + if(manifestElement==null){ + return null; + } + if(!TAG_MANIFEST.equals(manifestElement.getTag())){ + return null; + } + return manifestElement; + } + @Override + public String toString(){ + StringBuilder builder=new StringBuilder(); + builder.append(getClass().getSimpleName()); + builder.append("{"); + builder.append(ATTR_PACKAGE).append("=").append(getPackageName()); + builder.append(", ").append(ATTR_versionCode).append("=").append(getVersionCode()); + builder.append(", ").append(ATTR_versionName).append("=").append(getVersionName()); + builder.append(", ").append(ATTR_compileSdkVersion).append("=").append(getCompileSdkVersion()); + builder.append(", ").append(ATTR_compileSdkVersionCodename).append("=").append(getCompileSdkVersionCodename()); + + List allPermissions=getPermissions(); + builder.append(", PERMISSIONS["); + boolean appendOnce=false; + for(String permissions:allPermissions){ + if(appendOnce){ + builder.append(", "); + } + builder.append(permissions); + appendOnce=true; + } + builder.append("]"); + builder.append("}"); + return builder.toString(); + } + private static final String TAG_MANIFEST="manifest"; + private static final String TAG_uses_permission="uses-permission"; + + private static final String ATTR_compileSdkVersion="compileSdkVersion"; + private static final String ATTR_compileSdkVersionCodename="compileSdkVersionCodename"; + private static final String ATTR_installLocation="installLocation"; + private static final String ATTR_PACKAGE="package"; + private static final String ATTR_platformBuildVersionCode="platformBuildVersionCode"; + private static final String ATTR_platformBuildVersionName="platformBuildVersionName"; + private static final String ATTR_versionCode="versionCode"; + private static final String ATTR_versionName="versionName"; + + private static final String ATTR_android_name="name"; +} diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/BaseXmlChunk.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/BaseXmlChunk.java old mode 100644 new mode 100755 index 7015020..e9283a5 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/BaseXmlChunk.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/BaseXmlChunk.java @@ -57,6 +57,15 @@ public class BaseXmlChunk extends BaseChunk { public int getStringReference(){ return mStringReference.get(); } + public ResXmlString setString(String str){ + ResXmlStringPool pool = getStringPool(); + if(pool==null){ + return null; + } + ResXmlString xmlString = pool.getOrCreate(str); + setStringReference(xmlString.getIndex()); + return xmlString; + } public ResXmlStringPool getStringPool(){ @@ -82,6 +91,13 @@ public class BaseXmlChunk extends BaseChunk { } return null; } + ResXmlString getOrCreateResXmlString(String str){ + ResXmlStringPool stringPool=getStringPool(); + if(stringPool!=null){ + return stringPool.getOrCreate(str); + } + return null; + } String getString(int ref){ ResXmlString xmlString=getResXmlString(ref); if(xmlString!=null){ @@ -96,6 +112,7 @@ public class BaseXmlChunk extends BaseChunk { public String getUri(){ return getString(getNamespaceReference()); } + public ResXmlElement getParentResXmlElement(){ Block parent=getParent(); while (parent!=null){ diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlAttribute.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlAttribute.java old mode 100644 new mode 100755 index 3bb60fa..011fe02 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlAttribute.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlAttribute.java @@ -17,10 +17,10 @@ public class ResXmlAttribute extends FixedBlockContainer { private final IntegerItem mRawValue; public ResXmlAttribute() { super(7); - mNamespaceReference =new IntegerItem(); + mNamespaceReference =new IntegerItem(-1); mNameReference =new IntegerItem(); mValueStringReference =new IntegerItem(); - mNameType=new ShortItem(); + mNameType=new ShortItem((short) 0x0008); mReserved =new ByteItem(); mValueTypeByte=new ByteItem(); mRawValue=new IntegerItem(); @@ -75,6 +75,11 @@ public class ResXmlAttribute extends FixedBlockContainer { public ValueType getValueType(){ return ValueType.valueOf(getValueTypeByte()); } + public void setValueType(ValueType valueType){ + if(valueType!=null){ + setValueTypeByte(valueType.getByte()); + } + } public String getFullName(){ String name=getName(); if(name==null){ @@ -100,12 +105,86 @@ public class ResXmlAttribute extends FixedBlockContainer { } return startNamespace.getPrefix(); } + public ResXmlStartNamespace getStartNamespace(){ + ResXmlElement xmlElement=getParentResXmlElement(); + if(xmlElement==null){ + return null; + } + return xmlElement.getStartNamespaceByUriRef(getNamespaceReference()); + } public String getValueString(){ return getString(getValueStringReference()); } + ResXmlString setValueString(String str){ + ResXmlString resXmlString=getOrCreateResXmlString(str); + if(resXmlString==null){ + return null; + } + int ref=resXmlString.getIndex(); + setValueStringReference(ref); + if(getValueType()==ValueType.STRING){ + setRawValue(ref); + } + return resXmlString; + } public int getNameResourceID(){ return getResourceId(getNameReference()); } + public boolean setName(String name, int resourceId){ + ResXmlStringPool stringPool=getStringPool(); + if(stringPool==null){ + return false; + } + String old=getName(); + if(resourceId==0){ + if(name.equals(old)){ + return false; + } + ResXmlString resXmlString=stringPool.getOrCreate(name); + setNameReference(resXmlString.getIndex()); + return true; + } + ResXmlIDMap xmlIDMap=getResXmlIDMap(); + if(xmlIDMap==null){ + return false; + } + int oldId=getNameResourceID(); + if(oldId==resourceId){ + if(name.equals(old)){ + return false; + } + } + ResXmlID resXmlID=xmlIDMap.getByResId(resourceId); + if(resXmlID!=null){ + int ref=resXmlID.getIndex(); + ResXmlString idName=stringPool.get(ref); + if(idName != null){ + if(name.equals(idName.getHtml())){ + setNameReference(ref); + }else { + idName.set(name); + } + return true; + } + } + int stringsCount=stringPool.countStrings(); + int idCount=xmlIDMap.getResXmlIDArray().childesCount(); + if(idCount>stringsCount){ + xmlIDMap.addResourceId(idCount, resourceId);; + stringPool.getStringsArray().ensureSize(idCount+1); + ResXmlString resXmlString=stringPool.get(idCount); + resXmlString.set(name); + setNameReference(idCount); + return true; + } + xmlIDMap.addResourceId(stringsCount, resourceId); + stringPool.getStringsArray().ensureSize(stringsCount+1); + ResXmlString resXmlString=stringPool.get(stringsCount); + resXmlString.set(name); + setNameReference(stringsCount); + return true; + + } private int getResourceId(int ref){ if(ref<0){ return 0; @@ -139,6 +218,13 @@ public class ResXmlAttribute extends FixedBlockContainer { } return null; } + private ResXmlString getOrCreateResXmlString(String str){ + ResXmlStringPool stringPool=getStringPool(); + if(stringPool!=null){ + return stringPool.getOrCreate(str); + } + return null; + } private ResXmlStringPool getStringPool(){ ResXmlElement xmlElement=getParentResXmlElement(); if(xmlElement!=null){ @@ -153,7 +239,7 @@ public class ResXmlAttribute extends FixedBlockContainer { } return null; } - private ResXmlElement getParentResXmlElement(){ + public ResXmlElement getParentResXmlElement(){ Block parent=getParent(); while (parent!=null){ if(parent instanceof ResXmlElement){ diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlBlock.java old mode 100644 new mode 100755 index 51a9bd3..1e0ff56 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlBlock.java @@ -2,20 +2,94 @@ package com.reandroid.lib.arsc.chunk.xml; import com.reandroid.lib.arsc.chunk.ChunkType; import com.reandroid.lib.arsc.chunk.BaseChunk; +import com.reandroid.lib.arsc.container.SingleBlockContainer; +import com.reandroid.lib.arsc.header.HeaderBlock; +import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.pool.ResXmlStringPool; +import java.io.*; + public class ResXmlBlock extends BaseChunk { private final ResXmlStringPool mResXmlStringPool; private final ResXmlIDMap mResXmlIDMap; - private final ResXmlElement mResXmlElement; + private ResXmlElement mResXmlElement; + private final SingleBlockContainer mResXmlElementContainer; public ResXmlBlock() { super(ChunkType.XML,3); this.mResXmlStringPool=new ResXmlStringPool(true); this.mResXmlIDMap=new ResXmlIDMap(); this.mResXmlElement=new ResXmlElement(); + this.mResXmlElementContainer=new SingleBlockContainer<>(); + this.mResXmlElementContainer.setItem(mResXmlElement); addChild(mResXmlStringPool); addChild(mResXmlIDMap); - addChild(mResXmlElement); + addChild(mResXmlElementContainer); + } + @Override + public void onReadBytes(BlockReader reader) throws IOException { + HeaderBlock headerBlock=reader.readHeaderBlock(); + if(headerBlock==null){ + return; + } + BlockReader chunkReader=reader.create(reader.getPosition(), headerBlock.getChunkSize()); + ChunkType chunkType=headerBlock.getChunkType(); + if(chunkType==ChunkType.XML){ + getHeaderBlock().readBytes(chunkReader); + }else { + throw new IOException("Not ResXmlBlock: "+reader+", Header="+headerBlock); + } + while (chunkReader.isAvailable()){ + boolean readOk=readNext(chunkReader); + if(!readOk){ + break; + } + } + reader.offset(headerBlock.getChunkSize()); + chunkReader.close(); + onChunkLoaded(); + } + private boolean readNext(BlockReader reader) throws IOException { + if(!reader.isAvailable()){ + return false; + } + int position=reader.getPosition(); + HeaderBlock headerBlock=reader.readHeaderBlock(); + if(headerBlock==null){ + return false; + } + ChunkType chunkType=headerBlock.getChunkType(); + if(chunkType==ChunkType.STRING){ + mResXmlStringPool.readBytes(reader); + }else if(chunkType==ChunkType.XML_RESOURCE_MAP){ + mResXmlIDMap.readBytes(reader); + }else if(isElementChunk(chunkType)){ + mResXmlElementContainer.readBytes(reader); + return reader.isAvailable(); + }else { + throw new IOException("Unexpected chunk "+headerBlock); + } + return reader.isAvailable() && position!=reader.getPosition(); + } + private boolean isElementChunk(ChunkType chunkType){ + if(chunkType==ChunkType.XML_START_ELEMENT){ + return true; + } + if(chunkType==ChunkType.XML_END_ELEMENT){ + return true; + } + if(chunkType==ChunkType.XML_START_NAMESPACE){ + return true; + } + if(chunkType==ChunkType.XML_END_NAMESPACE){ + return true; + } + if(chunkType==ChunkType.XML_CDATA){ + return true; + } + if(chunkType==ChunkType.XML_LAST_CHUNK){ + return true; + } + return false; } public ResXmlStringPool getStringPool(){ return mResXmlStringPool; @@ -26,8 +100,76 @@ public class ResXmlBlock extends BaseChunk { public ResXmlElement getResXmlElement(){ return mResXmlElement; } + public void setResXmlElement(ResXmlElement resXmlElement){ + this.mResXmlElement=resXmlElement; + this.mResXmlElementContainer.setItem(resXmlElement); + } @Override protected void onChunkRefreshed() { } + @Override + public int onWriteBytes(OutputStream stream) throws IOException{ + int result=super.onWriteBytes(stream); + stream.flush(); + stream.close(); + return result; + } + public void readBytes(File file) throws IOException{ + BlockReader reader=new BlockReader(file); + super.readBytes(reader); + } + public void readBytes(InputStream inputStream) throws IOException{ + BlockReader reader=new BlockReader(inputStream); + super.readBytes(reader); + } + public final int writeBytes(File file) throws IOException{ + if(isNull()){ + throw new IOException("Can NOT save null block"); + } + File dir=file.getParentFile(); + if(dir!=null && !dir.exists()){ + dir.mkdirs(); + } + OutputStream outputStream=new FileOutputStream(file); + return super.writeBytes(outputStream); + } + + public static boolean isResXmlBlock(File file){ + if(file==null){ + return false; + } + try { + InputStream inputStream=new FileInputStream(file); + return isResXmlBlock(inputStream); + } catch (FileNotFoundException ignored) { + return false; + } + } + public static boolean isResXmlBlock(InputStream inputStream){ + try { + HeaderBlock headerBlock=BlockReader.readHeaderBlock(inputStream); + return isResXmlBlock(headerBlock); + } catch (IOException ignored) { + return false; + } + } + public static boolean isResXmlBlock(BlockReader blockReader){ + if(blockReader==null){ + return false; + } + try { + HeaderBlock headerBlock = blockReader.readHeaderBlock(); + return isResXmlBlock(headerBlock); + } catch (IOException ignored) { + return false; + } + } + public static boolean isResXmlBlock(HeaderBlock headerBlock){ + if(headerBlock==null){ + return false; + } + ChunkType chunkType=headerBlock.getChunkType(); + return chunkType==ChunkType.XML; + } } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java old mode 100644 new mode 100755 index 99747a8..fdef7e5 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlElement.java @@ -7,6 +7,7 @@ import com.reandroid.lib.arsc.container.FixedBlockContainer; import com.reandroid.lib.arsc.container.SingleBlockContainer; import com.reandroid.lib.arsc.header.HeaderBlock; import com.reandroid.lib.arsc.io.BlockReader; +import com.reandroid.lib.arsc.item.ResXmlString; import com.reandroid.lib.arsc.pool.ResXmlStringPool; @@ -38,6 +39,42 @@ public class ResXmlElement extends FixedBlockContainer { addChild(4, mEndElementContainer); addChild(5, mEndNamespaceList); } + public List searchElementsByTagName(String name){ + List results=new ArrayList<>(); + if(name==null){ + return results; + } + for(ResXmlElement child:listElements()){ + if(name.equals(child.getTag())||name.equals(child.getTagName())){ + results.add(child); + } + } + return results; + } + public ResXmlAttribute searchAttributeByName(String name){ + ResXmlStartElement startElement=getStartElement(); + if(startElement!=null){ + return startElement.searchAttributeByName(name); + } + return null; + } + public void setTag(String tag){ + ResXmlStringPool pool = getStringPool(); + if(pool==null){ + return; + } + ensureStartEndElement(); + ResXmlStartElement start=getStartElement(); + String prefix=null; + String name=tag; + int i=tag.lastIndexOf(':'); + if(i>=0){ + prefix=tag.substring(0,i); + i++; + name=tag.substring(i); + } + start.setName(name); + } public String getTagName(){ ResXmlStartElement startElement=getStartElement(); if(startElement!=null){ @@ -45,6 +82,27 @@ public class ResXmlElement extends FixedBlockContainer { } return null; } + public String getTag(){ + ResXmlStartElement startElement=getStartElement(); + if(startElement!=null){ + return startElement.getName(); + } + return null; + } + public String getTagUri(){ + ResXmlStartElement startElement=getStartElement(); + if(startElement!=null){ + return startElement.getUri(); + } + return null; + } + public String getTagPrefix(){ + ResXmlStartElement startElement=getStartElement(); + if(startElement!=null){ + return startElement.getPrefix(); + } + return null; + } public Collection listResXmlAttributes(){ ResXmlStartElement startElement=getStartElement(); if(startElement!=null){ @@ -182,6 +240,22 @@ public class ResXmlElement extends FixedBlockContainer { start.setResXmlEndElement(end); end.setResXmlStartElement(start); } + private void ensureStartEndElement(){ + ResXmlStartElement start=getStartElement(); + ResXmlEndElement end=getEndElement(); + if(start!=null && end!=null){ + return; + } + if(start==null){ + start=new ResXmlStartElement(); + setStartElement(start); + } + if(end==null){ + end=new ResXmlEndElement(); + setEndElement(end); + } + linkStartEndElement(); + } private void linkStartEndNameSpaces(){ if(!isNamespaceBalanced()){ return; @@ -227,8 +301,8 @@ public class ResXmlElement extends FixedBlockContainer { unBalancedFinish(reader); }else { readBytes(reader); + return; } - return; } linkStartEnd(); onFinishedRead(reader, headerBlock); @@ -245,7 +319,14 @@ public class ResXmlElement extends FixedBlockContainer { } private void onFinishedUnexpected(BlockReader reader) throws IOException{ - throw new IOException("Unexpected finish reading: "+reader.toString()); + StringBuilder builder=new StringBuilder(); + builder.append("Unexpected finish reading: reader=").append(reader.toString()); + HeaderBlock header = reader.readHeaderBlock(); + if(header!=null){ + builder.append(", next header="); + builder.append(header.toString()); + } + throw new IOException(builder.toString()); } private void onStartElement(BlockReader reader) throws IOException{ if(hasStartElement()){ @@ -298,9 +379,25 @@ public class ResXmlElement extends FixedBlockContainer { throw new IOException("Unbalanced namespace: start=" +mStartNamespaceList.size()+", end="+mEndNamespaceList.size()); } + if(!isElementBalanced()){ - throw new IOException("Unbalanced element: hasStart=" - +hasStartElement()+", hasEnd="+hasEndElement()); + // Should not happen unless corrupted file, auto corrected above + StringBuilder builder=new StringBuilder(); + builder.append("Unbalanced element: start="); + ResXmlStartElement startElement=getStartElement(); + if(startElement!=null){ + builder.append(startElement); + }else { + builder.append("null"); + } + builder.append(", end="); + ResXmlEndElement endElement=getEndElement(); + if(endElement!=null){ + builder.append(endElement); + }else { + builder.append("null"); + } + throw new IOException(builder.toString()); } } @Override @@ -324,4 +421,13 @@ public class ResXmlElement extends FixedBlockContainer { } return "NULL"; } + static ResXmlElement newResXmlElement(String tag){ + ResXmlElement resXmlElement=new ResXmlElement(); + ResXmlStartElement startElement=new ResXmlStartElement(); + resXmlElement.setStartElement(startElement); + ResXmlEndElement endElement=new ResXmlEndElement(); + resXmlElement.setEndElement(endElement); + resXmlElement.setTag(tag); + return resXmlElement; + } } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndElement.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndElement.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndNamespace.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlEndNamespace.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlIDMap.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlIDMap.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartElement.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartElement.java old mode 100644 new mode 100755 index 3b9bd74..db34249 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartElement.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartElement.java @@ -3,6 +3,7 @@ package com.reandroid.lib.arsc.chunk.xml; import com.reandroid.lib.arsc.chunk.ChunkType; import com.reandroid.lib.arsc.array.ResXmlAttributeArray; import com.reandroid.lib.arsc.item.IntegerItem; +import com.reandroid.lib.arsc.item.ResXmlString; import com.reandroid.lib.arsc.item.ShortItem; import java.util.Collection; @@ -31,6 +32,17 @@ public class ResXmlStartElement extends BaseXmlChunk { addChild(mClassAttribute); addChild(mAttributeArray); } + public ResXmlAttribute searchAttributeByName(String name){ + if(name==null){ + return null; + } + for(ResXmlAttribute attribute:listResXmlAttributes()){ + if(name.equals(attribute.getFullName()) || name.equals(attribute.getName())){ + return attribute; + } + } + return null; + } public String getTagName(){ String prefix=getPrefix(); String name=getName(); @@ -39,6 +51,9 @@ public class ResXmlStartElement extends BaseXmlChunk { } return prefix+":"+name; } + public void setName(String name){ + setString(name); + } public Collection listResXmlAttributes(){ return getResXmlAttributeArray().listItems(); } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartNamespace.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlStartNamespace.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlText.java b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlText.java old mode 100644 new mode 100755 index eda1c6e..f9ca582 --- a/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlText.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/xml/ResXmlText.java @@ -3,6 +3,7 @@ package com.reandroid.lib.arsc.chunk.xml; import com.reandroid.lib.arsc.chunk.ChunkType; import com.reandroid.lib.arsc.item.IntegerItem; import com.reandroid.lib.arsc.item.ResXmlString; +import com.reandroid.lib.arsc.pool.ResXmlStringPool; public class ResXmlText extends BaseXmlChunk { private final IntegerItem mReserved; @@ -24,6 +25,15 @@ public class ResXmlText extends BaseXmlChunk { public void setTextReference(int ref){ setNamespaceReference(ref); } + public void setText(String text){ + ResXmlStringPool stringPool=getStringPool(); + if(stringPool==null){ + return; + } + ResXmlString resXmlString = stringPool.getOrCreate(text); + int ref=resXmlString.getIndex(); + setTextReference(ref); + } @Override public String toString(){ String txt=getText(); diff --git a/src/main/java/com/reandroid/lib/arsc/container/BlockList.java b/src/main/java/com/reandroid/lib/arsc/container/BlockList.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/ExpandableBlockContainer.java b/src/main/java/com/reandroid/lib/arsc/container/ExpandableBlockContainer.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/FixedBlockContainer.java b/src/main/java/com/reandroid/lib/arsc/container/FixedBlockContainer.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java b/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/ResValueContainer.java b/src/main/java/com/reandroid/lib/arsc/container/ResValueContainer.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/SingleBlockContainer.java b/src/main/java/com/reandroid/lib/arsc/container/SingleBlockContainer.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java b/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/decoder/ResDecoder.java b/src/main/java/com/reandroid/lib/arsc/decoder/ResDecoder.java deleted file mode 100644 index 18e1cd9..0000000 --- a/src/main/java/com/reandroid/lib/arsc/decoder/ResDecoder.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.reandroid.lib.arsc.decoder; - -import com.reandroid.lib.arsc.base.Block; -import com.reandroid.lib.arsc.value.ResValueBag; -import com.reandroid.lib.arsc.value.ResValueBagItem; -import com.reandroid.lib.arsc.value.ValueType; - -public abstract class ResDecoder implements ResourceNameProvider{ - private final ResourceNameStore resourceNameStore; - public ResDecoder(ResourceNameStore store){ - this.resourceNameStore=store; - } - public String decodeAttribute(int attrResId, int rawValue){ - ResValueBag valueBag=getAttributeBag(attrResId); - if(valueBag==null){ - return null; - } - ResValueBagItem[] bagItems=valueBag.getBagItems(); - if(bagItems==null||bagItems.length==0){ - return null; - } - int len=bagItems.length; - ResValueBagItem firstAttrChild=bagItems[0]; - if(len==1){ - return null; - } - if(isFlagAttr(firstAttrChild)){ - for(int i=1;i resourceNameProviders; - public ResourceNameStore(){ - this.resourceNameProviders=new HashSet<>(); - } - public void addResourceNameProvider(ResourceNameProvider provider){ - if(provider!=null){ - resourceNameProviders.add(provider); - } - } - public Set getResourceNameProviders(){ - return resourceNameProviders; - } - @Override - public String getResourceFullName(int resId, boolean includePackageName) { - for(ResourceNameProvider provider:this.resourceNameProviders){ - String name=provider.getResourceFullName(resId, includePackageName); - if(name!=null){ - return name; - } - } - return null; - } - - @Override - public String getResourceName(int resId, boolean includePackageName) { - for(ResourceNameProvider provider:this.resourceNameProviders){ - String name=provider.getResourceName(resId, includePackageName); - if(name!=null){ - return name; - } - } - return null; - } - @Override - public ResValueBag getAttributeBag(int resId) { - for(ResourceNameProvider provider:this.resourceNameProviders){ - ResValueBag resValueBag=provider.getAttributeBag(resId); - if(resValueBag!=null){ - return resValueBag; - } - } - return null; - } -} diff --git a/src/main/java/com/reandroid/lib/arsc/decoder/ValueDecoder.java b/src/main/java/com/reandroid/lib/arsc/decoder/ValueDecoder.java old mode 100644 new mode 100755 index 362b388..423dade --- a/src/main/java/com/reandroid/lib/arsc/decoder/ValueDecoder.java +++ b/src/main/java/com/reandroid/lib/arsc/decoder/ValueDecoder.java @@ -1,8 +1,181 @@ package com.reandroid.lib.arsc.decoder; -import com.reandroid.lib.arsc.value.ValueType; +import com.reandroid.lib.arsc.chunk.PackageBlock; +import com.reandroid.lib.arsc.chunk.TableBlock; +import com.reandroid.lib.arsc.group.EntryGroup; +import com.reandroid.lib.arsc.item.TableString; +import com.reandroid.lib.arsc.pool.TableStringPool; +import com.reandroid.lib.arsc.value.*; +import com.reandroid.lib.arsc.value.attribute.AttributeBag; +import com.reandroid.lib.common.EntryStore; + +import java.util.Collection; +import java.util.Iterator; public class ValueDecoder { + + public static String decodeAttributeName(EntryStore store, PackageBlock currentPackage, int resourceId){ + EntryGroup entryGroup=searchEntryGroup(store, currentPackage, resourceId); + if(entryGroup==null){ + return String.format("@0x%08x", resourceId); + } + EntryBlock entryBlock=entryGroup.pickOne(); + if(entryBlock==null){ + return String.format("@0x%08x", resourceId); + } + String prefix=null; + if(currentPackage!=null){ + String name=currentPackage.getPackageName(); + String other=entryBlock.getPackageBlock().getPackageName(); + if(!name.equals(other)){ + prefix=other+":"; + } + } + String name=entryGroup.getSpecName(); + if(prefix!=null){ + name=prefix+name; + } + return name; + } + public static String decodeAttribute(EntryStore store, int attrResId, int rawValue){ + AttributeBag attributeBag = getAttributeBag(store, attrResId); + if(attributeBag==null){ + return null; + } + return attributeBag.decodeAttributeValue(store, rawValue); + } + + + public static String decodeEntryValue(EntryStore store, PackageBlock currentPackage, ValueType valueType, int data){ + if(store==null || currentPackage==null){ + return null; + } + if(valueType==ValueType.STRING){ + return decodeIntEntryString(currentPackage, data); + } + boolean is_reference=false; + boolean is_attribute=false; + if(valueType==ValueType.REFERENCE){ + if(data==0){ + return "@null"; + } + is_reference=true; + } + if(valueType==ValueType.ATTRIBUTE){ + if(data==0){ + return "?null"; + } + is_attribute=true; + } + if(is_reference || is_attribute){ + String ref=buildReferenceValue(store, valueType, currentPackage.getPackageName(), data); + if(ref!=null){ + return ref; + } + char atOrQues=is_reference?'@':'?'; + ref=atOrQues+toHexResourceId(data); + return ref; + } + return decode(valueType, data); + } + public static String decodeIntEntry(EntryStore store, EntryBlock entryBlock){ + if(entryBlock==null){ + return null; + } + BaseResValue baseResValue = entryBlock.getResValue(); + if(!(baseResValue instanceof ResValueInt)){ + return null; + } + ResValueInt resValueInt=(ResValueInt)baseResValue; + return decodeIntEntry(store, resValueInt); + } + public static String decodeIntEntry(EntryStore store, ResValueInt resValueInt){ + if(resValueInt==null){ + return null; + } + EntryBlock parentEntry=resValueInt.getEntryBlock(); + if(parentEntry==null){ + return null; + } + ValueType valueType=resValueInt.getValueType(); + int data=resValueInt.getData(); + return decodeIntEntry(store, parentEntry, valueType, data); + } + public static String decodeIntEntry(EntryStore store, ResValueBagItem bagItem){ + if(bagItem==null){ + return null; + } + EntryBlock parentEntry=bagItem.getEntryBlock(); + if(parentEntry==null){ + return null; + } + ValueType valueType=bagItem.getValueType(); + int data=bagItem.getData(); + return decodeIntEntry(store, parentEntry, valueType, data); + } + public static String decodeIntEntry(EntryStore store, EntryBlock parentEntry, ValueType valueType, int data){ + if(valueType==ValueType.NULL){ + return "@empty"; + } + if(valueType==ValueType.STRING){ + return decodeIntEntryString(parentEntry, data); + } + boolean is_reference=false; + boolean is_attribute=false; + if(valueType==ValueType.REFERENCE){ + if(data==0){ + return "@null"; + } + is_reference=true; + } + if(valueType==ValueType.ATTRIBUTE){ + if(data==0){ + return "?null"; + } + is_attribute=true; + } + if(is_reference || is_attribute){ + String ref=buildReferenceValue(store, parentEntry, valueType, data); + if(ref!=null){ + return ref; + } + char atOrQues=is_reference?'@':'?'; + ref=atOrQues+toHexResourceId(data); + return ref; + } + return decode(valueType, data); + } + public static String buildReferenceValue(EntryStore store, EntryBlock entryBlock){ + if(entryBlock==null){ + return null; + } + BaseResValue baseResValue = entryBlock.getResValue(); + if(!(baseResValue instanceof ResValueInt)){ + return null; + } + ResValueInt resValueInt=(ResValueInt)baseResValue; + int resourceId=resValueInt.getData(); + ValueType valueType=resValueInt.getValueType(); + return buildReferenceValue(store, entryBlock, valueType, resourceId); + } + public static String decode(EntryStore entryStore, int currentPackageId, int nameResourceId, ValueType valueType, int rawVal){ + String currPackageName=getPackageName(entryStore, currentPackageId); + String result=buildReferenceValue(entryStore, valueType, currPackageName, rawVal); + if(result!=null){ + return result; + } + if(valueType==ValueType.STRING){ + // Should not happen the string could be in ResXmlBlock, but if you are lazy here it goes + return decodeString(entryStore, currentPackageId, rawVal); + } + if(valueType==ValueType.FIRST_INT||valueType==ValueType.INT_HEX){ + result=decodeAttribute(entryStore, nameResourceId, rawVal); + if(result!=null){ + return result; + } + } + return decode(valueType, rawVal); + } public static String decode(ValueType valueType, int data){ if(valueType==null){ return null; @@ -30,6 +203,229 @@ public class ValueDecoder { } return null; } + public static String buildReference(String currentPackageName, + String referredPackageName, + char atOrQues, + String typeName, + String resourceName){ + StringBuilder builder=new StringBuilder(); + if(atOrQues!=0){ + builder.append(atOrQues); + } + if(!isEqualString(currentPackageName, referredPackageName)){ + if(!isEmpty(currentPackageName) && !isEmpty(referredPackageName)){ + builder.append(referredPackageName); + if(!referredPackageName.endsWith(":")){ + builder.append(':'); + } + } + } + if(!isEmpty(typeName)){ + builder.append(typeName); + builder.append('/'); + } + builder.append(resourceName); + return builder.toString(); + } + + private static String buildReferenceValue(EntryStore store, EntryBlock entryBlock, ValueType valueType, int resourceId){ + if(entryBlock==null){ + return null; + } + EntryGroup value=searchEntryGroup(store, entryBlock, resourceId); + if(value==null){ + return null; + } + return buildReferenceValue(valueType, entryBlock, value); + } + private static String buildReferenceValue(ValueType valueType, EntryBlock entryBlock, EntryGroup value){ + char atOrQues; + if(valueType==ValueType.REFERENCE){ + atOrQues='@'; + }else if(valueType==ValueType.ATTRIBUTE){ + atOrQues='?'; + }else { + atOrQues=0; + } + String currentPackageName=getPackageName(entryBlock); + String referredPackageName=getPackageName(value); + String typeName=value.getTypeName(); + String name=value.getSpecName(); + return buildReference(currentPackageName, referredPackageName, atOrQues, typeName, name); + } + private static String buildReferenceValue(EntryStore entryStore, ValueType valueType, String currentPackageName, int resourceId){ + char atOrQues; + if(valueType==ValueType.REFERENCE){ + atOrQues='@'; + }else if(valueType==ValueType.ATTRIBUTE){ + atOrQues='?'; + }else { + return null; + } + EntryGroup value=null; + if(entryStore!=null){ + value=entryStore.getEntryGroup(resourceId); + } + if(value==null){ + return atOrQues+toHexResourceId(resourceId); + } + String referredPackageName=getPackageName(value); + String typeName=value.getTypeName(); + String name=value.getSpecName(); + return buildReference(currentPackageName, referredPackageName, atOrQues, typeName, name); + } + private static String getPackageName(EntryStore entryStore, int packageOrResourceId){ + if(entryStore==null || packageOrResourceId==0){ + return null; + } + int pkgId=(packageOrResourceId>>24)&0xFF; + if(pkgId==0){ + pkgId=packageOrResourceId; + } + Collection allPkg = entryStore.getPackageBlocks((byte) pkgId); + if(allPkg==null){ + return null; + } + for(PackageBlock packageBlock:allPkg){ + String name=packageBlock.getPackageName(); + if(name!=null){ + return name; + } + } + return null; + } + private static String getPackageName(EntryGroup entryGroup){ + if(entryGroup==null){ + return null; + } + return getPackageName(entryGroup.pickOne()); + } + private static String getPackageName(EntryBlock entryBlock){ + if(entryBlock==null){ + return null; + } + PackageBlock packageBlock=entryBlock.getPackageBlock(); + if(packageBlock==null){ + return null; + } + return packageBlock.getPackageName(); + } + private static EntryGroup searchEntryGroup(EntryStore store, EntryBlock entryBlock, int resourceId){ + EntryGroup entryGroup=searchEntryGroup(entryBlock, resourceId); + if(entryGroup!=null){ + return entryGroup; + } + if(store==null){ + return null; + } + return store.getEntryGroup(resourceId); + } + private static EntryGroup searchEntryGroup(EntryBlock entryBlock, int resourceId){ + if(entryBlock==null){ + return null; + } + PackageBlock packageBlock=entryBlock.getPackageBlock(); + if(packageBlock==null){ + return null; + } + TableBlock tableBlock=packageBlock.getTableBlock(); + if(tableBlock==null){ + return null; + } + for(PackageBlock pkg:tableBlock.listPackages()){ + EntryGroup entryGroup=pkg.getEntryGroup(resourceId); + if(entryGroup!=null){ + return entryGroup; + } + } + return null; + } + private static EntryGroup searchEntryGroup(EntryStore store, PackageBlock packageBlock, int resourceId){ + if(packageBlock!=null){ + TableBlock tableBlock=packageBlock.getTableBlock(); + if(tableBlock!=null){ + for(PackageBlock pkg:tableBlock.listPackages()){ + EntryGroup entryGroup=pkg.getEntryGroup(resourceId); + if(entryGroup!=null){ + return entryGroup; + } + } + } + } + if(store!=null){ + return store.getEntryGroup(resourceId); + } + return null; + } + private static String decodeIntEntryString(EntryBlock entryBlock, int data){ + if(entryBlock==null){ + return null; + } + PackageBlock packageBlock=entryBlock.getPackageBlock(); + if(packageBlock==null){ + return null; + } + TableBlock tableBlock=packageBlock.getTableBlock(); + if(tableBlock==null){ + return null; + } + TableStringPool pool = tableBlock.getTableStringPool(); + TableString tableString=pool.get(data); + if(tableString==null){ + return null; + } + return tableString.getHtml(); + } + private static String decodeString(EntryStore entryStore, int packageOrResourceId, int stringRef){ + if(entryStore==null||packageOrResourceId==0){ + return null; + } + int pkgId=(packageOrResourceId>>24)&0xFF; + if(pkgId==0){ + pkgId=packageOrResourceId; + } + Collection allPkg = entryStore.getPackageBlocks((byte) pkgId); + if(allPkg==null){ + return null; + } + TableString tableString=null; + for(PackageBlock packageBlock:allPkg){ + TableBlock tableBlock=packageBlock.getTableBlock(); + if(tableBlock==null){ + continue; + } + TableString ts=tableBlock.getTableStringPool().get(stringRef); + if(ts==null){ + continue; + } + if(tableString==null){ + tableString=ts; + }else { + // Duplicate result, could be from split apks + return null; + } + } + if(tableString!=null){ + return tableString.getHtml(); + } + return null; + } + private static String decodeIntEntryString(PackageBlock packageBlock, int data){ + if(packageBlock==null){ + return null; + } + TableBlock tableBlock=packageBlock.getTableBlock(); + if(tableBlock==null){ + return null; + } + TableStringPool pool = tableBlock.getTableStringPool(); + TableString tableString=pool.get(data); + if(tableString==null){ + return null; + } + return tableString.getHtml(); + } + private static String decodeHex(int rawVal){ return String.format("0x%x", rawVal); } @@ -99,6 +495,104 @@ public class ValueDecoder { } return 0; } + private static String getResourceName(EntryStore store, EntryBlock entryBlock, int resourceId){ + if(entryBlock!=null){ + EntryGroup group=searchEntryGroup(entryBlock, resourceId); + if(group!=null){ + String name=group.getSpecName(); + if(name!=null){ + return name; + } + } + } + if(store==null){ + return null; + } + Collection foundGroups = store.getEntryGroups(resourceId); + return pickResourceName(foundGroups); + } + private static String pickResourceName(Collection groups){ + if(groups==null){ + return null; + } + for(EntryGroup entryGroup:groups){ + String name=entryGroup.getSpecName(); + if(name!=null){ + return name; + } + } + return null; + } + private static AttributeBag getAttributeBag(EntryStore store, int resourceId){ + ResValueBag resValueBag=getAttributeValueBag(store, resourceId); + if(resValueBag==null){ + return null; + } + return AttributeBag.create(resValueBag); + } + private static ResValueBag getAttributeValueBag(EntryStore store, int resourceId){ + if(store==null){ + return null; + } + Collection foundGroups = store.getEntryGroups(resourceId); + ResValueBag best=null; + for(EntryGroup group:foundGroups){ + ResValueBag valueBag= getAttributeValueBag(group); + best=chooseBest(best, valueBag); + } + return best; + } + private static ResValueBag getAttributeValueBag(EntryGroup entryGroup){ + if(entryGroup==null){ + return null; + } + ResValueBag best=null; + Iterator iterator=entryGroup.iterator(true); + while (iterator.hasNext()){ + EntryBlock entryBlock=iterator.next(); + ResValueBag valueBag= getAttributeValueBag(entryBlock); + best=chooseBest(best, valueBag); + } + return best; + } + private static ResValueBag getAttributeValueBag(EntryBlock entryBlock){ + if(entryBlock==null){ + return null; + } + BaseResValue baseResValue = entryBlock.getResValue(); + if(baseResValue instanceof ResValueBag){ + return (ResValueBag) baseResValue; + } + return null; + } + private static ResValueBag chooseBest(ResValueBag valueBag1, ResValueBag valueBag2){ + if(valueBag1==null){ + return valueBag2; + } + if(valueBag2==null){ + return valueBag1; + } + if(valueBag2.getCount()>valueBag1.getCount()){ + return valueBag2; + } + return valueBag1; + } + private static String toHexResourceId(int resourceId){ + return String.format("0x%08x", resourceId); + } + private static boolean isEqualString(String str1, String str2){ + if(isEmpty(str1)){ + return isEmpty(str2); + } + return str1.equals(str2); + } + private static boolean isEmpty(String str){ + if(str==null){ + return true; + } + str=str.trim(); + return str.length()==0; + } private static final String[] DIMENSION_UNIT_STRS = new String[] { "px", "dip", "sp", "pt", "in", "mm" }; private static final float MANTISSA_MULT = 1.0f / (1 << 8); diff --git a/src/main/java/com/reandroid/lib/arsc/decoder/xml/ResXmlDecoder.java b/src/main/java/com/reandroid/lib/arsc/decoder/xml/ResXmlDecoder.java deleted file mode 100644 index c44519a..0000000 --- a/src/main/java/com/reandroid/lib/arsc/decoder/xml/ResXmlDecoder.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.reandroid.lib.arsc.decoder.xml; - -import com.reandroid.lib.arsc.chunk.xml.ResXmlAttribute; -import com.reandroid.lib.arsc.chunk.xml.ResXmlBlock; -import com.reandroid.lib.arsc.chunk.xml.ResXmlElement; -import com.reandroid.lib.arsc.chunk.xml.ResXmlText; -import com.reandroid.lib.arsc.decoder.ResDecoder; -import com.reandroid.lib.arsc.decoder.ResourceNameStore; -import com.reandroid.lib.arsc.decoder.ValueDecoder; -import com.reandroid.lib.arsc.value.ValueType; - -import java.util.Collection; -import java.util.List; - -public class ResXmlDecoder extends ResDecoder { - private byte mCurrentPackageId; - public ResXmlDecoder(ResourceNameStore store){ - super(store); - } - private String decodeToString(ResXmlBlock resXmlBlock){ - StringBuilder builder=new StringBuilder(); - builder.append(""); - builder.append("\n"); - String body=decodeToString(resXmlBlock.getResXmlElement()); - builder.append(body); - return builder.toString(); - } - private String decodeToString(ResXmlElement resXmlElement){ - if(resXmlElement==null){ - return null; - } - StringBuilder builder=new StringBuilder(); - for(int i=0;i childElements=resXmlElement.listElements(); - if(!useEndTag){ - useEndTag=childElements.size()>0; - } - if(!useEndTag){ - builder.append("/>"); - return builder.toString(); - } - builder.append(">"); - if(text!=null){ - builder.append(text); - } - for(ResXmlElement child:childElements){ - builder.append("\n"); - String txtChild=decodeToString(child); - builder.append(txtChild); - } - if(childElements.size()>0){ - builder.append("\n"); - for(int i=0;i"); - return builder.toString(); - } - private String decodeAttributeValue(ResXmlAttribute attribute){ - ValueType valueType=attribute.getValueType(); - if(valueType==ValueType.FIRST_INT || valueType==ValueType.INT_HEX){ - int nameId=attribute.getNameResourceID(); - String val=decodeAttribute(nameId, attribute.getRawValue()); - if(val!=null){ - return val; - } - } - if(valueType==ValueType.REFERENCE){ - int id=attribute.getRawValue(); - byte pkgId= (byte) ((id>>24)&0xFF); - return getResourceFullName(id, pkgId!=getCurrentPackageId()); - } - if(valueType==ValueType.STRING){ - return attribute.getValueString(); - } - String val= ValueDecoder.decode(valueType, attribute.getRawValue()); - if(val!=null){ - return val; - } - return attribute.getRawValue()+"["+valueType+"]"; - } - private String decodeAttributeFullName(ResXmlAttribute attribute){ - StringBuilder builder=new StringBuilder(); - String prefix=getRealAttributeNamePrefix(attribute); - String name=getRealAttributeName(attribute); - if(prefix!=null&&!name.contains(":")){ - builder.append(prefix); - builder.append(':'); - } - builder.append(name); - return builder.toString(); - } - private String getRealAttributeNamePrefix(ResXmlAttribute attribute){ - /* TODO readjust wrong/stripped attribute name prefix prefix; */ - return attribute.getNamePrefix(); - } - private String getRealAttributeName(ResXmlAttribute attribute){ - int nameId=attribute.getNameResourceID(); - ResourceNameStore store=getResourceNameStore(); - byte pkgId= (byte) ((nameId>>24)&0xFF); - String name=store.getResourceName(nameId, getCurrentPackageId()!=pkgId); - if(name!=null){ - return name; - } - return attribute.getName(); - } - private byte getCurrentPackageId(){ - return mCurrentPackageId; - } - @Override - public String decode(byte currentPackageId, ResXmlBlock resXmlBlock) { - this.mCurrentPackageId=currentPackageId; - return decodeToString(resXmlBlock); - } -} diff --git a/src/main/java/com/reandroid/lib/arsc/group/EntryGroup.java b/src/main/java/com/reandroid/lib/arsc/group/EntryGroup.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/group/ItemGroup.java b/src/main/java/com/reandroid/lib/arsc/group/ItemGroup.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/group/StringGroup.java b/src/main/java/com/reandroid/lib/arsc/group/StringGroup.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/header/HeaderBlock.java b/src/main/java/com/reandroid/lib/arsc/header/HeaderBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/io/BlockLoad.java b/src/main/java/com/reandroid/lib/arsc/io/BlockLoad.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/io/BlockReader.java b/src/main/java/com/reandroid/lib/arsc/io/BlockReader.java old mode 100644 new mode 100755 index 45e32d3..ba8d334 --- a/src/main/java/com/reandroid/lib/arsc/io/BlockReader.java +++ b/src/main/java/com/reandroid/lib/arsc/io/BlockReader.java @@ -324,4 +324,15 @@ public class BlockReader extends InputStream { System.arraycopy(arr2, 0, result, arr1.length, len); return result; } + public static HeaderBlock readHeaderBlock(File file) throws IOException{ + InputStream inputStream=new FileInputStream(file); + return readHeaderBlock(inputStream); + } + public static HeaderBlock readHeaderBlock(InputStream inputStream) throws IOException{ + byte[] buffer=new byte[8]; + inputStream.read(buffer); + inputStream.close(); + BlockReader reader=new BlockReader(buffer); + return reader.readHeaderBlock(); + } } diff --git a/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java b/src/main/java/com/reandroid/lib/arsc/item/BlockItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ByteArray.java b/src/main/java/com/reandroid/lib/arsc/item/ByteArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ByteItem.java b/src/main/java/com/reandroid/lib/arsc/item/ByteItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/IntegerArray.java b/src/main/java/com/reandroid/lib/arsc/item/IntegerArray.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/IntegerItem.java b/src/main/java/com/reandroid/lib/arsc/item/IntegerItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/PackageName.java b/src/main/java/com/reandroid/lib/arsc/item/PackageName.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ReferenceItem.java b/src/main/java/com/reandroid/lib/arsc/item/ReferenceItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ResXmlID.java b/src/main/java/com/reandroid/lib/arsc/item/ResXmlID.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ResXmlString.java b/src/main/java/com/reandroid/lib/arsc/item/ResXmlString.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/ShortItem.java b/src/main/java/com/reandroid/lib/arsc/item/ShortItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/SpecString.java b/src/main/java/com/reandroid/lib/arsc/item/SpecString.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/StringItem.java b/src/main/java/com/reandroid/lib/arsc/item/StringItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/StyleItem.java b/src/main/java/com/reandroid/lib/arsc/item/StyleItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/TableString.java b/src/main/java/com/reandroid/lib/arsc/item/TableString.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/item/TypeString.java b/src/main/java/com/reandroid/lib/arsc/item/TypeString.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/model/StyleSpanInfo.java b/src/main/java/com/reandroid/lib/arsc/model/StyleSpanInfo.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/pool/BaseStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/BaseStringPool.java old mode 100644 new mode 100755 index f78c0bd..d2e12aa --- a/src/main/java/com/reandroid/lib/arsc/pool/BaseStringPool.java +++ b/src/main/java/com/reandroid/lib/arsc/pool/BaseStringPool.java @@ -9,6 +9,7 @@ import com.reandroid.lib.arsc.group.StringGroup; import com.reandroid.lib.arsc.io.BlockLoad; import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.item.*; +import com.reandroid.lib.arsc.pool.builder.StyleBuilder; import java.io.IOException; import java.util.*; @@ -63,6 +64,16 @@ public abstract class BaseStringPool extends BaseChunk imp mUniqueMap=new HashMap<>(); } + public void recreateStyles(){ + StyleArray styleArray = getStyleArray(); + //styleArray.clearChildes(); + StringArray stringArray=getStringsArray(); + for(T stringItem:stringArray.listItems()){ + if(StyleBuilder.hasStyle(stringItem)){ + StyleBuilder.buildStyle(stringItem); + } + } + } public List removeUnusedStrings(){ return getStringsArray().removeUnusedStrings(); } diff --git a/src/main/java/com/reandroid/lib/arsc/pool/PoolType.java b/src/main/java/com/reandroid/lib/arsc/pool/PoolType.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/pool/ResXmlStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/ResXmlStringPool.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/pool/SpecStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/SpecStringPool.java old mode 100644 new mode 100755 index 1b75f8e..df11e7a --- a/src/main/java/com/reandroid/lib/arsc/pool/SpecStringPool.java +++ b/src/main/java/com/reandroid/lib/arsc/pool/SpecStringPool.java @@ -15,4 +15,7 @@ public class SpecStringPool extends BaseStringPool { StringArray newInstance(IntegerArray offsets, IntegerItem itemCount, IntegerItem itemStart, boolean is_utf8) { return new SpecStringArray(offsets, itemCount, itemStart, is_utf8); } + @Override + public void recreateStyles(){ + } } diff --git a/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/TableStringPool.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/pool/TypeStringPool.java b/src/main/java/com/reandroid/lib/arsc/pool/TypeStringPool.java old mode 100644 new mode 100755 index bbcb455..db1cdf7 --- a/src/main/java/com/reandroid/lib/arsc/pool/TypeStringPool.java +++ b/src/main/java/com/reandroid/lib/arsc/pool/TypeStringPool.java @@ -17,4 +17,7 @@ public class TypeStringPool extends BaseStringPool { StringArray newInstance(IntegerArray offsets, IntegerItem itemCount, IntegerItem itemStart, boolean is_utf8) { return new TypeStringArray(offsets, itemCount, itemStart, is_utf8); } + @Override + public void recreateStyles(){ + } } diff --git a/src/main/java/com/reandroid/lib/arsc/pool/builder/SpannedText.java b/src/main/java/com/reandroid/lib/arsc/pool/builder/SpannedText.java new file mode 100755 index 0000000..52b1c02 --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/pool/builder/SpannedText.java @@ -0,0 +1,16 @@ +package com.reandroid.lib.arsc.pool.builder; + +import java.util.List; + +public class SpannedText { + private String mLeftText; + private String mTag; + private String mText; + private String mRightText; + private List mChildes; + public SpannedText(){ + } + public void parse(int start, String text){ + int i=text.indexOf('<', start); + } +} diff --git a/src/main/java/com/reandroid/lib/arsc/pool/builder/StyleBuilder.java b/src/main/java/com/reandroid/lib/arsc/pool/builder/StyleBuilder.java new file mode 100755 index 0000000..8830362 --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/pool/builder/StyleBuilder.java @@ -0,0 +1,29 @@ +package com.reandroid.lib.arsc.pool.builder; + +import com.reandroid.lib.arsc.item.StringItem; + +import java.util.regex.Pattern; + +public class StyleBuilder { + public static void buildStyle(StringItem stringItem){ + System.out.println(stringItem.toString()); + } + public static boolean hasStyle(StringItem stringItem){ + if(stringItem==null){ + return false; + } + return hasStyle(stringItem.getHtml()); + } + public static boolean hasStyle(String text){ + if(text==null){ + return false; + } + int i=text.indexOf('<'); + if(i<0){ + return false; + } + i=text.indexOf('>'); + return i>1; + } + private static final Pattern PATTERN_STYLE=Pattern.compile(""); +} diff --git a/src/main/java/com/reandroid/lib/arsc/util/FrameworkTable.java b/src/main/java/com/reandroid/lib/arsc/util/FrameworkTable.java old mode 100644 new mode 100755 index 4521fce..66c9cd6 --- a/src/main/java/com/reandroid/lib/arsc/util/FrameworkTable.java +++ b/src/main/java/com/reandroid/lib/arsc/util/FrameworkTable.java @@ -1,9 +1,11 @@ package com.reandroid.lib.arsc.util; +import com.reandroid.lib.arsc.chunk.ChunkType; import com.reandroid.lib.arsc.chunk.PackageBlock; import com.reandroid.lib.arsc.chunk.TableBlock; import com.reandroid.lib.arsc.chunk.TypeBlock; import com.reandroid.lib.arsc.group.EntryGroup; +import com.reandroid.lib.arsc.header.HeaderBlock; import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.item.ReferenceItem; import com.reandroid.lib.arsc.item.TableString; @@ -15,9 +17,42 @@ import java.util.*; public class FrameworkTable extends TableBlock { + private String mFrameworkTitle; + private String mFrameworkName; + private String mFrameworkVersion; public FrameworkTable(){ super(); } + public String getFrameworkTitle(){ + if(mFrameworkTitle==null){ + mFrameworkTitle=loadProperty(PROP_TITLE); + } + return mFrameworkTitle; + } + public String getFrameworkName(){ + if(mFrameworkName==null){ + mFrameworkName=loadProperty(PROP_NAME); + } + return mFrameworkName; + } + public String getFrameworkVersion(){ + if(mFrameworkVersion==null){ + mFrameworkVersion=loadProperty(PROP_VERSION); + } + return mFrameworkVersion; + } + private void setFrameworkTitle(String value){ + mFrameworkTitle=null; + writeProperty(PROP_TITLE, value); + } + public void setFrameworkName(String value){ + mFrameworkName=null; + writeProperty(PROP_NAME, value); + } + public void setFrameworkVersion(String value){ + mFrameworkVersion=null; + writeProperty(PROP_VERSION, value); + } public int writeTable(File resourcesArscFile) throws IOException{ File dir=resourcesArscFile.getParentFile(); if(dir!=null && !dir.exists()){ @@ -49,7 +84,7 @@ public class FrameworkTable extends TableBlock { super.onReadBytes(reader); reader.close(); } - public void optimize(){ + public void optimize(String frameworkName, String frameworkVersion){ Map groupMap=scanAllEntryGroups(); for(EntryGroup group:groupMap.values()){ List entryBlockList=getEntriesToRemove(group); @@ -60,6 +95,9 @@ public class FrameworkTable extends TableBlock { pkg.refresh(); } optimizeTableString(); + setFrameworkTitle(TITLE_STRING); + setFrameworkName(frameworkName); + setFrameworkVersion(frameworkVersion); refresh(); } private void optimizeTableString(){ @@ -75,13 +113,14 @@ public class FrameworkTable extends TableBlock { } private void shrinkTableString(){ TableStringPool tableStringPool=getTableStringPool(); - TableString zero=tableStringPool.get(0); - zero.set("Framework string table"); + tableStringPool.getStringsArray().ensureSize(1); + TableString title=tableStringPool.get(0); + title.set(PROP_TITLE+":"+TITLE_STRING); for(TableString tableString:tableStringPool.getStringsArray().listItems()){ - if(tableString==zero){ + if(tableString==title){ continue; } - shrinkTableString(zero, tableString); + shrinkTableString(title, tableString); } tableStringPool.refresh(); } @@ -141,4 +180,106 @@ public class FrameworkTable extends TableBlock { } return results; } + private TableString writeProperty(String name, String value){ + if(!name.endsWith(":")){ + name=name+":"; + } + if(value==null){ + value=""; + } + if(!value.startsWith(name)){ + value=name+value; + } + TableString tableString=loadPropertyString(name); + if(tableString!=null){ + tableString.set(value); + }else { + TableStringPool tableStringPool=getTableStringPool(); + tableString=tableStringPool.getOrCreate(value); + } + return tableString; + } + private String loadProperty(String name){ + if(name==null){ + return null; + } + if(!name.endsWith(":")){ + name=name+":"; + } + TableString tableString=loadPropertyString(name); + if(tableString==null){ + return null; + } + String str=tableString.get().trim(); + return str.substring(name.length()); + } + private TableString loadPropertyString(String name){ + if(name==null){ + return null; + } + if(!name.endsWith(":")){ + name=name+":"; + } + TableStringPool tableStringPool=getTableStringPool(); + int max=PROP_COUNT; + for(int i=0;i allPkg = listPackages(); + builder.append("\n PACKAGES=").append(allPkg.size()); + for(PackageBlock packageBlock:allPkg){ + builder.append("\n "); + builder.append(String.format("0x%02x", packageBlock.getPackageId())); + builder.append(":").append(packageBlock.getPackageName()); + } + return builder.toString(); + } + private static final String TITLE_STRING="Framework table"; + private static final String PROP_TITLE="TITLE"; + private static final String PROP_NAME="NAME"; + private static final String PROP_VERSION="VERSION"; + private static final int PROP_COUNT=10; } diff --git a/src/main/java/com/reandroid/lib/arsc/value/BaseResValue.java b/src/main/java/com/reandroid/lib/arsc/value/BaseResValue.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/BaseResValueItem.java b/src/main/java/com/reandroid/lib/arsc/value/BaseResValueItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java b/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java b/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResConfig.java b/src/main/java/com/reandroid/lib/arsc/value/ResConfig.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java b/src/main/java/com/reandroid/lib/arsc/value/ResConfigHelper.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResValueBag.java b/src/main/java/com/reandroid/lib/arsc/value/ResValueBag.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResValueBagItem.java b/src/main/java/com/reandroid/lib/arsc/value/ResValueBagItem.java old mode 100644 new mode 100755 index 9026d7b..f80bc79 --- a/src/main/java/com/reandroid/lib/arsc/value/ResValueBagItem.java +++ b/src/main/java/com/reandroid/lib/arsc/value/ResValueBagItem.java @@ -1,6 +1,8 @@ package com.reandroid.lib.arsc.value; +import com.reandroid.lib.arsc.chunk.PackageBlock; import com.reandroid.lib.arsc.item.ReferenceItem; +import com.reandroid.lib.arsc.pool.SpecStringPool; public class ResValueBagItem extends BaseResValueItem{ @@ -68,14 +70,54 @@ public class ResValueBagItem extends BaseResValueItem{ if(data==old){ return; } + beforeDataValueChanged(); + setInt(OFFSET_DATA, data); + afterDataValueChanged(); + } + private void beforeDataValueChanged(){ if(getValueType()==ValueType.STRING){ removeTableReference(); } - setInt(OFFSET_DATA, data); + } + private void afterDataValueChanged(){ if(getValueType()==ValueType.STRING){ addTableReference(getTableStringReference()); } } + public short getIdHigh(){ + return getShort(OFFSET_ID+2); + } + public short getIdLow(){ + return getShort(OFFSET_ID); + } + public void setIdHigh(short val){ + setShort(OFFSET_ID+2, val); + } + public void setIdLow(short val){ + setShort(OFFSET_ID, val); + } + public short getDataHigh(){ + return getShort(OFFSET_DATA+2); + } + public short getDataLow(){ + return getShort(OFFSET_DATA); + } + public void setDataHigh(short val){ + if(val==getDataHigh()){ + return; + } + beforeDataValueChanged(); + setShort(OFFSET_DATA+2, val); + afterDataValueChanged(); + } + public void setDataLow(short val){ + if(val==getDataLow()){ + return; + } + beforeDataValueChanged(); + setShort(OFFSET_DATA+2, val); + afterDataValueChanged(); + } @Override public String toString(){ diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResValueInt.java b/src/main/java/com/reandroid/lib/arsc/value/ResValueInt.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ResValueItem.java b/src/main/java/com/reandroid/lib/arsc/value/ResValueItem.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/ValueType.java b/src/main/java/com/reandroid/lib/arsc/value/ValueType.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeBag.java b/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeBag.java new file mode 100755 index 0000000..0ce90e4 --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/value/attribute/AttributeBag.java @@ -0,0 +1,194 @@ +package com.reandroid.lib.arsc.value.attribute; + +import com.reandroid.lib.arsc.value.EntryBlock; +import com.reandroid.lib.arsc.value.ResValueBag; +import com.reandroid.lib.common.EntryStore; + + +public class AttributeBag { + private final AttributeBagItem[] mBagItems; + public AttributeBag(AttributeBagItem[] bagItems){ + this.mBagItems=bagItems; + } + public String decodeAttributeValue(EntryStore entryStore, int attrValue){ + AttributeBagItem[] bagItems=searchValue(attrValue); + return AttributeBagItem.toString(entryStore, bagItems); + } + public String decodeValueType(){ + return AttributeValueType.toString(getValueTypes()); + } + public AttributeBagItem[] searchValue(int attrValue){ + if(isFlag()){ + return searchFlagValue(attrValue); + } + AttributeBagItem item=searchEnumValue(attrValue); + if(item!=null){ + return new AttributeBagItem[]{item}; + } + return null; + } + private AttributeBagItem searchEnumValue(int attrValue){ + AttributeBagItem[] bagItems= getBagItems(); + for(AttributeBagItem item:bagItems){ + if(item.isType()){ + continue; + } + int data=item.getData(); + if(attrValue==data){ + return item; + } + } + return null; + } + + private AttributeBagItem[] searchFlagValue(int attrValue){ + AttributeBagItem[] bagItems= getBagItems(); + int len=bagItems.length; + AttributeBagItem[] foundBags = new AttributeBagItem[len]; + for(int i=0;i=0) { + foundBags[index] = item; + } + } + return removeNull(foundBags); + } + + private int indexOf(AttributeBagItem[] foundFlag, int data) { + for (int i = 0; i < foundFlag.length; i++) { + AttributeBagItem item=foundFlag[i]; + if(item==null){ + return i; + } + int flag=item.getData(); + if(flag==0){ + return i; + } + if ((flag & data) == data) { + return -1; + } + if ((flag & data) == flag) { + return i; + } + } + return -1; + } + + private AttributeBagItem[] removeNull(AttributeBagItem[] bagItems){ + int count=countNonNull(bagItems); + if(count==0){ + return null; + } + AttributeBagItem[] results=new AttributeBagItem[count]; + int index=0; + int len=bagItems.length; + for(int i=0;i results=new ArrayList<>(); + AttributeValueType[] all=values(); + for(AttributeValueType vt:all){ + byte b=vt.mByte; + if(b==val){ + results.clear(); + results.add(vt); + break; + } + if((val&b)!=0 && vt!=ANY){ + results.add(vt); + } + } + return results.toArray(new AttributeValueType[0]); + } + public static AttributeValueType[] valuesOf(String valuesStr){ + if(valuesStr==null){ + return null; + } + String[] valueNames=valuesStr.split("[\\s|]+"); + List results=new ArrayList<>(); + for(String name:valueNames){ + AttributeValueType vt=fromName(name); + if(vt!=null){ + results.add(vt); + } + } + return results.toArray(new AttributeValueType[0]); + } + public static AttributeValueType fromName(String name){ + if(name==null){ + return null; + } + name=name.toUpperCase(); + AttributeValueType[] all=values(); + for(AttributeValueType vt:all){ + if(name.equals(vt.name())){ + return vt; + } + } + return null; + } +} diff --git a/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsQuantity.java b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsQuantity.java new file mode 100755 index 0000000..ff5eb50 --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/value/plurals/PluralsQuantity.java @@ -0,0 +1,45 @@ +package com.reandroid.lib.arsc.value.plurals; + + +public enum PluralsQuantity { + OTHER((short) 0x0004), + ZERO((short) 0x0005), + ONE((short) 0x0006), + TWO((short) 0x0007), + FEW((short) 0x0008), + MANY((short) 0x0009); + + private final short mId; + PluralsQuantity(short id) { + this.mId=id; + } + public short getId() { + return mId; + } + @Override + public String toString(){ + return name().toLowerCase(); + } + public static PluralsQuantity valueOf(short id){ + PluralsQuantity[] all=values(); + for(PluralsQuantity pq:all){ + if(id==pq.mId){ + return pq; + } + } + return null; + } + public static PluralsQuantity value(String name){ + if(name==null){ + return null; + } + name=name.toUpperCase(); + PluralsQuantity[] all=values(); + for(PluralsQuantity pq:all){ + if(name.equals(pq.name())){ + return pq; + } + } + return null; + } +} diff --git a/src/main/java/com/reandroid/lib/common/EntryStore.java b/src/main/java/com/reandroid/lib/common/EntryStore.java new file mode 100755 index 0000000..3160d2d --- /dev/null +++ b/src/main/java/com/reandroid/lib/common/EntryStore.java @@ -0,0 +1,18 @@ +package com.reandroid.lib.common; + +import com.reandroid.lib.arsc.chunk.PackageBlock; +import com.reandroid.lib.arsc.group.EntryGroup; +import com.reandroid.lib.arsc.item.TableString; + +import java.util.Collection; + +public interface EntryStore { + EntryGroup searchEntryGroup(String packageName, String type, String name); + Collection getEntryGroups(int resourceId); + + EntryGroup getEntryGroup(int resourceId); + + Collection getPackageBlocks(byte packageId); + + Collection getTableStrings(byte packageId, int stringReference); +} diff --git a/src/main/java/com/reandroid/lib/common/Frameworks.java b/src/main/java/com/reandroid/lib/common/Frameworks.java new file mode 100755 index 0000000..a91422e --- /dev/null +++ b/src/main/java/com/reandroid/lib/common/Frameworks.java @@ -0,0 +1,37 @@ +package com.reandroid.lib.common; + +import com.reandroid.lib.arsc.io.BlockReader; +import com.reandroid.lib.arsc.util.FrameworkTable; + +import java.io.IOException; +import java.io.InputStream; + +public class Frameworks { + private static FrameworkTable android_table; + private static boolean load_once; + public static FrameworkTable getAndroid(){ + if(android_table!=null || load_once){ + return android_table; + } + load_once=true; + FrameworkTable frameworkTable=null; + try { + frameworkTable = loadFramework(ANDROID_FRAMEWORK); + } catch (IOException e) { + } + android_table=frameworkTable; + return android_table; + } + private static FrameworkTable loadFramework(String name) throws IOException { + InputStream inputStream=Frameworks.class.getResourceAsStream(name); + if(inputStream==null){ + return null; + } + BlockReader reader=new BlockReader(inputStream); + FrameworkTable frameworkTable=new FrameworkTable(); + frameworkTable.readBytes(reader); + return frameworkTable; + } + + private static final String ANDROID_FRAMEWORK= "/fwk/android_resources_30.arsc"; +} diff --git a/src/main/java/com/reandroid/lib/common/ROArrayList.java b/src/main/java/com/reandroid/lib/common/ROArrayList.java new file mode 100755 index 0000000..968eae8 --- /dev/null +++ b/src/main/java/com/reandroid/lib/common/ROArrayList.java @@ -0,0 +1,21 @@ +package com.reandroid.lib.common; + +import java.util.AbstractList; + +public class ROArrayList extends AbstractList { + private final T[] elementData; + public ROArrayList(T[] elementData){ + this.elementData=elementData; + } + @Override + public T get(int i) { + return this.elementData[i]; + } + @Override + public int size() { + if(this.elementData==null){ + return 0; + } + return this.elementData.length; + } +} diff --git a/src/main/java/com/reandroid/lib/common/ROSingleList.java b/src/main/java/com/reandroid/lib/common/ROSingleList.java new file mode 100755 index 0000000..ee21c40 --- /dev/null +++ b/src/main/java/com/reandroid/lib/common/ROSingleList.java @@ -0,0 +1,25 @@ +package com.reandroid.lib.common; + +import java.util.AbstractList; + +public class ROSingleList extends AbstractList { + private final T item; + public ROSingleList(T item){ + this.item=item; + } + @Override + public T get(int i) { + if(i==0 && this.item!=null){ + return this.item; + } + throw new ArrayIndexOutOfBoundsException(getClass().getSimpleName()+": "+i); + } + + @Override + public int size() { + if(this.item==null){ + return 0; + } + return 1; + } +} diff --git a/src/main/java/com/reandroid/lib/common/TableEntryStore.java b/src/main/java/com/reandroid/lib/common/TableEntryStore.java new file mode 100755 index 0000000..6dd8cc9 --- /dev/null +++ b/src/main/java/com/reandroid/lib/common/TableEntryStore.java @@ -0,0 +1,111 @@ +package com.reandroid.lib.common; + +import com.reandroid.lib.arsc.chunk.PackageBlock; +import com.reandroid.lib.arsc.chunk.TableBlock; +import com.reandroid.lib.arsc.group.EntryGroup; +import com.reandroid.lib.arsc.item.TableString; + +import java.util.*; + +public class TableEntryStore implements EntryStore{ + private final Map> mPackagesMap; + public TableEntryStore(){ + this.mPackagesMap = new HashMap<>(); + } + public void add(TableBlock tableBlock){ + if(tableBlock==null){ + return; + } + for(PackageBlock packageBlock:tableBlock.listPackages()){ + add(packageBlock); + } + } + public void add(PackageBlock packageBlock){ + if(packageBlock==null){ + return; + } + byte pkgId= (byte) packageBlock.getId(); + Set packageBlockSet=getOrCreate(pkgId); + packageBlockSet.add(packageBlock); + } + private Set getOrCreate(byte packageId){ + Byte id=packageId; + Set packageBlockSet=mPackagesMap.get(id); + if(packageBlockSet==null){ + packageBlockSet=new HashSet<>(); + mPackagesMap.put(id, packageBlockSet); + } + return packageBlockSet; + } + @Override + public EntryGroup searchEntryGroup(String packageName, String type, String name) { + return null; + } + private Set getTableBlocks(byte packageId) { + Set results=new HashSet<>(); + Set packageBlockSet = mPackagesMap.get(packageId); + if(packageBlockSet!=null){ + for(PackageBlock packageBlock:packageBlockSet){ + TableBlock tableBlock=packageBlock.getTableBlock(); + results.add(tableBlock); + } + } + return results; + } + + @Override + public Collection getEntryGroups(int resourceId) { + List results=new ArrayList<>(); + byte pkgId= (byte) ((resourceId>>24)&0xff); + Set packageBlockSet = mPackagesMap.get(pkgId); + if(packageBlockSet==null){ + return results; + } + for(PackageBlock packageBlock: packageBlockSet){ + EntryGroup group=packageBlock.getEntryGroup(resourceId); + if(group!=null){ + results.add(group); + } + } + return results; + } + + @Override + public EntryGroup getEntryGroup(int resourceId) { + byte pkgId= (byte) ((resourceId>>24)&0xff); + Set packageBlockSet = mPackagesMap.get(pkgId); + if(packageBlockSet==null){ + return null; + } + for(PackageBlock packageBlock: packageBlockSet){ + EntryGroup group=packageBlock.getEntryGroup(resourceId); + if(group!=null && group.pickOne()!=null){ + return group; + } + } + return null; + } + + @Override + public Collection getPackageBlocks(byte packageId) { + List results=new ArrayList<>(); + Set packageBlockSet = mPackagesMap.get(packageId); + if(packageBlockSet!=null){ + results.addAll(packageBlockSet); + } + return results; + } + + @Override + public Collection getTableStrings(byte packageId, int stringReference) { + List results=new ArrayList<>(); + Set tableBlockSet=getTableBlocks(packageId); + for(TableBlock tableBlock:tableBlockSet){ + TableString tableString=tableBlock.getTableStringPool().get(stringReference); + if(tableString!=null){ + results.add(tableString); + } + } + return results; + } +} diff --git a/src/main/resources/fwk/android_resources_30.arsc b/src/main/resources/fwk/android_resources_30.arsc new file mode 100755 index 0000000000000000000000000000000000000000..bc187719e23c07e830d251968f3b7e27e2821d72 GIT binary patch literal 915764 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�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 Hx0C-5-KF=p literal 0 HcmV?d00001 diff --git a/src/main/resources/lib.properties b/src/main/resources/lib.properties old mode 100644 new mode 100755

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�_G;Z@zkZtH^i@vHcwQ@2_vICgZEq?)mi^^qV~1 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