24 Commits

Author SHA1 Message Date
Igor Eisberg
4de92a23ae
refactor: ApkDecoder & ApkBuilder overhaul (#3699)
* refactor: ApkDecoder & ApkBuilder overhaul

A major rewrite of ApkDecoder and ApkBuilder classes to make them managable.
Removed many instances of redundancy and improved syntaxed and indentation.

Modifying the stock Apktool source to our needs have become too difficult,
so I'm pushing the general (not specific to our needs) changes upstream.

I'd change a lot more, but I wanted to make sure all tests pass as expected,
despite some of them being wierd, outdated or unnecessary.

This also fixes certain files in META-INF being lost during recompile
when the -c/--copy-original option isn't used.

This has been tweaked and tested for several days and I vouch for its stablity.

* style: fix more redundancy

* style: fix more redundancy

* tweak: consistent case-sensitivity for cmd and options

* refactor: tracking unknownFiles via apkInfo is redundant

1) We take advantage of the fact that doNotCompress already tracks uncompressed files,
   including those separated into "unknown".
   With this change the "unknownFiles" is simply ignored, so it's backward-compatible
   with existing decoded APK dirs.
   Tweaked a few tests to match the removal of "unknownFiles".

2) Passing doNotCompress to AAPT is redundant, Apktool extracts the temp APK packed by
   AAPT to build/apk and then repackages it anyway, so it serves no purpose.

* refactor: fix minSdkVersion from baksmali + clean up more redundancy

* Regression: minSdkVersion inferred from baksmali was not stored properly.

* The arsc extension can be generalized for simplicity as seen in AOSP source.
https://cs.android.com/android/platform/superproject/main/+/main:external/deqp/scripts/android/build_apk.py;l=644?q=apk%20pack&ss=android%2Fplatform%2Fsuperproject%2Fmain:external%2F
  Note:
    NO_COMPRESS_EXT_PATTERN only collapses paths to a common extension.
    It does NOT force these extensions to be always uncompressed.
    doNotCompress is the one determining files/extensions that should be uncompressed.
  (no funcionality was changed)

* resourcesAreCompressed in apkInfo is redundant. It was only used in invokeAapt,
  but not ApkBuilder. Its value is also never set by Apktool, only read.
  Like with doNotCompress, passing any kind of compression rules to AAPT is pointless,
  since we don't use the temp APK packed by AAPT directly - it's extracted and repacked
  by ApkBuilder, where doNotCompress already determines whether resources.arsc should
  or should not be compressed in the final APK.
  (no funcionality was changed)

* style: optional args come after required args

* style: optional args come after required args

* style: sdkInfo as a normal field for consistency

* style: some formatting tweaks
2024-10-03 06:52:59 -04:00
Connor Tumbleson
a9eacf657c
test: assert miui aapt1 patch exists (#3462) 2023-12-08 07:29:28 -05:00
Connor Tumbleson
bf1041e4fb
test: add test case for android:isAccessibilityTool (#3426)
* test: add test case for android:isAccessibilityTool

* test: augment tests for accessibility service extension
2023-11-16 05:58:38 -05:00
Connor Tumbleson
679c133d21
feat: make aapt2 default (#3370) 2023-10-04 20:52:28 -04:00
sv99
a7e2e3e5e1
Extract into ApkInvoker and split into data classes. (#3124)
* extract AaptInvoker and rename MetaFile to ApkInfo, all decode methods from AndrolibResources moved to the ApkDecoder

* extract ARSCData and FlagsOffset from ARSCDecoder and remove unused imports

* rebase to master

* move decodeManifest and decodeResources to the ResourceDecoder

* remove commented old code
2023-07-03 18:38:52 -04:00
sv99
9c495cae29
Move build functions from Androlib to the ApkBuilder (#3103) 2023-06-27 08:25:27 -04:00
Goooler
94ed86db28 Code cleanups 2021-08-27 01:16:46 +08:00
Goooler
e25c3636ff Update docs & licenses to use https 2021-08-26 07:40:32 -04:00
Connor Tumbleson
66b1c30fa0
style: use new form of junit assertions 2021-05-31 06:43:40 -04:00
Connor Tumbleson
447ba50332
refactor: drop author tags and support javadocs 2021-03-07 15:06:45 -05:00
Connor Tumbleson
6bd1ab603b test: add triple dex test to aapt1 2020-11-27 10:51:54 -05:00
Peter Retzlaff
408050ffde Add tests to ensure empty, uncompressed files are put on the doNotCompress list.
Also, fix a bug where ext would retain its value from a previous
iteration of the loop, since we don't always overwrite it now.
2020-06-09 07:05:43 -04:00
Peter Retzlaff
05f81f9dd0 Change zero-byte-file tests so they test the correct behavior.
* The empty test file needs to be STORED in the testapp, so put it on
  the initial doNotCompress list.
* It needs to have a file extension that matches the NO_COMPRESS_PATTERN.
* assertNotSame tests for object equality, which doesn't work for String
  comparisons.
2020-06-09 07:05:43 -04:00
Connor Tumbleson
3f831c8221
refactor: copyright year should be year started, not current year 2020-04-11 06:33:05 -04:00
Frieder Bluemle
81ca785e02
Fix file header comment format 2020-02-29 17:37:46 -08:00
Connor Tumbleson
25a1cb02ef
fix: License 2019 update 2019-07-13 12:19:41 -04:00
Connor Tumbleson
cfea3e0831 build: initial attempt at getting travis windows support
build: force windows onto the bash environment

build: update permission (+x) of clean-test file

build: "bat" instead of "exe" extension

build: attempt to support long-path names on windows

build: another attempt at long filepaths on windows

build: force +x on scripts prior to execution

build: exit with return code of last command

build: dump out current path

build: dump out current path - part 2

fix: remove 5 chars from path to drop down from 260 windows max path

build: correct gradlew.bat path and remove unneeded lines

fix: remove long path global configuration

fix: restore PATH setting for windows env

build: PATH resets between scripts, fix for windows
2019-01-09 17:43:40 -05:00
Connor Tumbleson
a5cfe41a8f test: add test for aapt1/aapt2
- ignore aapt2 due to failure
2019-01-04 17:45:51 -05:00
Connor Tumbleson
0dfa6c4656 test: add test to ensure empty ids.xml are generated for aapt1/aapt2 2019-01-03 16:56:25 -05:00
Connor Tumbleson
abdd536a18 test: add aapt1/aapt2 tests for "0byte" files 2018-07-20 15:21:44 -04:00
Connor Tumbleson
ba9b532283 test: add a test to confirm that mp3 file is stored (not compressed) 2018-04-12 12:00:38 -04:00
Connor Tumbleson
e679d71615
test: rename all resources towards new location 2018-04-03 07:24:00 -04:00
Connor Tumbleson
1713495ea7 aapt2: move test resources to math structure of tests 2018-03-05 11:00:47 -05:00
Connor Tumbleson
646eb54102 aapt2: refactor testsuite
- split from aapt1/aapt2 (those that do building)
 - tests that just test decode (no aapt) split
 - categories for androlib/encdoers/util for various others
2018-02-28 15:11:39 -05:00