summaryrefslogtreecommitdiff
path: root/library
AgeCommit message (Collapse)Author
2017-01-23Check crc and time of secondary dex filesandroid-o-preview-1android-n-mr2-preview-2o-previewYohann Roussel
Protect extracted dex files from modifications by checking their crc and modification time. In case of change, proceed to a new extraction. Those checks are replacing the check of the zip integrity by opening it with a ZipFile. Test: SupportMultidexHostTest (from tradefed) Bug: 32159214 Change-Id: I09aa01550782f5f550bee6fc91709455e82c1057
2017-01-20Check extracted dex only once per usageYohann Roussel
The check is unnecessary in MultiDex.install because it was already done by MultiDexExtractor.load. The retry on bad extraction is also included in MultiDexExtractor.load so it was redundant too. Test: SupportMultidexHostTest (from tradefed) Change-Id: I877a99db0e0c562ac47a7c5c87d7f3e1d70884e6
2017-01-20Mark extracted dex files as read onlyYohann Roussel
This is a poor protection from some attack against application that would be made to overwrite their extracted secondary dex files. The protection is poor because marking the dex files read only will protect only some applications depending on their implementation. Test: MultiDexLegacyVersionedTestApp Bug: 32159214 Change-Id: I88c6fc72284f4e0b832dc4d840c9c636a1234638
2017-01-13Merge "Prefix temp files to ensure they are cleaned up"Justin Morey
2017-01-13Use context.getApplicationInfo()Jon Noack
Due to package install races it is possible for a process to be started from an old apk even though that apk has been replaced. Querying for ApplicationInfo by package name may return information for the new apk, leading to a runtime with the old main dex file and new secondary dex files. This leads to various problems like ClassNotFoundExceptions. Using context.getApplicationInfo() should result in the process having a consistent view of the world (even if it is of the old world). The package install races are eventually resolved and old processes are killed. Test: Passes Google Play services tests Change-Id: I95257d851eb678c55a19e731183f7add2b540615
2017-01-13Prefix temp files to ensure they are cleaned upJon Noack
Temp files are removed unconditionally in a finally block following extraction. However, if the process is killed during extraction this finally block will not run. Because temp files started with extractedFilePrefix, they wouldn't be cleaned up in prepareDexDir(). This change ensures that prepareDexDir() will remove any existing temp files before extraction begins. Bug: 27769642 Bug: 33718827 Test: Passes Google Play services tests Change-Id: I803ba2c7234801551d36cbbe2941eeaa986d31f8
2016-12-21Change multidex version fileandroid-n-mr2-preview-1Yohann Roussel
- Stop collecting build id and version to allow better behavior with incremental builds. - Make it resistant to git errors. Test: mm Change-Id: I03b1e36048f92f50227cfc0e370454438bee31cf
2016-09-20Add missing dependency to jack-meta contentandroid-n-mr1-preview-2android-n-mr1-preview-1Yohann Roussel
Test: mm Change-Id: I70c50b5b9fe7f06b0adde5616590aec24b6d0dff
2016-07-12Fix typo in javadocandroid-wear-n-preview-2android-wear-7.1.1_r1android-n-preview-5android-n-iot-preview-2nougat-mr1-wear-releasen-iot-preview-2Sebastien Hertz
Bug: 30076851 Change-Id: I6a148d0038baebfcfb987bf3ca498a0acf5d106c
2016-06-14Prevent concurrent extractionsAndrew Johnson
This prevernt multiple processes of the same application from simultaneously caching the same secondary dex files. Bug: 27263431 Change-Id: If78ce2d2c5a37a3299b2bb3fa598a3ddd6acb7dd
2016-05-17Fix handling of suppressed exceptionandroid-n-preview-4Yohann Roussel
On API 19 and 20, the library was trying to save "suppressed exceptions" in the loader.dexElementsSuppressedExceptions but the field is not there, it's in DexPathList, so the correct path is loader.pathList.dexElementsSuppressedExceptions. Bug: 28808797 Change-Id: I549e2120e744345a86df2f588f03823d9dfab659
2015-08-05am f9f54ac6: am 606af947: Use Context.getFilesDir as a backup dex locationYohann Roussel
* commit 'f9f54ac65185338b2726a9c6b9d791c5994c38e2': Use Context.getFilesDir as a backup dex location
2015-08-05am 606af947: Use Context.getFilesDir as a backup dex locationYohann Roussel
* commit '606af94785cb96d418d87fe5a90bb2e09ccfa97f': Use Context.getFilesDir as a backup dex location
2015-05-26Use Context.getFilesDir as a backup dex locationandroid-m-preview-2Yohann Roussel
On some devices it seems impossible to read or write the application data directory. There, creating code_cache at the proper location is impossible. In this case fallback to the 'files' directory. This may lead to not cleaning the useless extracted secondary dex files if one such devices is ever updated to L. Bug: https://code.google.com/p/android/issues/detail?id=79388 Change-Id: I4b6725572f10fd511992dc8a5043d2f135abd3a5
2015-05-19[DO NOT MERGE] Declare Jack multidex configurationandroid-m-preview-1android-m-previewYohann Roussel
(cherry picked from commit 805db15e4d7baa57062ad08fb03eeac8691475c8) Change-Id: I4cae9fa3ba272690461c29bf8d9779350b99ae52
2015-03-02Declare Jack multidex configurationandroid-cts-6.0_r9android-cts-6.0_r8android-cts-6.0_r7android-cts-6.0_r6android-cts-6.0_r5android-cts-6.0_r4android-cts-6.0_r32android-cts-6.0_r31android-cts-6.0_r30android-cts-6.0_r3android-cts-6.0_r29android-cts-6.0_r28android-cts-6.0_r27android-cts-6.0_r26android-cts-6.0_r25android-cts-6.0_r24android-cts-6.0_r23android-cts-6.0_r22android-cts-6.0_r21android-cts-6.0_r20android-cts-6.0_r2android-cts-6.0_r19android-cts-6.0_r18android-cts-6.0_r17android-cts-6.0_r16android-cts-6.0_r15android-cts-6.0_r14android-cts-6.0_r13android-cts-6.0_r12android-cts-6.0_r1android-6.0.1_r9android-6.0.1_r81android-6.0.1_r80android-6.0.1_r8android-6.0.1_r79android-6.0.1_r78android-6.0.1_r77android-6.0.1_r74android-6.0.1_r73android-6.0.1_r72android-6.0.1_r70android-6.0.1_r7android-6.0.1_r69android-6.0.1_r68android-6.0.1_r67android-6.0.1_r66android-6.0.1_r65android-6.0.1_r63android-6.0.1_r62android-6.0.1_r61android-6.0.1_r60android-6.0.1_r59android-6.0.1_r58android-6.0.1_r57android-6.0.1_r56android-6.0.1_r55android-6.0.1_r54android-6.0.1_r53android-6.0.1_r52android-6.0.1_r51android-6.0.1_r50android-6.0.1_r5android-6.0.1_r49android-6.0.1_r48android-6.0.1_r47android-6.0.1_r46android-6.0.1_r45android-6.0.1_r43android-6.0.1_r42android-6.0.1_r41android-6.0.1_r40android-6.0.1_r4android-6.0.1_r33android-6.0.1_r32android-6.0.1_r31android-6.0.1_r30android-6.0.1_r3android-6.0.1_r28android-6.0.1_r27android-6.0.1_r26android-6.0.1_r25android-6.0.1_r24android-6.0.1_r22android-6.0.1_r21android-6.0.1_r20android-6.0.1_r18android-6.0.1_r17android-6.0.1_r16android-6.0.1_r13android-6.0.1_r12android-6.0.1_r11android-6.0.1_r10android-6.0.1_r1android-6.0.0_r7android-6.0.0_r6android-6.0.0_r5android-6.0.0_r41android-6.0.0_r4android-6.0.0_r3android-6.0.0_r26android-6.0.0_r25android-6.0.0_r24android-6.0.0_r23android-6.0.0_r2android-6.0.0_r13android-6.0.0_r12android-6.0.0_r11android-6.0.0_r1marshmallow-releasemarshmallow-mr3-releasemarshmallow-mr2-releasemarshmallow-mr1-releasemarshmallow-mr1-devmarshmallow-dr1.6-releasemarshmallow-dr1.5-releasemarshmallow-dr1.5-devmarshmallow-dr-releasemarshmallow-dr-dragon-releasemarshmallow-dr-devmarshmallow-devmarshmallow-cts-releaseYohann Roussel
Change-Id: I807ab1791b1704b5b2ec48c608ac474e0d2b7850
2014-12-02am 8c2abf7f: Workaround mkdirs concurency problemsYohann Roussel
* commit '8c2abf7f471b061b737e700af711e9d5d6883b40': Workaround mkdirs concurency problems
2014-12-02Workaround mkdirs concurency problemsandroid-wear-5.0.0_r1lollipop-wear-releaseYohann Roussel
Use only mkdir since our usage is a simple case. Bug: https://code.google.com/p/android/issues/detail?id=79388 Change-Id: Iab7504f3c38c660f93ab1249895be454af5ff84d
2014-10-28Enable building the multi-dex libs for shipping.Xavier Ducrohet
This is mostly a copy of the support libs' gradle files, in order to generate a support library that will contain the current public versions + the new version being built. Change-Id: I4937073909206653bd0ffd128694161cf59445a9
2014-10-24Package legacyMultidexInstallation.jppYohann Roussel
To allow automatic configuration when using Jill/Jack. This is a temporary change untill Jack and Jill are fully integrated into the SDK build tools. (cherry picked from commit f50beca07827921e005ce6825bbc874a843f91e1) Bug: 18112662 Change-Id: I8b9292b05c90d790edade62ac682dba35e7d3e96
2014-10-24Provide default jack legacy configuration.Yohann Roussel
To help compilation with jack of applications using a multidex library. (cherry picked from commit 2921acf84ac6114a6e600b7ab0237d835ef9e43f) Bug: 18112662 Change-Id: I0f7535ba859859ec30fc6a07447f1075e7b4deb0
2014-10-24Express a clearer status about supported versions.Yohann Roussel
By explaining the full story in README.txt. By inlining API 11 constants so we can really compile the library against API 4. (cherry picked from commit e99daea7a3aec5ffac13b4283685e8d2a5994ad9) Bug: 18112662 Change-Id: I03a4d5f773bebbe09fcde04a340bdf8abfdbc068
2014-10-24Keep track of the version.Yohann Roussel
The version data is kept in a small resource file. (cherry picked from commit 6d70d23facddf0e780cfb08a7f9af94da510bf96) Bug: 18112662 Change-Id: I174145a4e93463b0106d45ae86e6dba1be8715e8
2014-10-20Package legacyMultidexInstallation.jppYohann Roussel
To allow automatic configuration when using Jill/Jack. This is a temporary change untill Jack and Jill are fully integrated into the SDK build tools. Change-Id: I4ee88cb0191211d79f71f305ac7a42e357ec63c2
2014-10-20Provide default jack legacy configuration.Yohann Roussel
To help compilation with jack of applications using a multidex library. Change-Id: I6502212b9e0a04360d74d88db933f9b58eff974d
2014-10-08Express a clearer status about supported versions.android-l-preview_r2l-previewYohann Roussel
By explaining the full story in README.txt. By inlining API 11 constants so we can really compile the library against API 4. Change-Id: I423e807114c15805e97860ff5db22ef9ff1e24c0
2014-10-07Keep track of the version.Yohann Roussel
The version data is kept in a small resource file. Change-Id: I3de1a28fee68726121f3738791439bc315623ed7
2014-07-30Use a simulated code-cache for storing extracted files.android-cts-5.0_r9android-cts-5.0_r8android-cts-5.0_r7android-cts-5.0_r6android-cts-5.0_r5android-cts-5.0_r4android-cts-5.0_r3android-5.0.2_r3android-5.0.2_r1android-5.0.1_r1android-5.0.0_r7android-5.0.0_r6android-5.0.0_r5.1android-5.0.0_r5android-5.0.0_r4android-5.0.0_r3android-5.0.0_r2android-5.0.0_r1lollipop-releaselollipop-devlollipop-cts-releaseYohann Roussel
This should allow an automatic cleaning when updating to L without having to check at each launch. Bug: 10447095 (cherry picked from commit 590a07e63868f0a1da311ff22b4a9f35eb48a865) Change-Id: I90b80c0c196b5da2b63bced30b2ba5e93ecb594a
2014-07-29Use a simulated code-cache for storing extracted files.Yohann Roussel
This should allow an automatic cleaning when updating to L without having to check at each launch. Bug: 10447095 Change-Id: I3c0ecc1430ced4592f630ec4c6d8a1a2219e8141
2014-07-09Clear old secondary dex dir when multidex becomes supported.Yohann Roussel
There may be a need for clearing those unused extracted files after an OTA bringing Art L on the device. Bug: 10447095 Change-Id: I80b9c0afa2bd8dfa0cf04e96fb04ba2527da0fe5
2014-06-24Merge "Deactivate the library if vm version is 2.1 or newer."Yohann Roussel
2014-06-26Deactivate the library if vm version is 2.1 or newer.Yohann Roussel
It was decided that it would be the revision of multidex native support and that it is the criterion that should be used to discriminate between VMs capable of multidex and others. Bug 14238145. See bug 10447095 for discussions about the deactivation criterion. Change-Id: I50922972d1d5b3019a111d5a1b4f2f18af9713ed
2014-06-18Remove unnecessary versions from multidex's build.gradle.Jeff Davidson
frameworks/multidex/library does not stand alone as a gradle project and should always be inheriting these values from the parent build. Change-Id: I10eb64f2ad38d0bf278d5300e26a637c481b9b00
2014-05-16Update sdk and build tools versionJeff Hamilton
Change-Id: I602f362ef9fb7a7eb88fea05052152b0b45a4c6e
2014-04-24Merge "Fix some javadoc in MultiDex."Yohann Roussel
2014-04-22Allow MultiDex support library to work in API 20 (KKWT)Justin Morey
The class loader is the same in KK (API 19) & KKWT (API 20), so only a version bump was needed. Change-Id: Ib5112e60c9a54ed042e9c71b075ecb5302c1b717 (cherry picked from commit b420940060dbce01a861760d5830416d0e9bb802)
2014-04-22Fix some javadoc in MultiDex.Yohann Roussel
Change-Id: I0600b6f75005881c549150ea2e0b18800747bf73
2014-04-09Change update detection to reduce load time.Yohann Roussel
Reduces load time if extraction was already made. It appeared that new ZipFile was really slow because it's preparing much things as soon as it's instanciated. The new criteria consist of the last modified time of the apk plus the crc of the apk's central directory, last modified time should be enough for nearly all modifications and the crc is here to try to handle an OTA mixing with dates. The transition from old criteria to new should be good: since there will be no stored values they would be detected as a new installation. Change-Id: Id390b77b03d794b8b7feb91eb0daae1126c6d691
2014-02-27Merge "Provide a default multidex capable Application."Yohann Roussel
2014-02-26Provide a default multidex capable Application.Yohann Roussel
Multidex installation in Application.attachBaseContext() requires only one call point to MultiDex.install() per Application so let's provide a default multidex capable Application. Change-Id: Icfa1993c4b3d7c5a7d1783d4ca6d5b9ea31adb8b
2014-01-30Disable gradle lint checks, so build will succeedJustin Morey
Change-Id: I5bd149acf7ad8efeadfd6ede018503a4dfba6e31
2014-01-28Fix crc comparison in multidex installation.Yohann Roussel
The bug was caused by a comparison of Long instances instead of long values and was leading to the library always detecting that the secondary dex files needed a fresh exctraction. bug 12776578 Change-Id: Ia7056a130cf6e99094e4f456b086e141c1255725
2014-01-18Fix gradle buildJeff Hamilton
Change-Id: Idb9442556122d83f2277aceb79101f4f53e4c632
2014-01-17Remove the check for source apk file sizeMaurice Chu
The file deletion when finding that the source apk file size was different than what was stored in SharedPreferences causes a race condition when multiple processes are executing this code, where one process could erase the secondary zip file while a different process had already started to create the zip file. This check is unnecessary and has been removed. Also, changed the parameter for getting the SharedPreferences to Context.MODE_MULTI_PROCESS, which forces a re-read of the key/value pairs from the file. This should also fix the original bug b/12550057. Bug: 12594955 Bug: 12550057 Change-Id: I53f4bca0d03a5737d802509274520a78effcf228
2014-01-15Check whether to extract secondary dex files based on apk size and CRCMaurice Chu
This addresses an edge case where the secondary dex is not reloaded when it should because of an OTA due to the modification time of the PrebuiltGmsCore.apk in the system image is never different even though PrebuiltGmsCore.apk may have changed in the OTA. This performs two checks, the first is that the overall size of the apk is the same. The second is to check that the number of dex files are the same, and the CRC values of the dex file zip entries are the same. Bug: 12550057 Change-Id: I526f6b88cfc7957840b0c35aaad0eab0cd776f7e
2014-01-08Get multidex library building under GradleJustin Morey
Change-Id: Ic6f8689c68c7bc79bf831441008ae6d08d58e91d
2013-12-02Add additional check for valid Zip file before multidex installMaurice Chu
Bug: 11895788 Change-Id: Id4f6e5b09be809eeb29367bebe78c03e49864cbf
2013-11-28Add log to identify the source of the zip corruption.Yohann Roussel
This CL is to be reverted when debug is done. Change-Id: I47f2464a4b32affe2d63f874a1df3f8f24e569d5
2013-11-28Buffer the file output streamMaurice Chu
Also, removed the file locking which had no effect. Bug: 11895788 Change-Id: I8b520fff9496f289eba88690b3b583f9c43b932c
2013-11-27Make file lock before renaming zip fileMaurice Chu
Change-Id: I548dd046f89d937f974cb5a925de70c7ecfad7a4