From 701779db6e19eca22d604e422958e3094b7898d5 Mon Sep 17 00:00:00 2001 From: Artist Date: Thu, 1 Sep 2016 16:28:56 +0800 Subject: [PATCH 01/21] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aff9fd0..0304c83 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ apply plugin: 'com.ceabie.dexnkife' #为注释符 #-----------主Dex中必要依赖的脚本配置----------- -#默认保留四大组件中其他三大组件,Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity +#默认保留四大组件中其他三大组件(并计算其依赖树),Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity -just activity com.ceabie.demo.MainActivity #-----------附加类----------- @@ -149,7 +149,7 @@ apply plugin: 'com.ceabie.dexnkife' #将全部类移出主Dex -split **.** -# 不包含Android gradle 插件自动生成的miandex列表.(不用系统自带分包策略) +# 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效) #-donot-use-suggest # 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) From 5d71576a1205badbf07391b1c70bd26f55654540 Mon Sep 17 00:00:00 2001 From: Artist Date: Thu, 1 Sep 2016 16:31:02 +0800 Subject: [PATCH 02/21] Update dexknife.txt --- DexKnifePlugin/app/dexknife.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DexKnifePlugin/app/dexknife.txt b/DexKnifePlugin/app/dexknife.txt index e0fbd8b..574068f 100644 --- a/DexKnifePlugin/app/dexknife.txt +++ b/DexKnifePlugin/app/dexknife.txt @@ -1,7 +1,7 @@ #为注释符 #-----------主Dex中必要依赖的脚本配置----------- -#默认保留四大组件中其他三大组件,Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity +#默认保留四大组件中其他三大组件(并计算其依赖树),Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity -just activity com.ceabie.demo.MainActivity #-----------附加类----------- @@ -16,7 +16,7 @@ #将全部类移出主Dex -split **.** -# 不包含Android gradle 插件自动生成的miandex列表.(不用系统自带分包策略) +# 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效) #-donot-use-suggest # 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) From b671290b91f0fb35d4a4bda57180b9ae2606b93b Mon Sep 17 00:00:00 2001 From: Artist Date: Tue, 20 Sep 2016 09:35:28 +0800 Subject: [PATCH 03/21] Update dexknife.txt --- DexKnifePlugin/app/dexknife.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DexKnifePlugin/app/dexknife.txt b/DexKnifePlugin/app/dexknife.txt index 574068f..a377126 100644 --- a/DexKnifePlugin/app/dexknife.txt +++ b/DexKnifePlugin/app/dexknife.txt @@ -19,6 +19,11 @@ # 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效) #-donot-use-suggest +# (分割每个dex的方法数上限) 扩展参数:例如 --set-max-idx-number=50000 +# 如果出现 DexException: Too many classes in --main-dex-list, main dex capacity exceeded: +# 表明限制的方法数小于main dex的必要方法数,调大到合适数值即可 +-dex-param --set-max-idx-number=4000 + # 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) #-auto-maindex From 2a787d1d8ef647268979a837a02b267f0c14e238 Mon Sep 17 00:00:00 2001 From: Artist Date: Tue, 20 Sep 2016 09:40:10 +0800 Subject: [PATCH 04/21] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0304c83..25f8d8d 100644 --- a/README.md +++ b/README.md @@ -152,12 +152,16 @@ apply plugin: 'com.ceabie.dexnkife' # 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效) #-donot-use-suggest +# (分割每个dex包的方法数上限) 扩展参数:例如 --set-max-idx-number=50000 +# 如果出现 DexException: Too many classes in --main-dex-list, main dex capacity exceeded: +# 表明限制的方法数小于main dex的必要方法数,调大到合适数值即可 +-dex-param --set-max-idx-number=4000 + # 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) #-auto-maindex # 显示miandex的日志. #-log-mainlist - ``` **第五步:在 defaultConfig 或者 buildTypes中打开 multiDexEnabled true,否则不起作用** From d0edebf6f9eee7b30db4af7bd27651521c912154 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Tue, 20 Sep 2016 16:06:35 +0800 Subject: [PATCH 05/21] update plugin --- DexKnifePlugin/.gitignore | 2 +- DexKnifePlugin/LICENSE.txt | 202 ++++++++++++++++++ DexKnifePlugin/app/maindexlist.txt | 126 +++++------ .../java/com/ceabie/demo/MainActivity2.java | 59 +++++ DexKnifePlugin/build.gradle | 6 +- .../gradle-dexknife-plugin/build.gradle | 89 +++++++- .../gradle-dexknife-plugin/gradle.properties | 2 + .../com/ceabie/dexknife/DexKnifeConfig.java | 11 +- .../com/ceabie/dexknife/DexKnifePlugin.groovy | 2 - .../com/ceabie/dexknife/DexSplitTools.java | 160 +++++++++++--- .../dexknife/InjectAndroidBuilder.groovy | 178 +++++++++++++++ .../dexknife/MultiDexAndroidBuilder.groovy | 112 ---------- .../ceabie/dexknife/SplitToolsFor150.groovy | 30 ++- .../temp/AbstractSplitTools.groovy | 159 -------------- .../temp/MultiDexAndroidBuilder.java | 70 ------ .../gradle/wrapper/gradle-wrapper.properties | 4 +- DexKnifePlugin/lib1/.gitignore | 2 + DexKnifePlugin/lib1/build.gradle | 25 +++ DexKnifePlugin/lib1/proguard-rules.pro | 17 ++ .../lib1/src/main/AndroidManifest.xml | 11 + .../lib1/src/main/res/values/strings.xml | 3 + .../2.0.0/gradle-dexknife-plugin-2.0.0.jar | Bin 0 -> 39903 bytes .../gradle-dexknife-plugin-2.0.0.jar.md5 | 1 + .../gradle-dexknife-plugin-2.0.0.jar.sha1 | 1 + .../2.0.0/gradle-dexknife-plugin-2.0.0.pom | 2 +- .../gradle-dexknife-plugin-2.0.0.pom.md5 | 1 + .../gradle-dexknife-plugin-2.0.0.pom.sha1 | 1 + .../gradle-dexknife-plugin-2.0.2-sources.jar | Bin 0 -> 13319 bytes ...adle-dexknife-plugin-2.0.2-sources.jar.md5 | 1 + ...dle-dexknife-plugin-2.0.2-sources.jar.sha1 | 1 + .../2.0.2/gradle-dexknife-plugin-2.0.2.jar | Bin 0 -> 43397 bytes .../gradle-dexknife-plugin-2.0.2.jar.md5 | 1 + .../gradle-dexknife-plugin-2.0.2.jar.sha1 | 1 + .../2.0.2/gradle-dexknife-plugin-2.0.2.pom | 8 + .../gradle-dexknife-plugin-2.0.2.pom.md5 | 1 + .../gradle-dexknife-plugin-2.0.2.pom.sha1 | 1 + .../gradle-dexknife-plugin/maven-metadata.xml | 7 +- .../maven-metadata.xml.md5 | 2 +- .../maven-metadata.xml.sha1 | 2 +- ...6\345\214\205\346\217\222\344\273\266.txt" | 0 ...4\345\234\260\344\273\223\345\272\223.txt" | 0 DexKnifePlugin/settings.gradle | 3 +- README.md | 6 +- .../2.0.0/gradle-dexknife-plugin-2.0.0.jar | Bin 0 -> 39903 bytes .../gradle-dexknife-plugin-2.0.0.jar.md5 | 1 + .../gradle-dexknife-plugin-2.0.0.jar.sha1 | 1 + .../2.0.0/gradle-dexknife-plugin-2.0.0.pom | 8 + .../gradle-dexknife-plugin-2.0.0.pom.md5 | 1 + .../gradle-dexknife-plugin-2.0.0.pom.sha1 | 1 + .../2.0.1/gradle-dexknife-plugin-2.0.1.jar | Bin 40413 -> 0 bytes .../gradle-dexknife-plugin-2.0.1.jar.md5 | 1 - .../gradle-dexknife-plugin-2.0.1.jar.sha1 | 1 - .../gradle-dexknife-plugin-2.0.1.pom.md5 | 1 - .../gradle-dexknife-plugin-2.0.1.pom.sha1 | 1 - .../gradle-dexknife-plugin-2.0.2-sources.jar | Bin 0 -> 13319 bytes ...adle-dexknife-plugin-2.0.2-sources.jar.md5 | 1 + ...dle-dexknife-plugin-2.0.2-sources.jar.sha1 | 1 + .../2.0.2/gradle-dexknife-plugin-2.0.2.jar | Bin 0 -> 43397 bytes .../gradle-dexknife-plugin-2.0.2.jar.md5 | 1 + .../gradle-dexknife-plugin-2.0.2.jar.sha1 | 1 + .../2.0.2/gradle-dexknife-plugin-2.0.2.pom | 8 + .../gradle-dexknife-plugin-2.0.2.pom.md5 | 1 + .../gradle-dexknife-plugin-2.0.2.pom.sha1 | 1 + .../gradle-dexknife-plugin/maven-metadata.xml | 7 +- .../maven-metadata.xml.md5 | 2 +- .../maven-metadata.xml.sha1 | 2 +- ...6\345\214\205\346\217\222\344\273\266.txt" | 0 ...4\345\234\260\344\273\223\345\272\223.txt" | 0 68 files changed, 878 insertions(+), 473 deletions(-) create mode 100644 DexKnifePlugin/LICENSE.txt create mode 100644 DexKnifePlugin/app/src/main/java/com/ceabie/demo/MainActivity2.java create mode 100644 DexKnifePlugin/gradle-dexknife-plugin/gradle.properties create mode 100644 DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/MultiDexAndroidBuilder.groovy delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/temp/AbstractSplitTools.groovy delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/temp/MultiDexAndroidBuilder.java create mode 100644 DexKnifePlugin/lib1/.gitignore create mode 100644 DexKnifePlugin/lib1/build.gradle create mode 100644 DexKnifePlugin/lib1/proguard-rules.pro create mode 100644 DexKnifePlugin/lib1/src/main/AndroidManifest.xml create mode 100644 DexKnifePlugin/lib1/src/main/res/values/strings.xml create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 rename repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom => DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom (93%) create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 create mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 create mode 100644 "DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" create mode 100644 "DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.sha1 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 create mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 create mode 100644 "repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" create mode 100644 "repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" diff --git a/DexKnifePlugin/.gitignore b/DexKnifePlugin/.gitignore index e86cb99..d3ce82a 100644 --- a/DexKnifePlugin/.gitignore +++ b/DexKnifePlugin/.gitignore @@ -5,4 +5,4 @@ /.idea/libraries .DS_Store /build -/captures \ No newline at end of file +/captures diff --git a/DexKnifePlugin/LICENSE.txt b/DexKnifePlugin/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/DexKnifePlugin/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/DexKnifePlugin/app/maindexlist.txt b/DexKnifePlugin/app/maindexlist.txt index 53a33c4..72c71a2 100644 --- a/DexKnifePlugin/app/maindexlist.txt +++ b/DexKnifePlugin/app/maindexlist.txt @@ -1,67 +1,5 @@ rx/android/concurrency/AndroidSchedulers.class rx/android/concurrency/HandlerThreadScheduler.class -rx/annotations/Beta.class -rx/annotations/Experimental.class -android/support/annotation/StyleableRes.class -android/support/annotation/IntDef.class -android/support/annotation/AnyRes.class -android/support/annotation/AnimRes.class -android/support/annotation/AttrRes.class -android/support/annotation/Nullable.class -android/support/annotation/StyleRes.class -android/support/annotation/StringRes.class -android/support/annotation/MenuRes.class -android/support/annotation/NonNull.class -android/support/annotation/XmlRes.class -android/support/annotation/ArrayRes.class -android/support/annotation/InterpolatorRes.class -android/support/annotation/IntegerRes.class -android/support/annotation/FractionRes.class -android/support/annotation/AnimatorRes.class -android/support/annotation/DimenRes.class -android/support/annotation/RawRes.class -android/support/annotation/PluralsRes.class -android/support/annotation/BoolRes.class -android/support/annotation/DrawableRes.class -android/support/annotation/LayoutRes.class -android/support/annotation/IdRes.class -android/support/annotation/StringDef.class -android/support/annotation/ColorRes.class -android/support/multidex/MultiDex$V14.class -android/support/multidex/MultiDex$V19.class -android/support/multidex/MultiDex$V4.class -android/support/multidex/MultiDex.class -android/support/multidex/MultiDexExtractor$1.class -android/support/multidex/MultiDexExtractor.class -android/support/multidex/ZipUtil$CentralDirectory.class -android/support/multidex/ZipUtil.class -android/support/v7/view/ActionMode.class -android/support/v7/view/ActionMode$Callback.class -android/support/v7/app/ActionBar$TabListener.class -android/support/v7/app/ActionBarDrawerToggle$DelegateProvider.class -android/support/v7/app/ActionBar$OnMenuVisibilityListener.class -android/support/v7/app/ActionBarDrawerToggle$Delegate.class -android/support/v7/app/ActionBarActivity.class -android/support/v7/app/ActionBar.class -android/support/v7/app/ActionBar$Tab.class -android/support/v7/app/ActionBar$LayoutParams.class -android/support/v7/app/AppCompatActivity.class -android/support/v7/app/AppCompatCallback.class -android/support/v7/app/ActionBarDrawerToggle.class -android/support/v7/app/ActionBar$OnNavigationListener.class -android/support/v7/app/ActionBar$NavigationMode.class -android/support/v7/app/ActionBar$DisplayOptions.class -android/support/v7/app/AppCompatDelegate.class -android/support/v7/internal/view/menu/MenuItemImpl.class -android/support/v7/internal/widget/AdapterViewCompat.class -android/support/v7/internal/widget/ViewUtils.class -android/support/v7/internal/widget/TintTypedArray.class -android/support/v7/widget/Toolbar.class -android/support/v7/widget/LinearLayoutCompat$OrientationMode.class -android/support/v7/widget/LinearLayoutCompat.class -android/support/v7/widget/LinearLayoutCompat$DividerMode.class -android/support/v7/widget/LinearLayoutCompat$LayoutParams.class -android/support/v7/widget/ActionMenuView$LayoutParams.class android/support/v4/view/GravityCompat.class android/support/v4/view/ViewCompat$AccessibilityLiveRegion.class android/support/v4/view/MenuCompat.class @@ -129,12 +67,74 @@ android/support/v4/widget/SlidingPaneLayout.class android/support/v4/widget/DrawerLayout$DrawerListener.class android/support/v4/widget/MaterialProgressDrawable$StartCurveInterpolator.class android/support/v4/widget/ResourceCursorAdapter.class +android/support/v7/view/ActionMode.class +android/support/v7/view/ActionMode$Callback.class +android/support/v7/app/ActionBar$TabListener.class +android/support/v7/app/ActionBarDrawerToggle$DelegateProvider.class +android/support/v7/app/ActionBar$OnMenuVisibilityListener.class +android/support/v7/app/ActionBarDrawerToggle$Delegate.class +android/support/v7/app/ActionBarActivity.class +android/support/v7/app/ActionBar.class +android/support/v7/app/ActionBar$Tab.class +android/support/v7/app/ActionBar$LayoutParams.class +android/support/v7/app/AppCompatActivity.class +android/support/v7/app/AppCompatCallback.class +android/support/v7/app/ActionBarDrawerToggle.class +android/support/v7/app/ActionBar$OnNavigationListener.class +android/support/v7/app/ActionBar$NavigationMode.class +android/support/v7/app/ActionBar$DisplayOptions.class +android/support/v7/app/AppCompatDelegate.class +android/support/v7/internal/view/menu/MenuItemImpl.class +android/support/v7/internal/widget/AdapterViewCompat.class +android/support/v7/internal/widget/ViewUtils.class +android/support/v7/internal/widget/TintTypedArray.class +android/support/v7/widget/Toolbar.class +android/support/v7/widget/LinearLayoutCompat$OrientationMode.class +android/support/v7/widget/LinearLayoutCompat.class +android/support/v7/widget/LinearLayoutCompat$DividerMode.class +android/support/v7/widget/LinearLayoutCompat$LayoutParams.class +android/support/v7/widget/ActionMenuView$LayoutParams.class +android/support/annotation/StyleableRes.class +android/support/annotation/IntDef.class +android/support/annotation/AnyRes.class +android/support/annotation/AnimRes.class +android/support/annotation/AttrRes.class +android/support/annotation/Nullable.class +android/support/annotation/StyleRes.class +android/support/annotation/StringRes.class +android/support/annotation/MenuRes.class +android/support/annotation/NonNull.class +android/support/annotation/XmlRes.class +android/support/annotation/ArrayRes.class +android/support/annotation/InterpolatorRes.class +android/support/annotation/IntegerRes.class +android/support/annotation/FractionRes.class +android/support/annotation/AnimatorRes.class +android/support/annotation/DimenRes.class +android/support/annotation/RawRes.class +android/support/annotation/PluralsRes.class +android/support/annotation/BoolRes.class +android/support/annotation/DrawableRes.class +android/support/annotation/LayoutRes.class +android/support/annotation/IdRes.class +android/support/annotation/StringDef.class +android/support/annotation/ColorRes.class +rx/annotations/Beta.class +rx/annotations/Experimental.class +android/support/multidex/MultiDex$V14.class +android/support/multidex/MultiDex$V19.class +android/support/multidex/MultiDex$V4.class +android/support/multidex/MultiDex.class +android/support/multidex/MultiDexApplication.class +android/support/multidex/MultiDexExtractor$1.class +android/support/multidex/MultiDexExtractor.class +android/support/multidex/ZipUtil$CentralDirectory.class +android/support/multidex/ZipUtil.class android/support/v4/view/LayoutInflaterFactory.class android/support/v4/app/ActivityCompatHoneycomb.class android/support/v7/appcompat/R$styleable.class android/support/v7/appcompat/R.class com/ceabie/demo/AppApplication.class -com/ceabie/demo/FirstActivity.class com/ceabie/demo/MainActivity$1.class com/ceabie/demo/MainActivity.class demo/ceabie/com/demo/R$id.class diff --git a/DexKnifePlugin/app/src/main/java/com/ceabie/demo/MainActivity2.java b/DexKnifePlugin/app/src/main/java/com/ceabie/demo/MainActivity2.java new file mode 100644 index 0000000..b5984a5 --- /dev/null +++ b/DexKnifePlugin/app/src/main/java/com/ceabie/demo/MainActivity2.java @@ -0,0 +1,59 @@ +package com.ceabie.demo; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.TextView; + +import demo.ceabie.com.demo.R; +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import rx.functions.Func1; +import rx.schedulers.Schedulers; + +public class MainActivity2 extends AppCompatActivity { + + private TextView mViewById; + private long mMillis; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + mViewById = (TextView) findViewById(R.id.text); + + findViewById(R.id.btn_save_photo).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int dfg = 12111111; + Observable.just(1, 2, dfg) + .map(new Func1() { + @Override + public Integer call(Integer integer) { + return integer + 10; + } + }) +// .flatMap(new Func1>() { +// @Override +// public Observable call(Integer integer) { +// return Observable.just(integer + 10); +// } +// }) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Action1() { + @Override + public void call(Integer integer) { + log(String.valueOf(integer)); + } + }); + } + }); + } + + + private void log(final String stext) { + mViewById.setText(mViewById.getText().toString() + "\n" + stext); + } +} diff --git a/DexKnifePlugin/build.gradle b/DexKnifePlugin/build.gradle index 37499a0..71c3d89 100644 --- a/DexKnifePlugin/build.gradle +++ b/DexKnifePlugin/build.gradle @@ -1,13 +1,13 @@ buildscript { repositories { - maven { url uri('repo') } + maven { url uri('./repo') } jcenter() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' - classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.1' + classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.2' } } diff --git a/DexKnifePlugin/gradle-dexknife-plugin/build.gradle b/DexKnifePlugin/gradle-dexknife-plugin/build.gradle index eb1f4fa..55ccedf 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/build.gradle +++ b/DexKnifePlugin/gradle-dexknife-plugin/build.gradle @@ -3,6 +3,7 @@ buildscript { mavenLocal() jcenter() } + dependencies { classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1" classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.3" @@ -29,18 +30,100 @@ configurations { compile.extendsFrom provided } +compileGroovy { + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 + options.encoding = "UTF-8" +} + +//sourceSets { +// main { +// compileClasspath += configurations.provided +//// runtimeClasspath += configurations.provided +// } +//} + dependencies { compile gradleApi() compile localGroovy() - provided 'com.android.tools.build:builder:1.5.0' - provided 'com.android.tools.build:gradle-core:1.5.0' + provided 'com.android.tools.build:builder:2.1.3' + provided 'com.android.tools.build:gradle-core:2.1.3' +} + +//version = "${PUBLIC_VERSION}" +//group = 'com.ceabie.dextools' +// +//def pomConfig = { +// licenses { +// license { +// name "The Apache Software License, Version 2.0" +// url "http://www.apache.org/licenses/LICENSE-2.0.txt" +// distribution "repo" +// } +// } +// developers { +// developer { +// id "ceabie" +// name "ceabie" +// email "ceabie@gmail.com" +// } +// } +//} +// +//publishing { +// publications { +// mavenJava(MavenPublication) { +// from components.java +// artifact sourcesJar +// +// pom.withXml { +// def root = asNode() +// root.appendNode('description', 'A simple android gradle plugin to use the wildcards of package to smart split the specified classes to second dex.') +// root.children().last() + pomConfig +// } +// } +// } +//} +// +//bintray { +// user = bintrayUser +// key = bintrayApiKey +// +// publications = ['mavenJava'] +// pkg { +// repo = 'gradle-plugins' +// name = 'gradle-dexknife-plugin' +// labels = ['gradle', 'plugin', 'dex', 'split sex', 'multidex'] +// websiteUrl = POM_URL +// vcsUrl = POM_URL + '.git' +// issueTrackerUrl = POM_URL + '/issues' +// licenses = ["Apache-2.0"] +// version { +// name = "${PUBLIC_VERSION}" +// attributes = ['gradle-plugin': 'com.ceabie.dextools:gradle-dexknife-plugin'] +// } +// } +// publish = true +//} + +task sourcesJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'sources' +} + +artifacts { + archives sourcesJar +} + +task wrapper(type: Wrapper, description: 'Gradle Wrapper task') { + gradleVersion = '2.8' } uploadArchives { repositories { mavenDeployer { repository(url: uri('../repo')) - pom.version = "2.0.1" + pom.version = "${DEV_VERSION}" pom.artifactId = "gradle-dexknife-plugin" pom.groupId = "com.ceabie.dextools" } diff --git a/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties b/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties new file mode 100644 index 0000000..dd9513d --- /dev/null +++ b/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties @@ -0,0 +1,2 @@ +PUBLIC_VERSION=1.5.6 +DEV_VERSION=2.0.2 \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java index cc217e2..8fc9018 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java +++ b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java @@ -25,8 +25,11 @@ * @author ceabie */ public class DexKnifeConfig { - public PatternSet patternSet; - public boolean useSuggest = true; - public boolean logMainList = false; - public Set additionalParameters; + PatternSet patternSet; + PatternSet suggestPatternSet; + boolean useSuggest = true; + boolean filterSuggest = false; + boolean logMainList = false; + boolean logFilterSuggest = false; + Set additionalParameters; } diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy index 9752664..58f1299 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy +++ b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy @@ -20,8 +20,6 @@ import org.gradle.api.Project /** * the spilt tools plugin. - * - * @author ceabie */ public class DexKnifePlugin implements Plugin { diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java index 3981935..e7d1235 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java +++ b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java @@ -21,16 +21,9 @@ import org.gradle.api.specs.Specs; import org.gradle.api.tasks.util.PatternSet; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.io.*; +import java.util.*; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -46,12 +39,16 @@ public class DexSplitTools { private static final String DEX_MINIMAL_MAIN_DEX = "--minimal-main-dex"; - private static final String DEX_KNIFE_CFG_DEX_PARAM = "-dex-param "; - private static final String DEX_KNIFE_CFG_SPLIT = "-split "; - private static final String DEX_KNIFE_CFG_KEEP = "-keep "; + private static final String DEX_KNIFE_CFG_DEX_PARAM = "-dex-param"; + private static final String DEX_KNIFE_CFG_SPLIT = "-split"; + private static final String DEX_KNIFE_CFG_KEEP = "-keep"; private static final String DEX_KNIFE_CFG_AUTO_MAINDEX = "-auto-maindex"; private static final String DEX_KNIFE_CFG_DONOT_USE_SUGGEST = "-donot-use-suggest"; private static final String DEX_KNIFE_CFG_LOG_MAIN_DEX = "-log-mainlist"; + private static final String DEX_KNIFE_CFG_FILTER_SUGGEST = "-filter-suggest"; + private static final String DEX_KNIFE_CFG_SUGGEST_SPLIT = "-suggest-split"; + private static final String DEX_KNIFE_CFG_SUGGEST_KEEP = "-suggest-keep"; + private static final String DEX_KNIFE_CFG_LOG_FILTER_SUGGEST = "-log-filter-suggest"; private static final String MAINDEXLIST_TXT = "maindexlist.txt"; private static final String MAPPING_FLAG = " -> "; @@ -104,13 +101,15 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except BufferedReader reader = new BufferedReader(new FileReader(project.file(DEX_KNIFE_CFG_TXT))); DexKnifeConfig dexKnifeConfig = new DexKnifeConfig(); + String line; + boolean matchCmd; boolean minimalMainDex = true; - Set addParams = new HashSet<>(); - String line; - ArrayList splitToSecond = new ArrayList<>(); - ArrayList keepMain = new ArrayList<>(); + Set splitToSecond = new HashSet<>(); + Set keepMain = new HashSet<>(); + Set splitSuggest = new HashSet<>(); + Set keepSuggest = new HashSet<>(); while ((line = reader.readLine()) != null) { line = line.trim(); @@ -128,33 +127,52 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except } String cmd = line.toLowerCase(); - - System.out.println("DexKnife Config: " + cmd); + matchCmd = true; if (DEX_KNIFE_CFG_AUTO_MAINDEX.equals(cmd)) { minimalMainDex = false; - } else if (cmd.startsWith(DEX_KNIFE_CFG_DEX_PARAM)) { + } else if (matchCommand(cmd, DEX_KNIFE_CFG_DEX_PARAM)) { String param = line.substring(DEX_KNIFE_CFG_DEX_PARAM.length()).trim(); if (!param.toLowerCase().startsWith("--main-dex-list")) { addParams.add(param); } - } else if (cmd.startsWith(DEX_KNIFE_CFG_SPLIT)) { + } else if (matchCommand(cmd, DEX_KNIFE_CFG_SPLIT)) { String sPattern = line.substring(DEX_KNIFE_CFG_SPLIT.length()).trim(); addClassFilePath(sPattern, splitToSecond); - } else if (cmd.startsWith(DEX_KNIFE_CFG_KEEP)) { + } else if (matchCommand(cmd, DEX_KNIFE_CFG_KEEP)) { String sPattern = line.substring(DEX_KNIFE_CFG_KEEP.length()).trim(); addClassFilePath(sPattern, keepMain); } else if (DEX_KNIFE_CFG_DONOT_USE_SUGGEST.equals(cmd)) { dexKnifeConfig.useSuggest = false; + } else if (DEX_KNIFE_CFG_FILTER_SUGGEST.equals(cmd)) { + dexKnifeConfig.filterSuggest = true; + } else if (DEX_KNIFE_CFG_LOG_MAIN_DEX.equals(cmd)) { dexKnifeConfig.logMainList = true; + } else if (DEX_KNIFE_CFG_LOG_FILTER_SUGGEST.equals(cmd)) { + dexKnifeConfig.logFilterSuggest = true; + + }else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_SPLIT)) { + String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_SPLIT.length()).trim(); + addClassFilePath(sPattern, splitSuggest); + + } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_KEEP)) { + String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_KEEP.length()).trim(); + addClassFilePath(sPattern, keepSuggest); + } else if (!cmd.startsWith("-")) { addClassFilePath(line, splitToSecond); + } else { + matchCmd = false; + } + + if (matchCmd) { + System.out.println("DexKnife Config: " + line); } } @@ -164,11 +182,31 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except addParams.add(DEX_MINIMAL_MAIN_DEX); } + if (dexKnifeConfig.useSuggest) { + if (dexKnifeConfig.filterSuggest) { + splitSuggest.addAll(splitToSecond); + keepSuggest.addAll(keepMain); + } + +// for (String s : splitSuggest) { +// System.out.println("Suggest: " + s); +// } + + if (!splitSuggest.isEmpty() || !keepSuggest.isEmpty()) { + dexKnifeConfig.suggestPatternSet = new PatternSet() + .exclude(splitSuggest) + .include(keepSuggest); + } + } + + if (!splitToSecond.isEmpty() || !keepMain.isEmpty()) { +// for (String s : splitToSecond) { +// System.out.println(s); +// } dexKnifeConfig.patternSet = new PatternSet() .exclude(splitToSecond) .include(keepMain); - getMaindexSpec(dexKnifeConfig.patternSet); } else { dexKnifeConfig.useSuggest = true; System.err.println("DexKnife Warning: NO SET split Or keep path, it will use Suggest!"); @@ -179,10 +217,15 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except return dexKnifeConfig; } + private static boolean matchCommand(String text, String cmd) { + Pattern pattern = Pattern.compile("^" + cmd + "\\s+"); + return pattern.matcher(text).find(); + } + /** * add the class path to pattern list, and the single class pattern can work. */ - private static void addClassFilePath(String classPath, List patternList) { + private static void addClassFilePath(String classPath, Set patternList) { if (classPath != null && classPath.length() > 0) { if (classPath.endsWith(CLASS_SUFFIX)) { classPath = classPath.substring(0, classPath.length() - CLASS_SUFFIX.length()) @@ -213,12 +256,16 @@ private static Spec getMaindexSpec(PatternSet patternSet) { if (includeSpec != null && excludeSpec != null) { maindexSpec = Specs.or(includeSpec, Specs.not(excludeSpec)); } else { - maindexSpec = excludeSpec != null? Specs.not(excludeSpec): includeSpec; + if (excludeSpec == null) { + maindexSpec = Specs.satisfyAll(); + } else { + maindexSpec = Specs.not(excludeSpec); + } } } if (maindexSpec == null) { - maindexSpec = Specs.satisfyNone(); + maindexSpec = Specs.satisfyAll(); } return maindexSpec; @@ -236,7 +283,13 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, // get the adt's maindexlist HashSet mainCls = null; if (dexKnifeConfig.useSuggest) { - mainCls = getAdtMainDexClasses(andMainDexList); + + PatternSet patternSet = dexKnifeConfig.suggestPatternSet; + if (dexKnifeConfig.filterSuggest && patternSet == null) { + patternSet = dexKnifeConfig.patternSet; + } + + mainCls = getAdtMainDexClasses(andMainDexList, patternSet, dexKnifeConfig.logFilterSuggest); System.out.println("DexKnife: use suggest"); } @@ -249,7 +302,7 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, // get classes from mapping mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, mainCls); } else { - System.err.println("DexKnife: From Merged Jar: " + jarMergingOutputFile); + System.out.println("DexKnife: From MergedJar: " + jarMergingOutputFile); if (jarMergingOutputFile != null) { // get classes from merged jar mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, mainCls); @@ -305,6 +358,16 @@ private static ArrayList getMainClassesFromJar( return mainDexList; } + /** + * Gets main classes from mapping. + * + * @param mapping the mapping file + * @param mainDexPattern the main dex pattern + * @param mainCls the main cls + * @return the main classes from mapping + * @throws Exception the exception + * @author ceabie + */ private static ArrayList getMainClassesFromMapping( File mapping, PatternSet mainDexPattern, @@ -346,7 +409,8 @@ private static ArrayList getMainClassesFromMapping( /** * get the maindexlist of android gradle plugin */ - private static HashSet getAdtMainDexClasses(File outputDir) throws Exception { + private static HashSet getAdtMainDexClasses(File outputDir, PatternSet mainDexPattern, boolean logFilter) + throws Exception { if (outputDir == null || !outputDir.exists()) { System.err.println("DexKnife Warning: Android recommand Main dex is no exist, try run again!"); return null; @@ -355,10 +419,27 @@ private static HashSet getAdtMainDexClasses(File outputDir) throws Excep HashSet mainCls = new HashSet<>(); BufferedReader reader = new BufferedReader(new FileReader(outputDir)); - String line; + ClassFileTreeElement treeElement = new ClassFileTreeElement(); + Spec asSpec = mainDexPattern != null? getMaindexSpec(mainDexPattern): null; + + String line, clsPath; while ((line = reader.readLine()) != null) { line = line.trim(); - if (line.endsWith(CLASS_SUFFIX)) { + int clsPos = line.lastIndexOf(CLASS_SUFFIX); + if (clsPos != -1) { + if (asSpec != null) { + clsPath = line.substring(0, clsPos).replace('.', '/') + CLASS_SUFFIX; + treeElement.setClassPath(clsPath); + + boolean satisfiedBy = asSpec.isSatisfiedBy(treeElement); + if (!satisfiedBy) { + if (logFilter) System.out.println("DexKnife-Suggest: [Split] " + clsPath); + continue; + } + + if (logFilter) System.out.println("DexKnife-Suggest: [Keep] " + clsPath); + } + mainCls.add(line); } } @@ -371,4 +452,21 @@ private static HashSet getAdtMainDexClasses(File outputDir) throws Excep return mainCls; } + + static int getAndroidPluginVersion(String version) { + int size = version.length(); + int ver = 0; + for (int i = 0; i < size; i++) { + char c = version.charAt(i); + if (Character.isDigit(c) || c == '.') { + if (c != '.') { + ver = ver * 10 + c - '0'; + } + } else { + break; + } + } + + return ver; + } } \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy new file mode 100644 index 0000000..5651173 --- /dev/null +++ b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2016 ceabie (https://github.com/ceabie/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.ceabie.dexknife + +import com.android.build.gradle.internal.transforms.DexTransform +import com.android.builder.core.AndroidBuilder +import com.android.builder.core.DexOptions +import com.android.builder.core.ErrorReporter +import com.android.builder.sdk.TargetInfo +import com.android.ide.common.process.JavaProcessExecutor +import com.android.ide.common.process.ProcessException +import com.android.ide.common.process.ProcessExecutor +import com.android.ide.common.process.ProcessOutputHandler +import com.android.utils.ILogger +import groovy.transform.CompileStatic + +import java.lang.reflect.Field + +/** + * proxy the androidBuilder that plugin 1.5.0 to add '--minimal-main-dex' options. + * + * @author ceabie + */ +public class InjectAndroidBuilder extends AndroidBuilder { + + Collection mAddParams; + AndroidBuilder mAndroidBuilder; + + public InjectAndroidBuilder(String projectId, + String createdBy, + ProcessExecutor processExecutor, + JavaProcessExecutor javaProcessExecutor, + ErrorReporter errorReporter, + ILogger logger, + boolean verboseExec) { + super(projectId, createdBy, processExecutor, javaProcessExecutor, errorReporter, logger, verboseExec) + } + +// @Override // for < 2.2.0 + public void convertByteCode(Collection inputs, + File outDexFolder, + boolean multidex, + File mainDexList, + DexOptions dexOptions, + List additionalParameters, + boolean incremental, + boolean optimize, + ProcessOutputHandler processOutputHandler) + throws IOException, InterruptedException, ProcessException { + + println("DexKnife: convertByteCode before 2.2.0") + if (mAddParams != null) { + if (additionalParameters == null) { + additionalParameters = new ArrayList<>() + } + + mergeParams(additionalParameters, mAddParams) + } + + // groovy call super has bug + mAndroidBuilder.convertByteCode(inputs, outDexFolder, multidex, mainDexList, dexOptions, + additionalParameters, incremental, optimize, processOutputHandler); + } + +// @Override for >= 2.2.0 + public void convertByteCode(Collection inputs, + File outDexFolder, + boolean multidex, + File mainDexList, + final DexOptions dexOptions, + boolean optimize, + ProcessOutputHandler processOutputHandler) + throws IOException, InterruptedException, ProcessException { + + println("DexKnife:convertByteCode after 2.2.0") + + DexOptions dexOptionsProxy = dexOptions + + if (mAddParams != null) { + List additionalParameters = dexOptions.getAdditionalParameters() + if (additionalParameters == null) { + additionalParameters = new ArrayList<>() + } + + mergeParams(additionalParameters, mAddParams) + } + + mAndroidBuilder.convertByteCode(inputs, outDexFolder, multidex, mainDexList, dexOptionsProxy, + optimize, processOutputHandler); + } + + @CompileStatic + @Override + List getBootClasspath(boolean includeOptionalLibraries) { + return mAndroidBuilder.getBootClasspath(includeOptionalLibraries) + } + + @CompileStatic + @Override + List getBootClasspathAsStrings(boolean includeOptionalLibraries) { + return mAndroidBuilder.getBootClasspathAsStrings(includeOptionalLibraries) + } + + + @CompileStatic + static void mergeParams(List additionalParameters, Collection addParams) { + List mergeParam = new ArrayList<>() + for (String param : addParams) { + if (!additionalParameters.contains(param)) { + mergeParam.add(param) + } + } + + if (mergeParam.size() > 0) { + additionalParameters.addAll(mergeParam) + } + } + + + public static void proxyAndroidBuilder(DexTransform transform, Collection addParams) { + if (addParams != null && addParams.size() > 0) { + accessibleField(DexTransform.class, "androidBuilder") + .set(transform, getProxyAndroidBuilder(transform.androidBuilder, addParams)) + } + } + + private static AndroidBuilder getProxyAndroidBuilder(AndroidBuilder orgAndroidBuilder, + Collection addParams) { + InjectAndroidBuilder myAndroidBuilder = new InjectAndroidBuilder( + orgAndroidBuilder.mProjectId, + orgAndroidBuilder.mCreatedBy, + orgAndroidBuilder.getProcessExecutor(), + orgAndroidBuilder.mJavaProcessExecutor, + orgAndroidBuilder.getErrorReporter(), + orgAndroidBuilder.getLogger(), + orgAndroidBuilder.mVerboseExec) + + // if >= 2.2.0 + def to = myAndroidBuilder.respondsTo("setTargetInfo", TargetInfo.class) + if (to.size() > 0) { + myAndroidBuilder.setTargetInfo(orgAndroidBuilder.getTargetInfo()) + myAndroidBuilder.setSdkInfo(orgAndroidBuilder.getSdkInfo()) + myAndroidBuilder.setLibraryRequests(orgAndroidBuilder.mLibraryRequests) + } else { + myAndroidBuilder.setTargetInfo( + orgAndroidBuilder.getSdkInfo(), + orgAndroidBuilder.getTargetInfo(), + orgAndroidBuilder.mLibraryRequests) + } + + myAndroidBuilder.mAddParams = addParams + myAndroidBuilder.mAndroidBuilder = orgAndroidBuilder +// myAndroidBuilder.mBootClasspathFiltered = orgAndroidBuilder.mBootClasspathFiltered +// myAndroidBuilder.mBootClasspathAll = orgAndroidBuilder.mBootClasspathAll + + return myAndroidBuilder + } + + @CompileStatic + private static Field accessibleField(Class cls, String field) { + Field f = cls.getDeclaredField(field) + f.setAccessible(true) + return f + } +} diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/MultiDexAndroidBuilder.groovy b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/MultiDexAndroidBuilder.groovy deleted file mode 100644 index 2c41694..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/MultiDexAndroidBuilder.groovy +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife - -import com.android.build.gradle.internal.transforms.DexTransform -import com.android.builder.core.AndroidBuilder -import com.android.builder.core.DexOptions -import com.android.builder.core.ErrorReporter -import com.android.ide.common.process.JavaProcessExecutor -import com.android.ide.common.process.ProcessException -import com.android.ide.common.process.ProcessExecutor -import com.android.ide.common.process.ProcessOutputHandler -import com.android.utils.ILogger - -import java.lang.reflect.Field - -/** - * proxy the androidBuilder that plugin 1.5.0 to add '--minimal-main-dex' options. - * - * @author ceabie - */ -public class MultiDexAndroidBuilder extends AndroidBuilder { - - Collection mAddParams; - - public MultiDexAndroidBuilder(String projectId, - String createdBy, - ProcessExecutor processExecutor, - JavaProcessExecutor javaProcessExecutor, - ErrorReporter errorReporter, - ILogger logger, - boolean verboseExec) { - super(projectId, createdBy, processExecutor, javaProcessExecutor, errorReporter, logger, verboseExec) - } - - @Override - public void convertByteCode(Collection inputs, - File outDexFolder, - boolean multidex, - File mainDexList, - DexOptions dexOptions, - List additionalParameters, - boolean incremental, - boolean optimize, - ProcessOutputHandler processOutputHandler) - throws IOException, InterruptedException, ProcessException { - - if (mAddParams != null) { - if (additionalParameters == null) { - additionalParameters = [] - } - - additionalParameters += mAddParams //'--minimal-main-dex' - } - - super.convertByteCode(inputs, outDexFolder, multidex, mainDexList, dexOptions, - additionalParameters, incremental, optimize, processOutputHandler) - } - -// public static void proxyAndroidBuilder(TransformTask task) { -// task.setAndroidBuilder(getProxyAndroidBuilder(task.getBuilder())) -// } - - public static void proxyAndroidBuilder(DexTransform transform, Collection addParams) { - if (addParams != null && addParams.size() > 0) { - accessibleField(DexTransform.class, "androidBuilder") - .set(transform, getProxyAndroidBuilder(transform.androidBuilder, addParams)) - } - } - - private static AndroidBuilder getProxyAndroidBuilder(AndroidBuilder orgAndroidBuilder, - Collection addParams) { - MultiDexAndroidBuilder myAndroidBuilder = new MultiDexAndroidBuilder( - orgAndroidBuilder.mProjectId, - orgAndroidBuilder.mCreatedBy, - orgAndroidBuilder.getProcessExecutor(), - orgAndroidBuilder.mJavaProcessExecutor, - orgAndroidBuilder.getErrorReporter(), - orgAndroidBuilder.getLogger(), - orgAndroidBuilder.mVerboseExec) - - myAndroidBuilder.setTargetInfo( - orgAndroidBuilder.getSdkInfo(), - orgAndroidBuilder.getTargetInfo(), - orgAndroidBuilder.mLibraryRequests) - - myAndroidBuilder.mAddParams = addParams -// myAndroidBuilder.mBootClasspathFiltered = orgAndroidBuilder.mBootClasspathFiltered -// myAndroidBuilder.mBootClasspathAll = orgAndroidBuilder.mBootClasspathAll - - myAndroidBuilder - } - - private static Field accessibleField(Class cls, String field) { - Field f = cls.getDeclaredField(field) - f.setAccessible(true) - f - } -} diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy index d4d503a..e555460 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy +++ b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy @@ -17,6 +17,8 @@ package com.ceabie.dexknife import com.android.build.api.transform.Format import com.android.build.api.transform.Transform +import com.android.build.gradle.api.ApplicationVariant +import com.android.build.gradle.internal.incremental.InstantRunBuildContext import com.android.build.gradle.internal.pipeline.TransformTask import com.android.build.gradle.internal.transforms.DexTransform import org.gradle.api.Project @@ -36,7 +38,12 @@ public class SplitToolsFor150 extends DexSplitTools { return true; } - public static void processSplitDex(Project project, Object variant) { + public static void processSplitDex(Project project, ApplicationVariant variant) { + if (isInInstantRunMode(variant)) { + System.err.println("DexKnife: Instant Run mode, DexKnife is auto disabled!") + return + } + TransformTask dexTask // TransformTask proGuardTask TransformTask jarMergingTask @@ -51,7 +58,6 @@ public class SplitToolsFor150 extends DexSplitTools { Transform transform = theTask.transform String transformName = transform.name - println("DexKnife: task: " + transformName) // if (minifyEnabled && "proguard".equals(transformName)) { // ProGuardTransform // proGuardTask = theTask // } else @@ -73,6 +79,8 @@ public class SplitToolsFor150 extends DexSplitTools { DexTransform dexTransform = it.transform File fileAdtMainList = dexTransform.mainDexListFile + println("DexKnife Adt Main: " + fileAdtMainList) + DexKnifeConfig dexKnifeConfig = getDexKnifeConfig(project) // 非混淆的,从合并后的jar文件中提起mainlist; @@ -94,8 +102,13 @@ public class SplitToolsFor150 extends DexSplitTools { if (processMainDexList(project, minifyEnabled, mappingFile, mergedJar, fileAdtMainList, dexKnifeConfig)) { + int version = getAndroidPluginVersion(getAndroidGradlePluginVersion()) + println("DexKnife: AndroidPluginVersion: " + version) + + // after 2.2.0, it can additionalParameters, but it is a copy in task + // 替换 AndroidBuilder - MultiDexAndroidBuilder.proxyAndroidBuilder(dexTransform, + InjectAndroidBuilder.proxyAndroidBuilder(dexTransform, dexKnifeConfig.additionalParameters) // 替换这个文件 @@ -110,4 +123,15 @@ public class SplitToolsFor150 extends DexSplitTools { } } } + + private static boolean isInInstantRunMode(Object variant) { + try { + def scope = variant.getVariantData().getScope() + InstantRunBuildContext instantRunBuildContext = scope.getInstantRunBuildContext() + return instantRunBuildContext.isInInstantRunMode() + } catch (Throwable e) { + } + + return false + } } \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/temp/AbstractSplitTools.groovy b/DexKnifePlugin/gradle-dexknife-plugin/temp/AbstractSplitTools.groovy deleted file mode 100644 index d01d206..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/temp/AbstractSplitTools.groovy +++ /dev/null @@ -1,159 +0,0 @@ -package com.ceabie.dexknife - -import org.gradle.api.Project - - -/** - * the base of spilt tools. - * - * @author ceabie - */ -public abstract class AbstractSplitTools { - protected Project mProject; - - public AbstractSplitTools(Project project) { - mProject = project - } - - public abstract void processSplitDex(Object variant); - - public static void processMainDexList(Project project, Object variant, File mergedJar) { - genMainDexList(project, variant, getSecondPackages(project), mergedJar) - } - - protected void processMainDexList(Object variant, File mergedJar) { - genMainDexList(mProject, variant, getSecondPackages(mProject), mergedJar) - } - - /** - * 获得第二个分包的类过滤列表 - */ - private static ArrayList getSecondPackages(Project project) { - ArrayList secDexPackages = new ArrayList<>() - project.file("second_dex_package_list.txt").withReader { r -> - for (it in r.readLines()) { - String s = it.trim() - if (s.size() > 0) { - secDexPackages.add(s) - } - } - } - - return secDexPackages - } - - /** - * 生成主dex的类列表 - */ - private static void genMainDexList(Project project, Object variant, - List secDexPackages, File mergedJar) { - println ":genMainDexList" - - String[] secPackages = null - HashSet secPackageSet = null - def scope = variant.getVariantData().getScope() - - if (variant.buildType.minifyEnabled) { - // 从mapping文件中收集混淆后的 class - File mapping = variant.mappingFile; - secPackageSet = getClassesFromMapping(mapping, secDexPackages) - - if (mergedJar == null) { - mergedJar = scope.proguardOutputFile - } - } else { - def size = secDexPackages.size() - secPackages = new String[size] - for (int i = 0; i < size; i++) { - secPackages[i] = secDexPackages.get(i).replace('.', '/') - } - - if (mergedJar == null) { - // multi-dex/allclasses.jar - mergedJar = scope.jarMergingOutputFile - } - } - - File keepFile = project.file("maindexlist.txt") - keepFile.delete() - - // 获得 ADT 推荐的 maindexlist - File andMainDexList = scope.mainDexListFile - HashSet mainCls = getAdtMainDexClasses(andMainDexList); - - def clsfile = new java.util.zip.ZipFile(mergedJar) - - for (entry in clsfile.entries()) { - String entryName = entry.getName() - - if (entryName.endsWith(".class")) { - boolean isSecDex = false - if (secPackageSet != null) { - isSecDex = secPackageSet.contains(entryName) - } else if (secPackages != null) { - for (String pack : secPackages) { - if (entryName.startsWith(pack)) { - isSecDex = true - break - } - } - } - - // 如果ADT的类在主dex,则不放在第二个dex - if (isSecDex && mainCls != null && mainCls.contains(entryName)) { - isSecDex = false; - } - - if (!isSecDex) { - keepFile.withWriterAppend { w -> - w << entryName << '\n' - } - } else { - println entryName - } - } - - } - - clsfile.close() - } - - private static HashSet getClassesFromMapping(File mapping, List secDexPackages) { - HashSet secPackSet = new HashSet<>(); - mapping.withReader { r -> - for (line in r.readLines()) { - for (it in secDexPackages) { - if (line.startsWith(it)) { - int ip = line.indexOf("-> ") - if (ip != -1) { - def sMap = line.substring(ip + 3, line.length() - 1) - secPackSet.add(sMap.replace('.', '/') + ".class") - } - } - } - } - } - - return secPackSet; - } - - /** - * 获取系统推荐在主dex的列表 - */ - private static HashSet getAdtMainDexClasses(File outputDir) { - HashSet mainCls = new HashSet<>() - outputDir.withReader { r -> - for (it in r.readLines()) { - if (it.endsWith(".class")) { - mainCls.add(it) - } - } - } - - if (mainCls.size() == 0) { - mainCls = null - } - - return mainCls - } -} \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/temp/MultiDexAndroidBuilder.java b/DexKnifePlugin/gradle-dexknife-plugin/temp/MultiDexAndroidBuilder.java deleted file mode 100644 index 387c2d7..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/temp/MultiDexAndroidBuilder.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.ceabie.dexknife; - -import com.android.build.gradle.internal.transforms.DexTransform; -import com.android.builder.core.AndroidBuilder; -import com.android.builder.core.ErrorReporter; -import com.android.ide.common.process.JavaProcessExecutor; -import com.android.ide.common.process.ProcessExecutor; -import com.android.utils.ILogger; - -import java.lang.reflect.Field; - -/** - * proxy the androidBuilder that plugin 1.5.0 to add '--minimal-main-dex' options. - * - * @author ceabie - */ -public class MultiDexAndroidBuilder extends AndroidBuilder { - public MultiDexAndroidBuilder(String projectId, - String createdBy, - ProcessExecutor processExecutor, - JavaProcessExecutor javaProcessExecutor, - ErrorReporter errorReporter, - ILogger logger, - boolean verboseExec) { - - super(projectId, createdBy, processExecutor, - javaProcessExecutor, errorReporter, - logger, verboseExec); - } - - public static void proxyAndroidBuilder(DexTransform transform) throws Exception { - Field fieldAndroidBuilder = accessibleField(DexTransform.class, "androidBuilder"); - AndroidBuilder orgAndroidBuilder = (AndroidBuilder) fieldAndroidBuilder.get(transform); - fieldAndroidBuilder.set(transform, getProxyAndroidBuilder(orgAndroidBuilder)); - } - - private static AndroidBuilder getProxyAndroidBuilder(AndroidBuilder orgAndroidBuilder) throws Exception { - - Field fieldProjectId = accessibleField(AndroidBuilder.class, "mProjectId"); - Field fieldCreatedBy = accessibleField(AndroidBuilder.class, "mCreatedBy"); - Field fieldJavaProcessExecutor = accessibleField(AndroidBuilder.class, "mJavaProcessExecutor"); - Field fieldVerboseExec = accessibleField(AndroidBuilder.class, "mVerboseExec"); - Field fieldLibraryRequests = accessibleField(AndroidBuilder.class, "mLibraryRequests"); - - MultiDexAndroidBuilder myAndroidBuilder = new MultiDexAndroidBuilder( - (String) fieldProjectId.get(orgAndroidBuilder), - (String) fieldCreatedBy.get(orgAndroidBuilder), - orgAndroidBuilder.getProcessExecutor(), - (JavaProcessExecutor)fieldJavaProcessExecutor.get(orgAndroidBuilder), - orgAndroidBuilder.getErrorReporter(), - orgAndroidBuilder.getLogger(), - (boolean) fieldVerboseExec.get(orgAndroidBuilder)); - - myAndroidBuilder.setTargetInfo( - orgAndroidBuilder.getSdkInfo(), - orgAndroidBuilder.getTargetInfo(), - fieldLibraryRequests.get(orgAndroidBuilder)); - -// myAndroidBuilder.mBootClasspathFiltered = orgAndroidBuilder.mBootClasspathFiltered -// myAndroidBuilder.mBootClasspathAll = orgAndroidBuilder.mBootClasspathAll - - return myAndroidBuilder; - } - - private static Field accessibleField(Class cls, String field) throws NoSuchFieldException { - Field f = cls.getDeclaredField(field); - f.setAccessible(true); - return f; - } -} diff --git a/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties b/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties index 122a0dc..e5ad1b4 100644 --- a/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties +++ b/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 28 10:00:20 PST 2015 +#Tue Sep 20 15:06:11 CST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/DexKnifePlugin/lib1/.gitignore b/DexKnifePlugin/lib1/.gitignore new file mode 100644 index 0000000..e8fa30f --- /dev/null +++ b/DexKnifePlugin/lib1/.gitignore @@ -0,0 +1,2 @@ +/build +*.iml diff --git a/DexKnifePlugin/lib1/build.gradle b/DexKnifePlugin/lib1/build.gradle new file mode 100644 index 0000000..adaf966 --- /dev/null +++ b/DexKnifePlugin/lib1/build.gradle @@ -0,0 +1,25 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VER) + buildToolsVersion project.BUILD_TOOLS_VER + + defaultConfig { + minSdkVersion Integer.parseInt(project.MIN_SDK_VER) + targetSdkVersion Integer.parseInt(project.TARGET_SDK_VERSION) + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile "com.android.support:appcompat-v7:${SUPPORT_VERSION}" +} diff --git a/DexKnifePlugin/lib1/proguard-rules.pro b/DexKnifePlugin/lib1/proguard-rules.pro new file mode 100644 index 0000000..8010560 --- /dev/null +++ b/DexKnifePlugin/lib1/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in D:\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/DexKnifePlugin/lib1/src/main/AndroidManifest.xml b/DexKnifePlugin/lib1/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6d527c3 --- /dev/null +++ b/DexKnifePlugin/lib1/src/main/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/DexKnifePlugin/lib1/src/main/res/values/strings.xml b/DexKnifePlugin/lib1/src/main/res/values/strings.xml new file mode 100644 index 0000000..e897d14 --- /dev/null +++ b/DexKnifePlugin/lib1/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Lib1 + diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6a1238f81f91273d88085b8aba9525ea930a0403 GIT binary patch literal 39903 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 literal 0 HcmV?d00001 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 new file mode 100644 index 0000000..21e1398 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 @@ -0,0 +1 @@ +a217530cc52eecb9c21f7fd1d17268dd \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 new file mode 100644 index 0000000..6596572 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 @@ -0,0 +1 @@ +50d30810daa3dca6f97f805a8e53e6f9661cf6e4 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom similarity index 93% rename from repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom rename to DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom index af99925..c4f75b0 100644 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom @@ -4,5 +4,5 @@ 4.0.0 com.ceabie.dextools gradle-dexknife-plugin - 2.0.1 + 2.0.0 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 new file mode 100644 index 0000000..f526914 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 @@ -0,0 +1 @@ +f92f147a2c254aea34efd104c6e087ca \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 new file mode 100644 index 0000000..d4c7afe --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 @@ -0,0 +1 @@ +3681338a03f9c6e1f4d20ed48d3817b070645bb1 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..d3db649509f9971ee95a8b9de764d6a3d11de656 GIT binary patch literal 13319 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 YCkgtQyaoXH`uXDcoCi(6bJzg?2j=wI0{{R3 literal 0 HcmV?d00001 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 new file mode 100644 index 0000000..8c7c97c --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 @@ -0,0 +1 @@ +3f9d7434355ddde497a237203d8dd60a \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 new file mode 100644 index 0000000..58c7796 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 @@ -0,0 +1 @@ +d4d943bc8228de0d65bddafabcc2ce333017c03d \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..19037e558213ddd61212983217d8fe560e3eb89f GIT binary patch literal 43397 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 z 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 literal 0 HcmV?d00001 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 new file mode 100644 index 0000000..f432054 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 @@ -0,0 +1 @@ +26147badbff68f8e7ecc79081be6b906 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 new file mode 100644 index 0000000..c66e71e --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 @@ -0,0 +1 @@ +f5ab73500dc4d8868304d7a8731f86d84f63ced6 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom new file mode 100644 index 0000000..1924b37 --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom @@ -0,0 +1,8 @@ + + + 4.0.0 + com.ceabie.dextools + gradle-dexknife-plugin + 2.0.2 + diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 new file mode 100644 index 0000000..f0914df --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 @@ -0,0 +1 @@ +adea40026d297e149210a01b2b89f527 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 new file mode 100644 index 0000000..d0270dc --- /dev/null +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 @@ -0,0 +1 @@ +c7d6573638a789e47b5765ffcab09f3be0ba035f \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml index cbeb5a3..b618fa3 100644 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml @@ -3,10 +3,11 @@ com.ceabie.dextools gradle-dexknife-plugin - 2.0.1 + 2.0.2 - 2.0.1 + 2.0.0 + 2.0.2 - 20160821115305 + 20160920073808 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 index 68ccfab..d10478e 100644 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 @@ -1 +1 @@ -b530b97185c6934c7e42bafb6a3e0bb0 \ No newline at end of file +d930a21e5fec7fdc206c9d1125604b59 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 index ddcf329..28f7787 100644 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 +++ b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 @@ -1 +1 @@ -cd50b635b3b3913c447da72f6d4db455d5a03bd8 \ No newline at end of file +406e547c9497edbe78ead40c2be96c0d103290e6 \ No newline at end of file diff --git "a/DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" "b/DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" "b/DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" new file mode 100644 index 0000000..e69de29 diff --git a/DexKnifePlugin/settings.gradle b/DexKnifePlugin/settings.gradle index 3319259..1d8667f 100644 --- a/DexKnifePlugin/settings.gradle +++ b/DexKnifePlugin/settings.gradle @@ -1,4 +1,3 @@ -include ':app' +include ':app', ':lib1' include ':gradle-dexknife-plugin' - diff --git a/README.md b/README.md index 25f8d8d..3034057 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 -注2:本插件是基于[DexKnifePlugin 1.5.3](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 +注2:本插件是基于[DexKnifePlugin 1.5.6](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 ##填坑之路 ###坑1:65536 ,So easy! @@ -119,7 +119,7 @@ buildscript { } dependencies { - classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.1' + classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.2' } } @@ -176,7 +176,7 @@ Error:Execution failed for task ':Toon:transformClassesWithDexForDebug'.> java.l ``` 发生此错误只要切换一次Gradle版本就OK了,比如1.5.0 -**错误2:** +**错误2:**(已修复) ``` Unsupported major.minor version 52.0 ``` diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6a1238f81f91273d88085b8aba9525ea930a0403 GIT binary patch literal 39903 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 literal 0 HcmV?d00001 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 new file mode 100644 index 0000000..21e1398 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 @@ -0,0 +1 @@ +a217530cc52eecb9c21f7fd1d17268dd \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 new file mode 100644 index 0000000..6596572 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 @@ -0,0 +1 @@ +50d30810daa3dca6f97f805a8e53e6f9661cf6e4 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom new file mode 100644 index 0000000..c4f75b0 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom @@ -0,0 +1,8 @@ + + + 4.0.0 + com.ceabie.dextools + gradle-dexknife-plugin + 2.0.0 + diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 new file mode 100644 index 0000000..f526914 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 @@ -0,0 +1 @@ +f92f147a2c254aea34efd104c6e087ca \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 new file mode 100644 index 0000000..d4c7afe --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 @@ -0,0 +1 @@ +3681338a03f9c6e1f4d20ed48d3817b070645bb1 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar deleted file mode 100644 index 289ff047600f85625f136013e99f12c438fa85e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40413 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 YCkgtQyaoXH`uXDcoCi(6bJzg?2j=wI0{{R3 literal 0 HcmV?d00001 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 new file mode 100644 index 0000000..8c7c97c --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 @@ -0,0 +1 @@ +3f9d7434355ddde497a237203d8dd60a \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 new file mode 100644 index 0000000..58c7796 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 @@ -0,0 +1 @@ +d4d943bc8228de0d65bddafabcc2ce333017c03d \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..19037e558213ddd61212983217d8fe560e3eb89f GIT binary patch literal 43397 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 z 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 literal 0 HcmV?d00001 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 new file mode 100644 index 0000000..f432054 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 @@ -0,0 +1 @@ +26147badbff68f8e7ecc79081be6b906 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 new file mode 100644 index 0000000..c66e71e --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 @@ -0,0 +1 @@ +f5ab73500dc4d8868304d7a8731f86d84f63ced6 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom new file mode 100644 index 0000000..1924b37 --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom @@ -0,0 +1,8 @@ + + + 4.0.0 + com.ceabie.dextools + gradle-dexknife-plugin + 2.0.2 + diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 new file mode 100644 index 0000000..f0914df --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 @@ -0,0 +1 @@ +adea40026d297e149210a01b2b89f527 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 new file mode 100644 index 0000000..d0270dc --- /dev/null +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 @@ -0,0 +1 @@ +c7d6573638a789e47b5765ffcab09f3be0ba035f \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml index cbeb5a3..b618fa3 100644 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml @@ -3,10 +3,11 @@ com.ceabie.dextools gradle-dexknife-plugin - 2.0.1 + 2.0.2 - 2.0.1 + 2.0.0 + 2.0.2 - 20160821115305 + 20160920073808 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 index 68ccfab..d10478e 100644 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 @@ -1 +1 @@ -b530b97185c6934c7e42bafb6a3e0bb0 \ No newline at end of file +d930a21e5fec7fdc206c9d1125604b59 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 index ddcf329..28f7787 100644 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 +++ b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 @@ -1 +1 @@ -cd50b635b3b3913c447da72f6d4db455d5a03bd8 \ No newline at end of file +406e547c9497edbe78ead40c2be96c0d103290e6 \ No newline at end of file diff --git "a/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" "b/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" "b/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" new file mode 100644 index 0000000..e69de29 From 59d48784460935ee9c9f48dadb2d534a542f6436 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Tue, 20 Sep 2016 16:19:01 +0800 Subject: [PATCH 06/21] delete old version --- .../2.0.0/gradle-dexknife-plugin-2.0.0.jar | Bin 39903 -> 0 bytes .../2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 | 1 - .../2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 | 1 - .../2.0.0/gradle-dexknife-plugin-2.0.0.pom | 8 -------- .../2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 | 1 - .../2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 | 1 - 6 files changed, 12 deletions(-) delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar deleted file mode 100644 index 6a1238f81f91273d88085b8aba9525ea930a0403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39903 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 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 deleted file mode 100644 index 21e1398..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -a217530cc52eecb9c21f7fd1d17268dd \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 deleted file mode 100644 index 6596572..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -50d30810daa3dca6f97f805a8e53e6f9661cf6e4 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom deleted file mode 100644 index c4f75b0..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom +++ /dev/null @@ -1,8 +0,0 @@ - - - 4.0.0 - com.ceabie.dextools - gradle-dexknife-plugin - 2.0.0 - diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 deleted file mode 100644 index f526914..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -f92f147a2c254aea34efd104c6e087ca \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 deleted file mode 100644 index d4c7afe..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -3681338a03f9c6e1f4d20ed48d3817b070645bb1 \ No newline at end of file From ba3fe05e134601f09ca490262655e30c4816b561 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Thu, 29 Sep 2016 09:25:30 +0800 Subject: [PATCH 07/21] add jcenter,add extended parameters for plugin --- DexKnifePlugin/.gitignore | 12 ++ DexKnifePlugin/app/build.gradle | 30 +++- DexKnifePlugin/build.gradle | 3 +- .../.gitignore | 0 DexKnifePlugin/dexknife-plus/build.gradle | 74 ++++++++++ .../dexknife-plus/gradle.properties | 6 + .../ceabie/dexknife/ClassFileTreeElement.java | 0 .../com/ceabie/dexknife/DexKnifeConfig.java | 0 .../ceabie/dexknife/DexKnifeExtension.groovy | 7 + .../com/ceabie/dexknife/DexKnifePlugin.groovy | 121 ++++++++++++++++ .../com/ceabie/dexknife/DexSplitTools.java | 72 ++++++---- .../dexknife/InjectAndroidBuilder.groovy | 0 .../ceabie/dexknife/SplitToolsFor130.groovy | 0 .../ceabie/dexknife/SplitToolsFor150.groovy | 0 .../gradle-plugins/dexknifePlus.properties} | 0 .../gradle-dexknife-plugin/build.gradle | 131 ------------------ .../gradle-dexknife-plugin/gradle.properties | 2 - .../com/ceabie/dexknife/DexKnifePlugin.groovy | 97 ------------- .../2.0.0/gradle-dexknife-plugin-2.0.0.jar | Bin 39903 -> 0 bytes .../gradle-dexknife-plugin-2.0.0.jar.md5 | 1 - .../gradle-dexknife-plugin-2.0.0.jar.sha1 | 1 - .../2.0.0/gradle-dexknife-plugin-2.0.0.pom | 8 -- .../gradle-dexknife-plugin-2.0.0.pom.md5 | 1 - .../gradle-dexknife-plugin-2.0.0.pom.sha1 | 1 - .../2.0.1/gradle-dexknife-plugin-2.0.1.jar | Bin 40413 -> 0 bytes .../gradle-dexknife-plugin-2.0.1.jar.md5 | 1 - .../gradle-dexknife-plugin-2.0.1.jar.sha1 | 1 - .../2.0.1/gradle-dexknife-plugin-2.0.1.pom | 8 -- .../gradle-dexknife-plugin-2.0.1.pom.md5 | 1 - .../gradle-dexknife-plugin-2.0.1.pom.sha1 | 1 - .../gradle-dexknife-plugin-2.0.2-sources.jar | Bin 13319 -> 0 bytes ...adle-dexknife-plugin-2.0.2-sources.jar.md5 | 1 - ...dle-dexknife-plugin-2.0.2-sources.jar.sha1 | 1 - .../2.0.2/gradle-dexknife-plugin-2.0.2.jar | Bin 43397 -> 0 bytes .../gradle-dexknife-plugin-2.0.2.jar.md5 | 1 - .../gradle-dexknife-plugin-2.0.2.jar.sha1 | 1 - .../2.0.2/gradle-dexknife-plugin-2.0.2.pom | 8 -- .../gradle-dexknife-plugin-2.0.2.pom.md5 | 1 - .../gradle-dexknife-plugin-2.0.2.pom.sha1 | 1 - .../gradle-dexknife-plugin/maven-metadata.xml | 13 -- .../maven-metadata.xml.md5 | 1 - .../maven-metadata.xml.sha1 | 1 - ...6\345\214\205\346\217\222\344\273\266.txt" | 0 ...4\345\234\260\344\273\223\345\272\223.txt" | 0 DexKnifePlugin/settings.gradle | 2 +- README.md | 36 +++-- .../gradle-dexknife-plugin-2.0.2-sources.jar | Bin 13319 -> 0 bytes ...adle-dexknife-plugin-2.0.2-sources.jar.md5 | 1 - ...dle-dexknife-plugin-2.0.2-sources.jar.sha1 | 1 - .../2.0.2/gradle-dexknife-plugin-2.0.2.jar | Bin 43397 -> 0 bytes .../gradle-dexknife-plugin-2.0.2.jar.md5 | 1 - .../gradle-dexknife-plugin-2.0.2.jar.sha1 | 1 - .../2.0.2/gradle-dexknife-plugin-2.0.2.pom | 8 -- .../gradle-dexknife-plugin-2.0.2.pom.md5 | 1 - .../gradle-dexknife-plugin-2.0.2.pom.sha1 | 1 - .../gradle-dexknife-plugin/maven-metadata.xml | 13 -- .../maven-metadata.xml.md5 | 1 - .../maven-metadata.xml.sha1 | 1 - ...6\345\214\205\346\217\222\344\273\266.txt" | 0 ...4\345\234\260\344\273\223\345\272\223.txt" | 0 60 files changed, 317 insertions(+), 358 deletions(-) rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/.gitignore (100%) create mode 100644 DexKnifePlugin/dexknife-plus/build.gradle create mode 100644 DexKnifePlugin/dexknife-plus/gradle.properties rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java (100%) rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java (100%) create mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy create mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java (89%) rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy (100%) rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy (100%) rename DexKnifePlugin/{gradle-dexknife-plugin => dexknife-plus}/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy (100%) rename DexKnifePlugin/{gradle-dexknife-plugin/src/main/resources/META-INF/gradle-plugins/com.ceabie.dexnkife.properties => dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties} (100%) delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/build.gradle delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/gradle.properties delete mode 100644 DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 delete mode 100644 DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 delete mode 100644 "DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" delete mode 100644 "DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 delete mode 100644 repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 delete mode 100644 "repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" delete mode 100644 "repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" diff --git a/DexKnifePlugin/.gitignore b/DexKnifePlugin/.gitignore index d3ce82a..7cb5c9c 100644 --- a/DexKnifePlugin/.gitignore +++ b/DexKnifePlugin/.gitignore @@ -6,3 +6,15 @@ .DS_Store /build /captures +local.properties +.idea/compiler.xml +.idea/copyright/ +.idea/encodings.xml +.idea/gradle.xml +.idea/misc.xml +.idea/qaplug_profiles.xml +gradle/ +gradlew +gradlew.bat +repo/com/ceabie/ +repo/com/library/ diff --git a/DexKnifePlugin/app/build.gradle b/DexKnifePlugin/app/build.gradle index 0da9a3f..6a761f9 100644 --- a/DexKnifePlugin/app/build.gradle +++ b/DexKnifePlugin/app/build.gradle @@ -1,5 +1,5 @@ apply plugin: 'com.android.application' -apply plugin: 'com.ceabie.dexnkife' +apply plugin: 'dexknifePlus' android { compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VER) @@ -14,6 +14,16 @@ android { multiDexEnabled true } + productFlavors{ + dev{ + + } + + mock{ + + } + } + buildTypes { release { minifyEnabled false @@ -31,6 +41,24 @@ android { } } +dexKnife{ + //必选参数 + enabled true //if false,禁用分包插件 + //可选参数 + //1.如果没有可选参数,将根据enabled决定是否分包。 + //2.如果有可选参数,需满足必选参数和可选参数的条件才允许分包 + productFlavor 'mock' + buildType 'debug' + + /* + *eg:当前productFlavors = dev,buildType = debug, + *参数组合1:enabled = true,productFlavor = dev,buildType = debug 分包 + *参数组合2:enabled = true,productFlavor = mock,buildType = debug 不分包 + *参数组合1:enabled = true,buildType = debug 所有buildType = debug分包 + *参数组合1:enabled = true,productFlavor = dev 所有productFlavor = dev分包 + * */ +} + dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile "com.android.support:appcompat-v7:${SUPPORT_VERSION}" diff --git a/DexKnifePlugin/build.gradle b/DexKnifePlugin/build.gradle index 71c3d89..d88678c 100644 --- a/DexKnifePlugin/build.gradle +++ b/DexKnifePlugin/build.gradle @@ -1,13 +1,12 @@ buildscript { repositories { - maven { url uri('./repo') } jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' - classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.2' + classpath 'com.library.tangxiaolv:dexknife-plus:1.0.1' } } diff --git a/DexKnifePlugin/gradle-dexknife-plugin/.gitignore b/DexKnifePlugin/dexknife-plus/.gitignore similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/.gitignore rename to DexKnifePlugin/dexknife-plus/.gitignore diff --git a/DexKnifePlugin/dexknife-plus/build.gradle b/DexKnifePlugin/dexknife-plus/build.gradle new file mode 100644 index 0000000..3aafa1b --- /dev/null +++ b/DexKnifePlugin/dexknife-plus/build.gradle @@ -0,0 +1,74 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + + dependencies { + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' + } +} + +apply plugin: 'groovy' +apply plugin: 'com.jfrog.bintray' + +configurations { + provided { + dependencies.all { dep -> + configurations.default.exclude group: dep.group, module: dep.name + } + } + compile.extendsFrom provided +} + +dependencies { + compile gradleApi() + compile localGroovy() + provided 'com.android.tools.build:builder:2.1.3' + provided 'com.android.tools.build:gradle-core:2.1.3' +} + +tasks.withType(Javadoc) { +// enabled = false //禁用生成javadoc的任务 + options.encoding = "UTF-8" +} + +ext { + bintrayRepo = 'maven' + bintrayName = "$LIBRARY_NAME" //maven 仓库中的包名 + + publishedGroupId = "$GROUP_ID" + libraryName = "$LIBRARY_NAME" + artifact = "$LIBRARY_NAME"//必须跟Model名一样 + + libraryDescription = 'android multidex plugin' + + siteUrl = 'https://github.com/TangXiaoLv/Android-Easy-MultiDex' + gitUrl = 'https://github.com/TangXiaoLv/Android-Easy-MultiDex.git' + + libraryVersion = "$PUBLIC_VERSION" + + developerId = 'tangxiaolv' + developerName = 'XiaoLv Tang' + developerEmail = 'imbatang@gmail.com' + + licenseName = 'The Apache Software License, Version 2.0' + licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + allLicenses = ["Apache-2.0"] +} + +// Place it at the end of the file +apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' +apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle' + +uploadArchives { + repositories { + mavenDeployer { + repository(url: uri('../repo')) + pom.groupId = "$GROUP_ID" + pom.artifactId = "$LIBRARY_NAME" + pom.version = "$LOCAL_VERSION" + } + } +} diff --git a/DexKnifePlugin/dexknife-plus/gradle.properties b/DexKnifePlugin/dexknife-plus/gradle.properties new file mode 100644 index 0000000..184c457 --- /dev/null +++ b/DexKnifePlugin/dexknife-plus/gradle.properties @@ -0,0 +1,6 @@ +#Gradle:groupId:libraryName:publicVersion +LOCAL_VERSION=0.0.5 +PUBLIC_VERSION=1.0.1 +GROUP_ID=com.library.tangxiaolv +#Modelһ +LIBRARY_NAME=dexknife-plus diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy new file mode 100644 index 0000000..dffcbf0 --- /dev/null +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy @@ -0,0 +1,7 @@ +package com.ceabie.dexknife + +class DexKnifeExtension { + boolean enabled = false + String productFlavor = "" + String buildType = "" +} diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy new file mode 100644 index 0000000..c7086b6 --- /dev/null +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2016 ceabie (https://github.com/ceabie/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.ceabie.dexknife + +import org.gradle.api.Plugin +import org.gradle.api.Project + +/** + * the spilt tools plugin. + */ +public class DexKnifePlugin implements Plugin { + + @Override + void apply(Project project) { + + DexKnifeExtension dexKnifeExtension = project.extensions.create('dexKnife', DexKnifeExtension) + project.afterEvaluate { + boolean hasApp = project.plugins.hasPlugin("com.android.application") + print("-hasApp = ${hasApp}\n") + if (!hasApp) { + throw new IllegalStateException("'android' plugin required.") + } + + final def variants = project.android.applicationVariants + variants.each{variant -> + if (dexKnifeExtension.enabled) { + boolean checkProductFlavor = dexKnifeExtension.productFlavor == "" || dexKnifeExtension.productFlavor.equalsIgnoreCase(variant.flavorName) + boolean checkBuildType = dexKnifeExtension.buildType == "" || dexKnifeExtension.buildType.equalsIgnoreCase(variant.buildType.name) + if (checkProductFlavor && checkBuildType) { + printf "-DexKnifePlugin Enable = true\n"; + printf "-DexKnifePlugin checkProductFlavor = ${checkProductFlavor}\n"; + printf "-DexKnifePlugin checkBuildType = ${checkBuildType}\n"; + printf "-DexKnifePlugin buildType.name = ${variant.buildType.name}\n"; + printf "-DexKnifePlugin flavorName = ${variant.flavorName}\n"; + + filterActivity(project); + + if (isMultiDexEnabled(variant)) { + if (SplitToolsFor130.isCompat(variant)) { + System.err.println("DexKnife: Compat 1.3.0."); + SplitToolsFor130.processSplitDex(project, variant) + } else if (SplitToolsFor150.isCompat()) { + SplitToolsFor150.processSplitDex(project, variant) + } else { + System.err.println("DexKnife Error: DexKnife is not compatible your Android gradle plugin."); + } + } else { + System.err.println("DexKnife : MultiDexEnabled is false, it's not work."); + } + } + } + printf "-DexKnifePlugin Enable = false\n"; + } + } + } + + //filter Activity + private static void filterActivity(Project project) { + File file = project.file(DexSplitTools.DEX_KNIFE_CFG_TXT) + if (file != null) { + def justActivitys = []; + file.eachLine { line -> + //printf "read line ${line}\n"; + if (line.startsWith('-just activity')) { + line = line.replaceAll('-just activity', '').trim(); + justActivitys.add(line) + } + } + printf "-just activity size = ${justActivitys.size()}\n"; + if (justActivitys.size() != 0) { + project.tasks.each { task -> + if (task.name.startsWith('collect') && task.name.endsWith('MultiDexComponents')) { + println "main-dex-filter: found task $task.name" + task.filter { name, attrs -> + String componentName = attrs.get('android:name') + if ('activity'.equals(name)) { + def result = justActivitys.find { + componentName.endsWith("${it}") + } + def bool = result != null; + if (bool) { + printf "main-dex-filter: keep ${componentName}\n" + } + return bool + } + return true + } + } + } + } + } + } + + private static boolean isMultiDexEnabled(variant) { + def is = variant.buildType.multiDexEnabled + if (is != null) { + return is; + } + + is = variant.mergedFlavor.multiDexEnabled + if (is != null) { + return is; + } + + return false + } + +} \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java similarity index 89% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java index e7d1235..a545af3 100644 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.ceabie.dexknife; import org.gradle.api.Project; @@ -27,7 +28,6 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; - /** * the base of spilt tools. * @@ -81,12 +81,14 @@ protected static void endDexKnife() { System.out.println("DexKnife Finished: " + time); } - public static boolean processMainDexList(Project project, boolean minifyEnabled, File mappingFile, - File jarMergingOutputFile, File andMainDexList, - DexKnifeConfig dexKnifeConfig) throws Exception { + public static boolean processMainDexList(Project project, boolean minifyEnabled, + File mappingFile, + File jarMergingOutputFile, File andMainDexList, + DexKnifeConfig dexKnifeConfig) throws Exception { if (!minifyEnabled && jarMergingOutputFile == null) { - System.out.println("DexKnife Error: jarMerging is Null! Skip DexKnife. Please report All Gradle Log."); + System.out.println( + "DexKnife Error: jarMerging is Null! Skip DexKnife. Please report All Gradle Log."); return false; } @@ -96,6 +98,10 @@ public static boolean processMainDexList(Project project, boolean minifyEnabled, /** * get the config of dex knife + * + * @param project project + * @return DexKnifeConfig + * @throws Exception exception */ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Exception { BufferedReader reader = new BufferedReader(new FileReader(project.file(DEX_KNIFE_CFG_TXT))); @@ -154,14 +160,14 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except } else if (DEX_KNIFE_CFG_LOG_MAIN_DEX.equals(cmd)) { dexKnifeConfig.logMainList = true; - } else if (DEX_KNIFE_CFG_LOG_FILTER_SUGGEST.equals(cmd)) { + } else if (DEX_KNIFE_CFG_LOG_FILTER_SUGGEST.equals(cmd)) { dexKnifeConfig.logFilterSuggest = true; - }else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_SPLIT)) { + } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_SPLIT)) { String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_SPLIT.length()).trim(); addClassFilePath(sPattern, splitSuggest); - } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_KEEP)) { + } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_KEEP)) { String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_KEEP.length()).trim(); addClassFilePath(sPattern, keepSuggest); @@ -188,9 +194,9 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except keepSuggest.addAll(keepMain); } -// for (String s : splitSuggest) { -// System.out.println("Suggest: " + s); -// } + // for (String s : splitSuggest) { + // System.out.println("Suggest: " + s); + // } if (!splitSuggest.isEmpty() || !keepSuggest.isEmpty()) { dexKnifeConfig.suggestPatternSet = new PatternSet() @@ -199,11 +205,10 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except } } - if (!splitToSecond.isEmpty() || !keepMain.isEmpty()) { -// for (String s : splitToSecond) { -// System.out.println(s); -// } + // for (String s : splitToSecond) { + // System.out.println(s); + // } dexKnifeConfig.patternSet = new PatternSet() .exclude(splitToSecond) .include(keepMain); @@ -275,8 +280,8 @@ private static Spec getMaindexSpec(PatternSet patternSet) { * generate the main dex list */ private static boolean genMainDexList(Project project, boolean minifyEnabled, - File mappingFile, File jarMergingOutputFile, - File andMainDexList, DexKnifeConfig dexKnifeConfig) throws Exception { + File mappingFile, File jarMergingOutputFile, + File andMainDexList, DexKnifeConfig dexKnifeConfig) throws Exception { System.out.println(":" + project.getName() + ":genMainDexList"); @@ -289,7 +294,8 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, patternSet = dexKnifeConfig.patternSet; } - mainCls = getAdtMainDexClasses(andMainDexList, patternSet, dexKnifeConfig.logFilterSuggest); + mainCls = getAdtMainDexClasses(andMainDexList, patternSet, + dexKnifeConfig.logFilterSuggest); System.out.println("DexKnife: use suggest"); } @@ -300,12 +306,14 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, if (minifyEnabled) { System.err.println("DexKnife: From Mapping"); // get classes from mapping - mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, mainCls); + mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, + mainCls); } else { System.out.println("DexKnife: From MergedJar: " + jarMergingOutputFile); if (jarMergingOutputFile != null) { // get classes from merged jar - mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, mainCls); + mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, + mainCls); } else { System.err.println("DexKnife: The Merged Jar is not exist! Can't be processed!"); } @@ -332,7 +340,8 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, } private static ArrayList getMainClassesFromJar( - File jarMergingOutputFile, PatternSet mainDexPattern, HashSet mainCls) throws Exception { + File jarMergingOutputFile, PatternSet mainDexPattern, HashSet mainCls) + throws Exception { ZipFile clsFile = new ZipFile(jarMergingOutputFile); Spec asSpec = getMaindexSpec(mainDexPattern); ClassFileTreeElement treeElement = new ClassFileTreeElement(); @@ -361,9 +370,9 @@ private static ArrayList getMainClassesFromJar( /** * Gets main classes from mapping. * - * @param mapping the mapping file + * @param mapping the mapping file * @param mainDexPattern the main dex pattern - * @param mainCls the main cls + * @param mainCls the main cls * @return the main classes from mapping * @throws Exception the exception * @author ceabie @@ -409,10 +418,12 @@ private static ArrayList getMainClassesFromMapping( /** * get the maindexlist of android gradle plugin */ - private static HashSet getAdtMainDexClasses(File outputDir, PatternSet mainDexPattern, boolean logFilter) + private static HashSet getAdtMainDexClasses(File outputDir, PatternSet mainDexPattern, + boolean logFilter) throws Exception { if (outputDir == null || !outputDir.exists()) { - System.err.println("DexKnife Warning: Android recommand Main dex is no exist, try run again!"); + System.err.println( + "DexKnife Warning: Android recommand Main dex is no exist, try run again!"); return null; } @@ -420,7 +431,8 @@ private static HashSet getAdtMainDexClasses(File outputDir, PatternSet m BufferedReader reader = new BufferedReader(new FileReader(outputDir)); ClassFileTreeElement treeElement = new ClassFileTreeElement(); - Spec asSpec = mainDexPattern != null? getMaindexSpec(mainDexPattern): null; + Spec asSpec = mainDexPattern != null ? getMaindexSpec(mainDexPattern) + : null; String line, clsPath; while ((line = reader.readLine()) != null) { @@ -433,11 +445,13 @@ private static HashSet getAdtMainDexClasses(File outputDir, PatternSet m boolean satisfiedBy = asSpec.isSatisfiedBy(treeElement); if (!satisfiedBy) { - if (logFilter) System.out.println("DexKnife-Suggest: [Split] " + clsPath); + if (logFilter) + System.out.println("DexKnife-Suggest: [Split] " + clsPath); continue; } - if (logFilter) System.out.println("DexKnife-Suggest: [Keep] " + clsPath); + if (logFilter) + System.out.println("DexKnife-Suggest: [Keep] " + clsPath); } mainCls.add(line); @@ -469,4 +483,4 @@ static int getAndroidPluginVersion(String version) { return ver; } -} \ No newline at end of file +} diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/resources/META-INF/gradle-plugins/com.ceabie.dexnkife.properties b/DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties similarity index 100% rename from DexKnifePlugin/gradle-dexknife-plugin/src/main/resources/META-INF/gradle-plugins/com.ceabie.dexnkife.properties rename to DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties diff --git a/DexKnifePlugin/gradle-dexknife-plugin/build.gradle b/DexKnifePlugin/gradle-dexknife-plugin/build.gradle deleted file mode 100644 index 55ccedf..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/build.gradle +++ /dev/null @@ -1,131 +0,0 @@ -buildscript { - repositories { - mavenLocal() - jcenter() - } - - dependencies { - classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.3" - } -} - -apply plugin: 'groovy' -apply plugin: 'maven' -apply plugin: 'maven-publish' -apply plugin: 'idea' -apply plugin: 'com.jfrog.artifactory' -apply plugin: 'com.jfrog.bintray' - -repositories { - jcenter() -} - -configurations { - provided { - dependencies.all { dep -> - configurations.default.exclude group: dep.group, module: dep.name - } - } - compile.extendsFrom provided -} - -compileGroovy { - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - options.encoding = "UTF-8" -} - -//sourceSets { -// main { -// compileClasspath += configurations.provided -//// runtimeClasspath += configurations.provided -// } -//} - -dependencies { - compile gradleApi() - compile localGroovy() - provided 'com.android.tools.build:builder:2.1.3' - provided 'com.android.tools.build:gradle-core:2.1.3' -} - -//version = "${PUBLIC_VERSION}" -//group = 'com.ceabie.dextools' -// -//def pomConfig = { -// licenses { -// license { -// name "The Apache Software License, Version 2.0" -// url "http://www.apache.org/licenses/LICENSE-2.0.txt" -// distribution "repo" -// } -// } -// developers { -// developer { -// id "ceabie" -// name "ceabie" -// email "ceabie@gmail.com" -// } -// } -//} -// -//publishing { -// publications { -// mavenJava(MavenPublication) { -// from components.java -// artifact sourcesJar -// -// pom.withXml { -// def root = asNode() -// root.appendNode('description', 'A simple android gradle plugin to use the wildcards of package to smart split the specified classes to second dex.') -// root.children().last() + pomConfig -// } -// } -// } -//} -// -//bintray { -// user = bintrayUser -// key = bintrayApiKey -// -// publications = ['mavenJava'] -// pkg { -// repo = 'gradle-plugins' -// name = 'gradle-dexknife-plugin' -// labels = ['gradle', 'plugin', 'dex', 'split sex', 'multidex'] -// websiteUrl = POM_URL -// vcsUrl = POM_URL + '.git' -// issueTrackerUrl = POM_URL + '/issues' -// licenses = ["Apache-2.0"] -// version { -// name = "${PUBLIC_VERSION}" -// attributes = ['gradle-plugin': 'com.ceabie.dextools:gradle-dexknife-plugin'] -// } -// } -// publish = true -//} - -task sourcesJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'sources' -} - -artifacts { - archives sourcesJar -} - -task wrapper(type: Wrapper, description: 'Gradle Wrapper task') { - gradleVersion = '2.8' -} - -uploadArchives { - repositories { - mavenDeployer { - repository(url: uri('../repo')) - pom.version = "${DEV_VERSION}" - pom.artifactId = "gradle-dexknife-plugin" - pom.groupId = "com.ceabie.dextools" - } - } -} \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties b/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties deleted file mode 100644 index dd9513d..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -PUBLIC_VERSION=1.5.6 -DEV_VERSION=2.0.2 \ No newline at end of file diff --git a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy b/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy deleted file mode 100644 index 58f1299..0000000 --- a/DexKnifePlugin/gradle-dexknife-plugin/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife - -import org.gradle.api.Plugin -import org.gradle.api.Project - -/** - * the spilt tools plugin. - */ -public class DexKnifePlugin implements Plugin { - - @Override - void apply(Project project) { - //过滤Activity组件 - project.afterEvaluate { - File file = project.file(DexSplitTools.DEX_KNIFE_CFG_TXT) - if (file != null) { - def justActivitys = []; - file.eachLine { line -> - //printf "read line ${line}\n"; - if (line.startsWith('-just activity')) { - line = line.replaceAll('-just activity', '').trim(); - justActivitys.add(line) - } - } - printf "-just activity size = ${justActivitys.size()}\n"; - if (justActivitys.size() != 0) { - project.tasks.each { task -> - if (task.name.startsWith('collect') && task.name.endsWith('MultiDexComponents')) { - println "main-dex-filter: found task $task.name" - task.filter { name, attrs -> - String componentName = attrs.get('android:name') - if ('activity'.equals(name)) { - def result = justActivitys.find { - componentName.endsWith("${it}") - } - def bool = result != null; - if (bool) { - printf "main-dex-filter: keep ${componentName}\n" - } - return bool - } - return true - } - } - } - } - } - } - - project.afterEvaluate { - for (variant in project.android.applicationVariants) { - if (isMultiDexEnabled(variant)) { - if (SplitToolsFor130.isCompat(variant)) { - System.err.println("DexKnife: Compat 1.3.0."); - SplitToolsFor130.processSplitDex(project, variant) - } else if (SplitToolsFor150.isCompat()) { - SplitToolsFor150.processSplitDex(project, variant) - } else { - System.err.println("DexKnife Error: DexKnife is not compatible your Android gradle plugin."); - } - } else { - System.err.println("DexKnife : MultiDexEnabled is false, it's not work."); - } - } - } - } - - private static boolean isMultiDexEnabled(variant) { - def is = variant.buildType.multiDexEnabled - if (is != null) { - return is; - } - - is = variant.mergedFlavor.multiDexEnabled - if (is != null) { - return is; - } - - return false - } - -} \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar deleted file mode 100644 index 6a1238f81f91273d88085b8aba9525ea930a0403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39903 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 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 deleted file mode 100644 index 21e1398..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -a217530cc52eecb9c21f7fd1d17268dd \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 deleted file mode 100644 index 6596572..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -50d30810daa3dca6f97f805a8e53e6f9661cf6e4 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom deleted file mode 100644 index c4f75b0..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom +++ /dev/null @@ -1,8 +0,0 @@ - - - 4.0.0 - com.ceabie.dextools - gradle-dexknife-plugin - 2.0.0 - diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 deleted file mode 100644 index f526914..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -f92f147a2c254aea34efd104c6e087ca \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 deleted file mode 100644 index d4c7afe..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.0/gradle-dexknife-plugin-2.0.0.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -3681338a03f9c6e1f4d20ed48d3817b070645bb1 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.jar deleted file mode 100644 index 289ff047600f85625f136013e99f12c438fa85e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40413 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 - - 4.0.0 - com.ceabie.dextools - gradle-dexknife-plugin - 2.0.1 - diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.md5 deleted file mode 100644 index 4cb6837..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -bde96269e8d5e1098594fb20b7548545 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.sha1 deleted file mode 100644 index d63d558..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.1/gradle-dexknife-plugin-2.0.1.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -15d752decef7fc19c516c16654ea4c7fad4b1ebc \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar deleted file mode 100644 index d3db649509f9971ee95a8b9de764d6a3d11de656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13319 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 YCkgtQyaoXH`uXDcoCi(6bJzg?2j=wI0{{R3 diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 deleted file mode 100644 index 8c7c97c..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -3f9d7434355ddde497a237203d8dd60a \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 deleted file mode 100644 index 58c7796..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -d4d943bc8228de0d65bddafabcc2ce333017c03d \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar deleted file mode 100644 index 19037e558213ddd61212983217d8fe560e3eb89f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43397 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 z zg_pJ?d8+mKbd5cknioD?r;JcJ+y*)v@`gl5lPbFp+zTQZy1NYmRMGU^2$Zhra0v3xZqPK+`OFYE$zUX{luMUDfi~Y%?v3?`?G{oI@GS~Z zjZ+X9QXmGwUP-q}7-3JXf_Bvu6X;$@-L5bk+s0bYM{}w$x_A{dlkg^z{7tWJvu@ow z=iL0X!)eiK*%5sOAQh&yjLRGb@ zxm+mgnboh(?~2lVn*o@MP`p&mH3)~N`!QjzOgsz7BJ{dH){R0Ve*624tQk#C&BhVp z)}2iDfAH+Y`$s;lUdP?&u`~JgW2 zi9ctr9DMQV{UV;gXyCaDLmKSj@z+?Nc|>Qs^+tg&zq?zte>1TP+q@V z(92n}r|=%S*k`iQUeZ&U4< z#wYvxfbSP;7c z;8Hwbu70W>^{Szid-gWxhp*f?lY`r*<32-nTD|AolltU4y=<=akKXNAE197}yO-0R z#X<|eXzTP=zXz#vU`js{$pHFCPyn}l;`i~19oed@F(OYxpC!ezO6S-s)lM_3TMpMX1rroI9hX?=Uz>G<>iZj zNfLC~!O|z+lF?hU&uL_=F2MBg2yrZcQMp z^Fewwg2p2Z*$QihyT@K3x7BBrziS9M>GKSE#<`U(>fMsuOKxW92840VWVn zb_igf2FUL;jKhSiMg~8XDD=`w&4l_iWY|O%>E(R48(f>>wPue~ORfoAId>~I5>r^I zKA+^w!OvLEx1fW}wem-YZi^1(s2&65XB1yC3mU%5&>L{m5P_2{Qt>(Y%i9 zPZU8c=w`Mb4qj(^$q{IC#l`ipIW{MNn45xVGi|myOFqV5(}v2rE$c>YE7_;w9`tOY z3=_EN#1+At<~_B84ov$|-HPb~bNYDWmKwhviMM9&eZO^?8xd;hpVqpOZkeVZIG-}0 zo>?r_a@TaqOUZY9~Nf|ArLskTPzAz^*7LmHd-Y#Vads?}-J!}&Ow^u-z)Q@)n zBL_Z3wKDzdJ7`LlAOzUMw&eSzT}JvC5~BK?XW4*)%dNXQ2b%cByXJKeF?Qg zRBl<-nP>}JD7dSu+NL1EBG93kJ6GLDc?;}S`;16*Q;sBhk=HBIsmDgX$hvj`NAATm zc>#dNwk{Hf@}61J1@RZ%oJZmNXcBKD55C$VtuP9FjIkn|3(1}Kw3qR@#2a-`JEWE1 zLv6zOiW%I~-{6boqd1bmIBi3rQYjL(@U8z#g3sk0i7#vJmmO%Lpi;`V4qmTAtK)_R zH<*&ZGeSiavhBKW8ROA*&K2n)*uw2u1sQBW#%6FY!(d!AobOY*H6tZ8N;vEYi=~w%a$9~isM)^Uyp@T0rGMGUR&v!jsVvM= z!Y6bk!5C{`YrG^7+BHXstVhdfDWAyPt(Tob`{C;mijUHF`WWIAUjKTQb&~9q=L~Ha zVTy${$r8pW1;WN(B4ypGGmvKD_CqJdy5sF5QSd#mx%=9XVz~=U77KRAx^JaAMm^Dz zbIF;lb`+Up0(ZNr&c`$*|K55O+J~uG;(*XuIs=5`AExVY?hqOsuad zV*n7K5-0_?WRoJl4v{SL2*O~m0zBP}V`XTQsZ2qx(&NT1aOeglj*~?kbCl3$s-{9l zQE2ML%GqN=&ftQ$&9ZXFuG%8vfM(p2FHgFCGS>YYEHSJoyGt3KjVXmzjHA1@DBCvj zC!s4@c)Kr*C1=mq;_fM%w(|%dgoSi0gcP5h8Id9vo?HpOLA|gCVs1Gp@yRe* z(JL;DHz<-kPEX94P`=IY#D#k0@qlQ?gH%9oscR%_m!@-ER) z^8CJP7itYRHHfE{G4k{KxF;!arY)NxY}(>GYY|sXHK_5!gB=T+cQ!s{7|?}LdmRQv zlwt)q;biNRO^fSkatG~T$1dVci<7e9SP1|F6=QnRTfOWYon#KX(DoMbhvOWP8f`Fx z&(>p%=Ec1X0`lM@j!mxcdtWE9$&4wzO!#^~M8`o5V|xS#^VTApB0<$^twAjoo82Yr z?jD}FsYX(w0iFez%XA#w6pL~US2P}W5@!MH%xSNl=Ojih%>hCCa>3f5ccav8$4|sa zokYGG+&-lw8;gkEDstIya9V?ANFFw>Dp+^d3Sx7vS*wLRcIkaqT@})@meQjeXRMS~ z-)(m}B4j&4;aN8o%%ZjP55tQgQN+E6r0Fl$j*Nzz#G+l0qulNg{B9kulEj&56iBJn z7SM9{l{^(;eEhq-b9D~la{6AA*>Z;4k(-|@#26|zxV3UAnAO^xHWjsU;~5r&WXL+X z+5)O#ZY798M3`U{8GxaxwH^376VI`%M6PVa>9f^z#OeLXtYoh2EWi*Kc%WS`HE{a{ zSGR%Jg`ND{SFy)wsoRKw=%Bk3pC07PnjA@ti8e~(;H>qw9CSOr3JFYUZ;?LVOrE0< zovps#HqTDW9he^_c%_L-D5`Rlee7^|nbzbq%3DSLarxCN-hA?^tMDG^-Y8$?9-czEcoiL$K0~cSfXRj0MYY)NXjC&I;1CqkC$YR zm%5SH3bsrAnDVwi`Keko0}Yy>22IpdUVKX=cs^;icf+>%mhka-Et+|$>cAsBi9>?k zA5&5}HE2pWs7fjDYiC14WDfmOYGqG?&cgFtTE2Xx3|YKNesJRaB_getJF@4^`kdT$ z`?tWckgkB!+g+FJpPkky)CihYrtZtv9&3WMx*kNZD`_XFcBy|qO^&&w8IUj>U$$|Q zpi`j+_|4u(#~8{~F!f;}AuW>p(?UFcu0J0fv@yL1H;Jx&`)$p%i7`5ErX#JH*D+_5FNX#%%pmrqix4Z<6tIE1rhdmoZwn z>W+Vabe!ovV2rDDTr@S$d@0Gy)*q~6wFi)#iLI(G9(2ygyc!Qm-HoU`T@k1|s9w(s z$>~sl>ttt1YB8}Xcov%XTH%`s>u2ve5z<7*yeEnlA%`~3zlbp-ZGoBx>{>IDlK1Er zY4W znVQ8sDj?JzpBU3djRZE7*4~&vgksRBTvHIOVNb78@qQanBw*_CowRY2m+&2YkIOZU z)c;gr^iz!HG-ke;wN!V!#CkhftLV4*qRz(vD^`|=JE-$tL0 zQsa&utbvgYr-*e(;Wcz$1K<^`k+CG4KubOB6jpf{(`asLA-Ty}K0c zR{JWR(5evr&oLN!R_>o44LFD~Oik!L9Hcj4p9zok2(I0pK@UGo>ONKY;5fm$JoSQY ze{-BQBJ?a`&*|0tN1<+V7u|q7l(i13bJGv%@&qyc-b$EmT_s@qS4cd%?=s zV1xeLd?CVyS}#her+Ii~`cPPnmnp{xG+sQCUyiN;n>UFN=+zh5)coR^Y*fC_rI9t2 z)Ta{s~cZulN1j&4G3J)H^6CR@%wnTA4=GAU@V0?=n^6sk!a~8b~d_du`=vw}T zo>giHojZs*3g8HhvNn|uUR^zYQ3eLx;tU$*l*?48-^Fh41os=hmeaF(1Fv}9I+{abm*r&d0bA0gUI>emW>-*eNFtI64Ju(O90} zaYMYA&3rX5X5quF2^y*I$X6DkR%>z6w~|k)oUYT1vcMMuwEPuJno6*0XFQJPr!|3}b`29gV^?&LPTIurEtVV2?e^86WuCT%PpwZ#Av>axVAV6m+!rBr ztuSESKJpHFT)#RaD6`Q0+4p&Mx?EhZh$eMPjEMSk;sv1+qE8GD*ZJyl=wz9(0gg^Q zWj%!JFKxeZxHwG2nWgo(8>fZ6bUC8%VhU=p=gg$h-z#RQ75!++rS{&PQkz;!&fGhwnaiT3mmj$KXg)0@rESOWyf(p0-k* zZ~dXpyPyE>PA>4NDZIAG@K%20_z^o)b}-6y=lt$u5-qqjUC-I;d2qM!IB4hG-`bA2 z#{FRH{N8rxfgrgAwRce_RZ+G*UwuM}_;b28qmP;`AJ!W}PEVb!7A!x_G}P-Y=EAkq zGc$$XD|-t2BrxL+tG{u&j0suSYKWRm%PN86KHz_y+(NN^PQaL;SNNn?Us$pd3>o)s z)>JqB7E^3wL^<0GyJ(E_k;*k%vRboaBo4SjqHhjZq1VL7 zyY&De!SaJ0o5sc60k#;+qbvsAq^rC9BHp%(rL~*1df6b|%4ZK)qv=IG{G@%51A?hb z)>`GCtvlvh-3mAm2vxTzkGg%DCFX1&&&ijU5BHI@Z5r}WA6OFXa zT7<>7lWHf!VjB~%PD=K}AIMBMG$3azLBu~dWP!BMBT#zcQ{uEWc}LZegxBO#{|mgnmB?tB zw@{`^GNtyUB|ZzNuc7+8Io>EoyjgRnaaLBD^hT3mmXmTy+;kEf#id}fLntuza?I)0 z@(0(8M);oIiHPspH-RD*rN{>xx_DxiLd)HaD2x4xEpg8PS=}d1;m?{W*@_ZMG46G# z#-KxT;@WF6U#@eH?3*EG|7=={&y)^p7cKimUgij6`{zBKQr*0MbCH5&6oNi-_v76v zoHu=xb}v2dk&!qzs)kVpmZo7@nbhm6=PWkyLv0s{BhO*0frSw>4)8PW;A`0KX~i2? zZ~FTOVVY)n1;@Kc)sJ{q#|Ee#mwA1krJuUH`FtRP%5e>4>PY*3ZjbN47vO$>qv($6 zfdp?zj2-3E0_K&$k2IE-;%_%!;$t8Ac=@T%jCZ-N2V#6f*V|HRO1`e@e6q`MEjBl_ zEp^A487oE&V|4I=D3HM&uwUq0vm!}o(k5h-fY;mS&8E2OMwqmzMG|YsT`T)iH|4|~ zFxVd&-Rk*L4*lqrH}2Z^p5r2JIq2=9v6-Gwd*81aTVo|a`hS>sZkV-Dwtna;Ag#%xjq&RJZ8qXU0hAqBm^9_ zhF!*AZ!t`NgXCv`#R=cNWm|xG2}d@_ms1yT1-c+*4^sAc;HxP2?P4RFn1pP^4CU&p z&^ou}AH*(*GlcPo5yt;sRYYpz&-Fth?N5n6-1WDDzm)wU*!{192tQldBK-W{5QZt; z*{Fh@tAg|#Wf!PHdN+SJC>*6EL@p_^vi zWe%{-M@B*_M0kVgFJQ#)eE&j(Uw(&;=rC9Mp{DdRTQdvu-=k*i0#-Z``TKcwnKj z7+Iz3fw1)Q&w1W|8Jq8KMD@Sn`#sCeso}p^xDXfW|JbTOOE7O+TfXm6HB{bGC) z@ETA*51tR|Kg?&`%k%l|Bl}L>hBk$Q{q2k{5|duoWEj#A0gBq>&HLlpzQxA vintL_-So%Jfa))teE-(JK|$QU{wBOqRYF7D&VR%=q)3d2xJW+d$Ju`YTk+mm diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 deleted file mode 100644 index f432054..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -26147badbff68f8e7ecc79081be6b906 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 deleted file mode 100644 index c66e71e..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -f5ab73500dc4d8868304d7a8731f86d84f63ced6 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom deleted file mode 100644 index 1924b37..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom +++ /dev/null @@ -1,8 +0,0 @@ - - - 4.0.0 - com.ceabie.dextools - gradle-dexknife-plugin - 2.0.2 - diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 deleted file mode 100644 index f0914df..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -adea40026d297e149210a01b2b89f527 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 deleted file mode 100644 index d0270dc..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -c7d6573638a789e47b5765ffcab09f3be0ba035f \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml deleted file mode 100644 index b618fa3..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - com.ceabie.dextools - gradle-dexknife-plugin - - 2.0.2 - - 2.0.0 - 2.0.2 - - 20160920073808 - - diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 deleted file mode 100644 index d10478e..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 +++ /dev/null @@ -1 +0,0 @@ -d930a21e5fec7fdc206c9d1125604b59 \ No newline at end of file diff --git a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 b/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 deleted file mode 100644 index 28f7787..0000000 --- a/DexKnifePlugin/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 +++ /dev/null @@ -1 +0,0 @@ -406e547c9497edbe78ead40c2be96c0d103290e6 \ No newline at end of file diff --git "a/DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" "b/DexKnifePlugin/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" deleted file mode 100644 index e69de29..0000000 diff --git "a/DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" "b/DexKnifePlugin/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" deleted file mode 100644 index e69de29..0000000 diff --git a/DexKnifePlugin/settings.gradle b/DexKnifePlugin/settings.gradle index 1d8667f..303963d 100644 --- a/DexKnifePlugin/settings.gradle +++ b/DexKnifePlugin/settings.gradle @@ -1,3 +1,3 @@ include ':app', ':lib1' -include ':gradle-dexknife-plugin' +include ':dexknife-plus' diff --git a/README.md b/README.md index 3034057..da9dcf6 100644 --- a/README.md +++ b/README.md @@ -107,28 +107,38 @@ afterEvaluate { 于是乎就将Gradle脚本整合进了插件,这样只需维护一个配置文件就行了。读者可以根据自己需求自行选择分开配置还是整合配置。通过这种方式我们把主Dex的方法数维持在15000左右,从此再也不用担心方法数问题了!!! ##配置部分 -**第一步:将repo目录复制到项目根目录** - -**第二步:添加根目录Gradle** +**第一步:添加根目录Gradle** ``` buildscript { - repositories { - maven { - url uri('repo') - } - } - dependencies { - classpath 'com.ceabie.dextools:gradle-dexknife-plugin:2.0.2' + classpath 'com.library.tangxiaolv:dexknife-plus:1.0.1' } } - ``` -**第三步:在你的App模块的build.gradle添加插件** +**第二步:在你的App模块的build.gradle添加插件** ``` -apply plugin: 'com.ceabie.dexnkife' +apply plugin: 'dexknifePlus' ``` +**第三步:配置参数** +``` +dexKnife{ + //必选参数 + enabled true //if false,禁用分包插件 + //可选参数 + //1.如果没有可选参数,将根据enabled决定是否分包。 + //2.如果有可选参数,需满足必选参数和可选参数的条件才允许分包 + productFlavor 'mock' + buildType 'debug' + /* + *eg:当前productFlavors = dev,buildType = debug, + *参数组合1:enabled = true,productFlavor = dev,buildType = debug 分包 + *参数组合2:enabled = true,productFlavor = mock,buildType = debug 不分包 + *参数组合1:enabled = true,buildType = debug 所有buildType = debug分包 + *参数组合1:enabled = true,productFlavor = dev 所有productFlavor = dev分包 + * */ +} +``` **第四步:在你的App模块目录下新建dexknife.txt,并自定义配置** ``` #为注释符 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar deleted file mode 100644 index d3db649509f9971ee95a8b9de764d6a3d11de656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13319 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 YCkgtQyaoXH`uXDcoCi(6bJzg?2j=wI0{{R3 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 deleted file mode 100644 index 8c7c97c..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -3f9d7434355ddde497a237203d8dd60a \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 deleted file mode 100644 index 58c7796..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2-sources.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -d4d943bc8228de0d65bddafabcc2ce333017c03d \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar deleted file mode 100644 index 19037e558213ddd61212983217d8fe560e3eb89f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43397 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 z 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 diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 deleted file mode 100644 index f432054..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -26147badbff68f8e7ecc79081be6b906 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 deleted file mode 100644 index c66e71e..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -f5ab73500dc4d8868304d7a8731f86d84f63ced6 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom deleted file mode 100644 index 1924b37..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom +++ /dev/null @@ -1,8 +0,0 @@ - - - 4.0.0 - com.ceabie.dextools - gradle-dexknife-plugin - 2.0.2 - diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 deleted file mode 100644 index f0914df..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -adea40026d297e149210a01b2b89f527 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 deleted file mode 100644 index d0270dc..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/2.0.2/gradle-dexknife-plugin-2.0.2.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -c7d6573638a789e47b5765ffcab09f3be0ba035f \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml deleted file mode 100644 index b618fa3..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - com.ceabie.dextools - gradle-dexknife-plugin - - 2.0.2 - - 2.0.0 - 2.0.2 - - 20160920073808 - - diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 deleted file mode 100644 index d10478e..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.md5 +++ /dev/null @@ -1 +0,0 @@ -d930a21e5fec7fdc206c9d1125604b59 \ No newline at end of file diff --git a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 b/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 deleted file mode 100644 index 28f7787..0000000 --- a/repo/com/ceabie/dextools/gradle-dexknife-plugin/maven-metadata.xml.sha1 +++ /dev/null @@ -1 +0,0 @@ -406e547c9497edbe78ead40c2be96c0d103290e6 \ No newline at end of file diff --git "a/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" "b/repo/com/\345\210\206\345\214\205\346\217\222\344\273\266.txt" deleted file mode 100644 index e69de29..0000000 diff --git "a/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" "b/repo/\346\234\254\345\234\260\344\273\223\345\272\223.txt" deleted file mode 100644 index e69de29..0000000 From 80692147737d51910a3dc1c12481f3f91fc0585f Mon Sep 17 00:00:00 2001 From: Artist Date: Mon, 28 Nov 2016 21:33:29 +0800 Subject: [PATCH 08/21] Update dexknife.txt --- DexKnifePlugin/app/dexknife.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DexKnifePlugin/app/dexknife.txt b/DexKnifePlugin/app/dexknife.txt index a377126..33e281b 100644 --- a/DexKnifePlugin/app/dexknife.txt +++ b/DexKnifePlugin/app/dexknife.txt @@ -24,7 +24,7 @@ # 表明限制的方法数小于main dex的必要方法数,调大到合适数值即可 -dex-param --set-max-idx-number=4000 -# 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) +# 注释掉将执行自定义dex分包,否则执行默认分包. #-auto-maindex # 显示miandex的日志. From ff9d4eb8cd1adf21f23f703a76cc9a60e0f664e1 Mon Sep 17 00:00:00 2001 From: Artist Date: Mon, 28 Nov 2016 21:35:17 +0800 Subject: [PATCH 09/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da9dcf6..9a9c0a0 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ dexKnife{ # 表明限制的方法数小于main dex的必要方法数,调大到合适数值即可 -dex-param --set-max-idx-number=4000 -# 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略) +# 注释掉将执行自定义dex分包,否则执行默认分包. #-auto-maindex # 显示miandex的日志. From cbc40ef5c4df2100110978420fab4aa38dfd8d22 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Tue, 21 Feb 2017 10:02:00 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E5=85=BC=E5=AE=B9Gradle=203.2+?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DexKnifePlugin/app/build.gradle | 25 ++- DexKnifePlugin/app/mutidex.jks | Bin 0 -> 2205 bytes .../app/src/main/res/values/strings.xml | 2 +- DexKnifePlugin/build.gradle | 5 +- .../dexknife-plus/gradle.properties | 2 +- .../com/ceabie/dexknife/DexSplitTools.java | 192 +++++++++++------- .../ceabie/dexknife/SplitToolsFor150.groovy | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- README.md | 4 +- 9 files changed, 142 insertions(+), 93 deletions(-) create mode 100644 DexKnifePlugin/app/mutidex.jks diff --git a/DexKnifePlugin/app/build.gradle b/DexKnifePlugin/app/build.gradle index 6a761f9..aa8d0ba 100644 --- a/DexKnifePlugin/app/build.gradle +++ b/DexKnifePlugin/app/build.gradle @@ -2,18 +2,28 @@ apply plugin: 'com.android.application' apply plugin: 'dexknifePlus' android { - compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VER) - buildToolsVersion project.BUILD_TOOLS_VER + compileSdkVersion 23 + buildToolsVersion '23.0.3' defaultConfig { - minSdkVersion Integer.parseInt(project.MIN_SDK_VER) - targetSdkVersion Integer.parseInt(project.TARGET_SDK_VERSION) + minSdkVersion 14 + targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } + //签名 + signingConfigs { + key { + storeFile file('mutidex.jks') + storePassword '123456' + keyAlias 'king' + keyPassword '123456' + } + } + productFlavors{ dev{ @@ -26,12 +36,13 @@ android { buildTypes { release { - minifyEnabled false + minifyEnabled true + signingConfig signingConfigs.key proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { -// minifyEnabled true + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } @@ -48,7 +59,7 @@ dexKnife{ //1.如果没有可选参数,将根据enabled决定是否分包。 //2.如果有可选参数,需满足必选参数和可选参数的条件才允许分包 productFlavor 'mock' - buildType 'debug' + //buildType 'debug' /* *eg:当前productFlavors = dev,buildType = debug, diff --git a/DexKnifePlugin/app/mutidex.jks b/DexKnifePlugin/app/mutidex.jks new file mode 100644 index 0000000000000000000000000000000000000000..ed545447f3abbbde6ebe83f62e1bc553f118224b GIT binary patch literal 2205 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 Klb){+DE - demo + MultiDexPluginApp Hello world! Settings diff --git a/DexKnifePlugin/build.gradle b/DexKnifePlugin/build.gradle index d88678c..0e9a366 100644 --- a/DexKnifePlugin/build.gradle +++ b/DexKnifePlugin/build.gradle @@ -1,12 +1,13 @@ buildscript { repositories { + //maven { url uri('./repo') } jcenter() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' - classpath 'com.library.tangxiaolv:dexknife-plus:1.0.1' + classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.library.tangxiaolv:dexknife-plus:1.0.3' } } diff --git a/DexKnifePlugin/dexknife-plus/gradle.properties b/DexKnifePlugin/dexknife-plus/gradle.properties index 184c457..e492aa4 100644 --- a/DexKnifePlugin/dexknife-plus/gradle.properties +++ b/DexKnifePlugin/dexknife-plus/gradle.properties @@ -1,6 +1,6 @@ #Gradle:groupId:libraryName:publicVersion LOCAL_VERSION=0.0.5 -PUBLIC_VERSION=1.0.1 +PUBLIC_VERSION=1.0.3 GROUP_ID=com.library.tangxiaolv #Modelһ LIBRARY_NAME=dexknife-plus diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java index a545af3..860d4af 100644 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.ceabie.dexknife; import org.gradle.api.Project; import org.gradle.api.file.FileTreeElement; +import org.gradle.api.specs.NotSpec; +import org.gradle.api.specs.OrSpec; import org.gradle.api.specs.Spec; import org.gradle.api.specs.Specs; import org.gradle.api.tasks.util.PatternSet; @@ -81,27 +82,27 @@ protected static void endDexKnife() { System.out.println("DexKnife Finished: " + time); } - public static boolean processMainDexList(Project project, boolean minifyEnabled, - File mappingFile, - File jarMergingOutputFile, File andMainDexList, - DexKnifeConfig dexKnifeConfig) throws Exception { + public static boolean processMainDexList(Project project, boolean minifyEnabled, File mappingFile, + File jarMergingOutputFile, File andMainDexList, + DexKnifeConfig dexKnifeConfig) throws Exception { if (!minifyEnabled && jarMergingOutputFile == null) { - System.out.println( - "DexKnife Error: jarMerging is Null! Skip DexKnife. Please report All Gradle Log."); + System.out.println("DexKnife Error: jarMerging is Null! Skip DexKnife. Please report All Gradle Log."); return false; } - return genMainDexList(project, minifyEnabled, mappingFile, jarMergingOutputFile, - andMainDexList, dexKnifeConfig); + try { + return genMainDexList(project, minifyEnabled, mappingFile, jarMergingOutputFile, + andMainDexList, dexKnifeConfig); + } catch (Exception e) { + e.printStackTrace(); + } + + return false; } /** * get the config of dex knife - * - * @param project project - * @return DexKnifeConfig - * @throws Exception exception */ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Exception { BufferedReader reader = new BufferedReader(new FileReader(project.file(DEX_KNIFE_CFG_TXT))); @@ -188,16 +189,15 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except addParams.add(DEX_MINIMAL_MAIN_DEX); } + // 使用ADT建议的mainlist if (dexKnifeConfig.useSuggest) { + + // 将全局过滤应用到建议的mainlist if (dexKnifeConfig.filterSuggest) { splitSuggest.addAll(splitToSecond); keepSuggest.addAll(keepMain); } - // for (String s : splitSuggest) { - // System.out.println("Suggest: " + s); - // } - if (!splitSuggest.isEmpty() || !keepSuggest.isEmpty()) { dexKnifeConfig.suggestPatternSet = new PatternSet() .exclude(splitSuggest) @@ -206,9 +206,6 @@ protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Except } if (!splitToSecond.isEmpty() || !keepMain.isEmpty()) { - // for (String s : splitToSecond) { - // System.out.println(s); - // } dexKnifeConfig.patternSet = new PatternSet() .exclude(splitToSecond) .include(keepMain); @@ -259,12 +256,12 @@ private static Spec getMaindexSpec(PatternSet patternSet) { } if (includeSpec != null && excludeSpec != null) { - maindexSpec = Specs.or(includeSpec, Specs.not(excludeSpec)); + maindexSpec = new OrSpec<>(includeSpec, new NotSpec<>(excludeSpec)); } else { if (excludeSpec == null) { maindexSpec = Specs.satisfyAll(); } else { - maindexSpec = Specs.not(excludeSpec); + maindexSpec = new NotSpec<>(excludeSpec); } } } @@ -276,17 +273,23 @@ private static Spec getMaindexSpec(PatternSet patternSet) { return maindexSpec; } + + private static boolean isPatternSetEmpty(PatternSet patternSet) { + return patternSet.getExcludes().isEmpty() && patternSet.getIncludes().isEmpty() + && patternSet.getExcludeSpecs().isEmpty() && patternSet.getIncludeSpecs().isEmpty(); + } + /** * generate the main dex list */ private static boolean genMainDexList(Project project, boolean minifyEnabled, - File mappingFile, File jarMergingOutputFile, - File andMainDexList, DexKnifeConfig dexKnifeConfig) throws Exception { + File mappingFile, File jarMergingOutputFile, + File andMainDexList, DexKnifeConfig dexKnifeConfig) throws Exception { System.out.println(":" + project.getName() + ":genMainDexList"); - // get the adt's maindexlist - HashSet mainCls = null; + // 1.get the adt's maindexlist + Map adtMainClasses = null; if (dexKnifeConfig.useSuggest) { PatternSet patternSet = dexKnifeConfig.suggestPatternSet; @@ -294,31 +297,43 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, patternSet = dexKnifeConfig.patternSet; } - mainCls = getAdtMainDexClasses(andMainDexList, patternSet, - dexKnifeConfig.logFilterSuggest); System.out.println("DexKnife: use suggest"); + adtMainClasses = getAdtMainDexClasses(andMainDexList, patternSet, dexKnifeConfig.logFilterSuggest); } File keepFile = project.file(MAINDEXLIST_TXT); keepFile.delete(); - ArrayList mainClasses = null; - if (minifyEnabled) { - System.err.println("DexKnife: From Mapping"); - // get classes from mapping - mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, - mainCls); + // 2.process the global filter + List mainClasses = null; + if (dexKnifeConfig.patternSet == null || isPatternSetEmpty(dexKnifeConfig.patternSet)) { + // only filter the suggest list + if (adtMainClasses != null && adtMainClasses.size() > 0) { + mainClasses = new ArrayList<>(); + Set> entries = adtMainClasses.entrySet(); + for (Map.Entry entry : entries) { + if (entry.getValue()) { + mainClasses.add(entry.getKey()); + } + } + } } else { - System.out.println("DexKnife: From MergedJar: " + jarMergingOutputFile); - if (jarMergingOutputFile != null) { - // get classes from merged jar - mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, - mainCls); + if (minifyEnabled) { + System.err.println("DexKnife: From Mapping"); + // get classes from mapping + mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, adtMainClasses); } else { - System.err.println("DexKnife: The Merged Jar is not exist! Can't be processed!"); + System.out.println("DexKnife: From MergedJar: " + jarMergingOutputFile); + if (jarMergingOutputFile != null) { + // get classes from merged jar + mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, adtMainClasses); + } else { + System.err.println("DexKnife: The Merged Jar is not exist! Can't be processed!"); + } } } + // 3.create the miandexlist if (mainClasses != null && mainClasses.size() > 0) { BufferedWriter writer = new BufferedWriter(new FileWriter(keepFile)); @@ -339,13 +354,24 @@ private static boolean genMainDexList(Project project, boolean minifyEnabled, throw new Exception("DexKnife Warning: Main dex is EMPTY ! Check your config and project!"); } + /** + * Gets main classes from jar. + * + * @param jarMergingOutputFile the jar merging output file + * @param mainDexPattern the main dex pattern + * @param adtMainCls the filter mapping of suggest classes + * @return the main classes from jar + * @throws Exception the exception + * @author ceabie + */ private static ArrayList getMainClassesFromJar( - File jarMergingOutputFile, PatternSet mainDexPattern, HashSet mainCls) + File jarMergingOutputFile, PatternSet mainDexPattern, Map adtMainCls) throws Exception { ZipFile clsFile = new ZipFile(jarMergingOutputFile); Spec asSpec = getMaindexSpec(mainDexPattern); ClassFileTreeElement treeElement = new ClassFileTreeElement(); + // lists classes from jar. ArrayList mainDexList = new ArrayList<>(); Enumeration entries = clsFile.entries(); while (entries.hasMoreElements()) { @@ -355,8 +381,7 @@ private static ArrayList getMainClassesFromJar( if (entryName.endsWith(CLASS_SUFFIX)) { treeElement.setClassPath(entryName); - if (asSpec.isSatisfiedBy(treeElement) - || (mainCls != null && mainCls.contains(entryName))) { + if (isAtMainDex(adtMainCls, entryName, treeElement, asSpec)) { mainDexList.add(entryName); } } @@ -370,23 +395,23 @@ private static ArrayList getMainClassesFromJar( /** * Gets main classes from mapping. * - * @param mapping the mapping file + * @param mapping the mapping file * @param mainDexPattern the main dex pattern - * @param mainCls the main cls + * @param adtMainCls the filter mapping of suggest classes * @return the main classes from mapping * @throws Exception the exception * @author ceabie */ - private static ArrayList getMainClassesFromMapping( + private static List getMainClassesFromMapping( File mapping, PatternSet mainDexPattern, - HashSet mainCls) throws Exception { + Map adtMainCls) throws Exception { String line; - ArrayList mainDexList = new ArrayList<>(); - BufferedReader reader = new BufferedReader(new FileReader(mapping)); + List mainDexList = new ArrayList<>(); + BufferedReader reader = new BufferedReader(new FileReader(mapping)); // all classes - ClassFileTreeElement treeElement = new ClassFileTreeElement(); + ClassFileTreeElement filterElement = new ClassFileTreeElement(); Spec asSpec = getMaindexSpec(mainDexPattern); while ((line = reader.readLine()) != null) { @@ -395,16 +420,16 @@ private static ArrayList getMainClassesFromMapping( if (line.endsWith(":")) { int flagPos = line.indexOf(MAPPING_FLAG); if (flagPos != -1) { + String sOrgCls = line.substring(0, flagPos).replace('.', '/') + CLASS_SUFFIX; + String sMapCls = line.substring(flagPos + MAPPING_FLAG_LEN, line.length() - 1) + .replace('.', '/') + CLASS_SUFFIX; - String sOrg = line.substring(0, flagPos).replace('.', '/') + CLASS_SUFFIX; - treeElement.setClassPath(sOrg); + filterElement.setClassPath(sOrgCls); - if (asSpec.isSatisfiedBy(treeElement) - || (mainCls != null && mainCls.contains(sOrg))) { - String sMap = line.substring(flagPos + MAPPING_FLAG_LEN, line.length() - 1) - .replace('.', '/') + CLASS_SUFFIX; - - mainDexList.add(sMap); + boolean isAtMainDex = isAtMainDex(adtMainCls, sMapCls, filterElement, asSpec); + System.out.println("Filter: " + sOrgCls + " [" + isAtMainDex + "]"); + if (isAtMainDex) { + mainDexList.add(sMapCls); } } } @@ -415,46 +440,59 @@ private static ArrayList getMainClassesFromMapping( return mainDexList; } + private static boolean isAtMainDex( + Map mainCls, String sMapCls, + ClassFileTreeElement treeElement, Spec asSpec) { + + if (mainCls != null) { + Boolean inAdtList = mainCls.get(sMapCls); + if (inAdtList != null) { + return inAdtList; + } + } + + return asSpec.isSatisfiedBy(treeElement); + } + /** - * get the maindexlist of android gradle plugin + * get the maindexlist of android gradle plugin. + * if enable ProGuard, return the mapped class. */ - private static HashSet getAdtMainDexClasses(File outputDir, PatternSet mainDexPattern, - boolean logFilter) - throws Exception { + private static Map getAdtMainDexClasses( + File outputDir, + PatternSet mainDexPattern, + boolean logFilter) throws Exception { + if (outputDir == null || !outputDir.exists()) { - System.err.println( - "DexKnife Warning: Android recommand Main dex is no exist, try run again!"); + System.err.println("DexKnife Warning: Android recommand Main dex is no exist, try run again!"); return null; } - HashSet mainCls = new HashSet<>(); + HashMap mainCls = new HashMap<>(); BufferedReader reader = new BufferedReader(new FileReader(outputDir)); ClassFileTreeElement treeElement = new ClassFileTreeElement(); - Spec asSpec = mainDexPattern != null ? getMaindexSpec(mainDexPattern) - : null; + Spec asSpec = mainDexPattern != null ? getMaindexSpec(mainDexPattern) : null; String line, clsPath; while ((line = reader.readLine()) != null) { line = line.trim(); int clsPos = line.lastIndexOf(CLASS_SUFFIX); if (clsPos != -1) { + boolean satisfiedBy = true; + if (asSpec != null) { clsPath = line.substring(0, clsPos).replace('.', '/') + CLASS_SUFFIX; treeElement.setClassPath(clsPath); - boolean satisfiedBy = asSpec.isSatisfiedBy(treeElement); - if (!satisfiedBy) { - if (logFilter) - System.out.println("DexKnife-Suggest: [Split] " + clsPath); - continue; + satisfiedBy = asSpec.isSatisfiedBy(treeElement); + if (logFilter) { + System.out.println("DexKnife-Suggest: [" + + (satisfiedBy ? "Keep" : "Split") + "] " + clsPath); } - - if (logFilter) - System.out.println("DexKnife-Suggest: [Keep] " + clsPath); } - mainCls.add(line); + mainCls.put(line, satisfiedBy); } } @@ -483,4 +521,4 @@ static int getAndroidPluginVersion(String version) { return ver; } -} +} \ No newline at end of file diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy index e555460..84932d3 100644 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy @@ -18,7 +18,6 @@ package com.ceabie.dexknife import com.android.build.api.transform.Format import com.android.build.api.transform.Transform import com.android.build.gradle.api.ApplicationVariant -import com.android.build.gradle.internal.incremental.InstantRunBuildContext import com.android.build.gradle.internal.pipeline.TransformTask import com.android.build.gradle.internal.transforms.DexTransform import org.gradle.api.Project @@ -127,7 +126,7 @@ public class SplitToolsFor150 extends DexSplitTools { private static boolean isInInstantRunMode(Object variant) { try { def scope = variant.getVariantData().getScope() - InstantRunBuildContext instantRunBuildContext = scope.getInstantRunBuildContext() + def instantRunBuildContext = scope.getInstantRunBuildContext() return instantRunBuildContext.isInInstantRunMode() } catch (Throwable e) { } diff --git a/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties b/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties index e5ad1b4..e17444a 100644 --- a/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties +++ b/DexKnifePlugin/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Tue Sep 20 15:06:11 CST 2016 +#Mon Dec 26 17:59:14 CST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/README.md b/README.md index 9a9c0a0..1c0f7e8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 -注2:本插件是基于[DexKnifePlugin 1.5.6](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 +注2:本插件是基于[DexKnifePlugin 1.5.9](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 ##填坑之路 ###坑1:65536 ,So easy! @@ -10,7 +10,7 @@ **解决:** ``` dependencies { - compile 'com.android.support:MultiDex:1.0.1' + compile 'com.android.support:MultiDex:1.0.2' } ``` 继承 Application ,重写 attachBaseContext(Context) From 75f6cc8cc071d8890dc63da1a8f0849b91b77c35 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Tue, 21 Feb 2017 10:14:39 +0800 Subject: [PATCH 11/21] update README.md --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1c0f7e8..5021cef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 -注2:本插件是基于[DexKnifePlugin 1.5.9](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 +注2:本插件是基于[DexKnifePlugin 1.6.0](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 ##填坑之路 ###坑1:65536 ,So easy! @@ -10,7 +10,7 @@ **解决:** ``` dependencies { - compile 'com.android.support:MultiDex:1.0.2' + compile 'com.android.support:MultiDex:1.0.1' } ``` 继承 Application ,重写 attachBaseContext(Context) @@ -111,9 +111,14 @@ afterEvaluate { ``` buildscript { dependencies { - classpath 'com.library.tangxiaolv:dexknife-plus:1.0.1' + classpath 'com.library.tangxiaolv:dexknife-plus:1.0.3' } } + +Notes:Version Mappting +1.0.3 -> DexKnifePlugin 1.6.0 +1.0.2 -> DexKnifePlugin 1.5.9 +1.0.1 -> DexKnifePlugin 1.5.6 ``` **第二步:在你的App模块的build.gradle添加插件** ``` From 58cfa586628928302a5041a4f9e2ce0af769bda3 Mon Sep 17 00:00:00 2001 From: Artist Date: Mon, 13 Mar 2017 14:42:19 +0800 Subject: [PATCH 12/21] Update README.md --- README.md | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5021cef..5f401d4 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,12 @@ **解决:** ``` +android{ + defaultConfig { + multiDexEnabled true + } +} + dependencies { compile 'com.android.support:MultiDex:1.0.1' } @@ -107,24 +113,38 @@ afterEvaluate { 于是乎就将Gradle脚本整合进了插件,这样只需维护一个配置文件就行了。读者可以根据自己需求自行选择分开配置还是整合配置。通过这种方式我们把主Dex的方法数维持在15000左右,从此再也不用担心方法数问题了!!! ##配置部分 -**第一步:添加根目录Gradle** +**第一步:添加分包支持** +``` +android{ + defaultConfig { + multiDexEnabled true + } +} + +dependencies { + compile 'com.android.support:MultiDex:1.0.1' +} +在继承的 Application中重写 attachBaseContext(Context) + +@Override +protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); +} +``` +**第二步:添加根目录Gradle** ``` buildscript { dependencies { classpath 'com.library.tangxiaolv:dexknife-plus:1.0.3' } } - -Notes:Version Mappting -1.0.3 -> DexKnifePlugin 1.6.0 -1.0.2 -> DexKnifePlugin 1.5.9 -1.0.1 -> DexKnifePlugin 1.5.6 ``` -**第二步:在你的App模块的build.gradle添加插件** +**第三步:在你的App模块的build.gradle添加插件** ``` apply plugin: 'dexknifePlus' ``` -**第三步:配置参数** +**第四步:配置参数**   ``` dexKnife{ //必选参数 @@ -144,7 +164,7 @@ dexKnife{ * */ } ``` -**第四步:在你的App模块目录下新建dexknife.txt,并自定义配置** +**第五步:在你的App模块目录下新建dexknife.txt,并自定义配置** ``` #为注释符 @@ -179,7 +199,7 @@ dexKnife{ #-log-mainlist ``` -**第五步:在 defaultConfig 或者 buildTypes中打开 multiDexEnabled true,否则不起作用** +**第六步:在 defaultConfig 或者 buildTypes中打开 multiDexEnabled true,否则不起作用** ##已知错误 From dc4324f3bd2f31d184a67defbea1ac6ad6a1a4b6 Mon Sep 17 00:00:00 2001 From: Artist Date: Mon, 13 Mar 2017 14:42:58 +0800 Subject: [PATCH 13/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f401d4..d022d0c 100644 --- a/README.md +++ b/README.md @@ -124,8 +124,8 @@ android{ dependencies { compile 'com.android.support:MultiDex:1.0.1' } -在继承的 Application中重写 attachBaseContext(Context) +在继承的 Application中重写 attachBaseContext(Context) @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); From b1cc65990502b6e5f1750e37d47cfc1e69168055 Mon Sep 17 00:00:00 2001 From: Artist Date: Wed, 22 Mar 2017 18:43:51 +0800 Subject: [PATCH 14/21] Update README.md --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d022d0c..e5d2f30 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -#Android傻瓜式分包插件 +# Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 注2:本插件是基于[DexKnifePlugin 1.6.0](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 -##填坑之路 -###坑1:65536 ,So easy! +## 填坑之路 +### 坑1:65536 ,So easy! **原因:**Dalvik 的 invoke-kind 指令集中,method reference index 只留了 16 bits,最多能引用 65535 个方法。 参考=>[由Android 65K方法数限制引发的思考](http://jayfeng.com/2016/03/10/%E7%94%B1Android-65K%E6%96%B9%E6%B3%95%E6%95%B0%E9%99%90%E5%88%B6%E5%BC%95%E5%8F%91%E7%9A%84%E6%80%9D%E8%80%83/). @@ -28,7 +28,7 @@ protected void attachBaseContext(Context base) { } ``` -###坑2:Too many classes in –main-dex-list ,what? +### 坑2:Too many classes in –main-dex-list ,what? **原因:**通过上面的官方分包,已经把原Dex分为1主Dex加多从Dex。主Dex包含所有4大组件,Application,Annotation,multidex等及其必要的直接依赖。由于我们方法数已达到16W之巨,上百个Activity全部塞进主Dex,又成功的把主Dex撑爆了。 **解决:** @@ -47,17 +47,17 @@ afterEvaluate { ``` 参考=>[Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/index.html) -###坑3:gradle 1.5.0之后不支持这种写法 ,what the fuck? +### 坑3:gradle 1.5.0之后不支持这种写法 ,what the fuck? **原因:**官方解释Gralde`1.5.0`以上已经将(jacoco, progard, multi-dex)统一移到[Transform API](http://tools.android.com/tech-docs/new-build-system/transform-api)里,然而Transform API并没有想象的那么简单好用,翻遍Google终于找到一个兼容Gradle `1.5.0`以上的分包插件[DexKnifePlugin](https://github.com/ceabie/DexKnifePlugin)。 扩展=>这篇[Android 热修复使用Gradle Plugin1.5改造Nuwa插件](http://blog.csdn.net/sbsujjbcy/article/details/50839263)比较好的介绍了Transform API的使用。 -###坑4:NoClassDefFoundError ,are you kiding me? +### 坑4:NoClassDefFoundError ,are you kiding me? **原因:**通过插件手动指定main dex中要保留的类,虽然分包成功,但是main dex中的类及其直接引用类很难通过手动的方式指定。 **解决方式:** [美团Android DEX自动拆包及动态加载简介](http://tech.meituan.com/mt-android-auto-split-dex.html),他们是通过编写了一个能够自动分析Class依赖的脚本去算出主Dex需要包含的所有必要依赖。看来写脚本是跑不掉了。 -###坑5:自定义脚本 ,read the fuck source! +### 坑5:自定义脚本 ,read the fuck source! **问题一:**哪些类是需要放入主Dex中? 查看sdk\build-tools\platform-version\mainDexClasses.rules发现放入主Dex相关类有Instrumentation,Application,Activity,Service,ContentProvider,BroadcastReceiver,BackupAgent的所有子类。 @@ -101,18 +101,18 @@ afterEvaluate { } ``` -###坑6:主dex依然爆表,shit again! +### 坑6:主dex依然爆表,shit again! 其实上面那段脚本已经成功筛选出我们想要放入主Dex的`manifest_keep列表`和`maindexlist列表`,但是在打包的时候还是把所有类打进主Dex(已无语)。这个时候就需要跟[DexKnifePlugin](https://github.com/ceabie/DexKnifePlugin)插件配合使用,首先在gradle中加上上述脚本,然后使用插件时在配置文件中加上 `-split **.**`和`#-donot-use-suggest`。DexKnifePlugin插件运行原理很简单,在生成Dex任务之前首先读取自己的配置文件(包含前面我们通过Gradle脚本生成的`maindexlist`列表),然后扫描combined.jar(包含工程中所有.class文件)匹配出我们自定义的maindexlist.txt,再替换掉build/multi-dex/maindexlist.txt,和build实例。这样分包的时候就会基于我们的规则生成主Dex。 -###坑7:ANR,HAHAHA! +### 坑7:ANR,HAHAHA! 我们最低API=16,测试并未发现ANR问题,所以暂时没考虑景上添花,这个问题比较好解决。 参考=>[Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/index.html) -###Congratulation +### Congratulation 恭喜,填坑终于结束,不过还有点不爽的是需要同时维护Gradle脚本和插件的配置。 于是乎就将Gradle脚本整合进了插件,这样只需维护一个配置文件就行了。读者可以根据自己需求自行选择分开配置还是整合配置。通过这种方式我们把主Dex的方法数维持在15000左右,从此再也不用担心方法数问题了!!! -##配置部分 +## 配置部分 **第一步:添加分包支持** ``` android{ @@ -201,7 +201,7 @@ dexKnife{ **第六步:在 defaultConfig 或者 buildTypes中打开 multiDexEnabled true,否则不起作用** -##已知错误 +## 已知错误 注:分包的时候如果发现一些莫名的错误,可以关掉instant run,一般都能解决 From 7333162f6107622113e37d3e03920a6b05e7b13e Mon Sep 17 00:00:00 2001 From: ceabie Date: Sun, 9 Apr 2017 22:54:37 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=8C=85=E5=90=8D=EF=BC=8Cdexknife=E6=94=B9=E7=94=A8maven?= =?UTF-8?q?=E5=BC=95=E5=85=A5=EF=BC=8C=E5=8D=87=E7=BA=A7=E5=88=B01.6.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DexKnifePlugin/dexknife-plus/build.gradle | 1 + .../ceabie/dexknife/ClassFileTreeElement.java | 101 ---- .../com/ceabie/dexknife/DexKnifeConfig.java | 35 -- .../com/ceabie/dexknife/DexSplitTools.java | 524 ------------------ .../dexknife/InjectAndroidBuilder.groovy | 178 ------ .../ceabie/dexknife/SplitToolsFor130.groovy | 71 --- .../ceabie/dexknife/SplitToolsFor150.groovy | 136 ----- .../dexknife/DexKnifeExtension.groovy | 2 +- .../dexknife/DexKnifePlusPlugin.groovy} | 37 +- .../gradle-plugins/dexknifePlus.properties | 2 +- 10 files changed, 10 insertions(+), 1077 deletions(-) delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy delete mode 100644 DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy rename DexKnifePlugin/dexknife-plus/src/main/groovy/com/{ceabie => tangxiaolv}/dexknife/DexKnifeExtension.groovy (77%) rename DexKnifePlugin/dexknife-plus/src/main/groovy/com/{ceabie/dexknife/DexKnifePlugin.groovy => tangxiaolv/dexknife/DexKnifePlusPlugin.groovy} (75%) diff --git a/DexKnifePlugin/dexknife-plus/build.gradle b/DexKnifePlugin/dexknife-plus/build.gradle index 3aafa1b..02e3c83 100644 --- a/DexKnifePlugin/dexknife-plus/build.gradle +++ b/DexKnifePlugin/dexknife-plus/build.gradle @@ -25,6 +25,7 @@ configurations { dependencies { compile gradleApi() compile localGroovy() + compile 'com.ceabie.dextools:gradle-dexknife-plugin:1.6.2' provided 'com.android.tools.build:builder:2.1.3' provided 'com.android.tools.build:gradle-core:2.1.3' } diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java deleted file mode 100644 index f08b325..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/ClassFileTreeElement.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife; - -import org.gradle.api.file.FileTreeElement; -import org.gradle.api.file.RelativePath; -import org.gradle.internal.nativeintegration.filesystem.FileSystem; - -import java.io.File; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * Mock the file tree element of Filter. - * - * @author ceabie - */ -public class ClassFileTreeElement implements FileTreeElement { - private RelativePath mRelativePath; - private File mFile; - - public void setClassPath(String name) { - mFile = new File(name); - mRelativePath = RelativePath.parse(!isDirectory(), name); - } - - @Override - public File getFile() { - return mFile; - } - - @Override - public boolean isDirectory() { - return false; - } - - @Override - public long getLastModified() { - return 0; - } - - @Override - public long getSize() { - return 0; - } - - @Override - public InputStream open() { -// try { -// return mZipFile.getInputStream(mZipEntry); -// } catch (IOException e) { -// e.printStackTrace(); -// } - - return null; - } - - @Override - public void copyTo(OutputStream outputStream) { - } - - @Override - public boolean copyTo(File file) { - return true; - } - - @Override - public String getName() { - return mFile.getName(); - } - - @Override - public String getPath() { - return mFile.getPath(); - } - - @Override - public RelativePath getRelativePath() { - return mRelativePath; - } - - @Override - public int getMode() { - return isDirectory() - ? FileSystem.DEFAULT_DIR_MODE - : FileSystem.DEFAULT_FILE_MODE; - } -} diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java deleted file mode 100644 index 8fc9018..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife; - -import org.gradle.api.tasks.util.PatternSet; - -import java.util.Set; - -/** - * The type Dex knife config. - * - * @author ceabie - */ -public class DexKnifeConfig { - PatternSet patternSet; - PatternSet suggestPatternSet; - boolean useSuggest = true; - boolean filterSuggest = false; - boolean logMainList = false; - boolean logFilterSuggest = false; - Set additionalParameters; -} diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java deleted file mode 100644 index 860d4af..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexSplitTools.java +++ /dev/null @@ -1,524 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife; - -import org.gradle.api.Project; -import org.gradle.api.file.FileTreeElement; -import org.gradle.api.specs.NotSpec; -import org.gradle.api.specs.OrSpec; -import org.gradle.api.specs.Spec; -import org.gradle.api.specs.Specs; -import org.gradle.api.tasks.util.PatternSet; - -import java.io.*; -import java.util.*; -import java.util.regex.Pattern; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -/** - * the base of spilt tools. - * - * @author ceabie - */ -public class DexSplitTools { - - public static final String DEX_KNIFE_CFG_TXT = "dexknife.txt"; - - private static final String DEX_MINIMAL_MAIN_DEX = "--minimal-main-dex"; - - private static final String DEX_KNIFE_CFG_DEX_PARAM = "-dex-param"; - private static final String DEX_KNIFE_CFG_SPLIT = "-split"; - private static final String DEX_KNIFE_CFG_KEEP = "-keep"; - private static final String DEX_KNIFE_CFG_AUTO_MAINDEX = "-auto-maindex"; - private static final String DEX_KNIFE_CFG_DONOT_USE_SUGGEST = "-donot-use-suggest"; - private static final String DEX_KNIFE_CFG_LOG_MAIN_DEX = "-log-mainlist"; - private static final String DEX_KNIFE_CFG_FILTER_SUGGEST = "-filter-suggest"; - private static final String DEX_KNIFE_CFG_SUGGEST_SPLIT = "-suggest-split"; - private static final String DEX_KNIFE_CFG_SUGGEST_KEEP = "-suggest-keep"; - private static final String DEX_KNIFE_CFG_LOG_FILTER_SUGGEST = "-log-filter-suggest"; - - private static final String MAINDEXLIST_TXT = "maindexlist.txt"; - private static final String MAPPING_FLAG = " -> "; - private static final int MAPPING_FLAG_LEN = MAPPING_FLAG.length(); - private static final String CLASS_SUFFIX = ".class"; - - private static long StartTime = 0; - - protected static void startDexKnife() { - System.out.println("DexKnife Processing ..."); - StartTime = System.currentTimeMillis(); - } - - protected static void endDexKnife() { - String time; - long internal = System.currentTimeMillis() - StartTime; - if (internal > 1000) { - float i = internal / 1000; - if (i >= 60) { - i = i / 60; - int min = (int) i; - time = min + " min " + (i - min) + " s"; - } else { - time = i + "s"; - } - } else { - time = internal + "ms"; - } - - System.out.println("DexKnife Finished: " + time); - } - - public static boolean processMainDexList(Project project, boolean minifyEnabled, File mappingFile, - File jarMergingOutputFile, File andMainDexList, - DexKnifeConfig dexKnifeConfig) throws Exception { - - if (!minifyEnabled && jarMergingOutputFile == null) { - System.out.println("DexKnife Error: jarMerging is Null! Skip DexKnife. Please report All Gradle Log."); - return false; - } - - try { - return genMainDexList(project, minifyEnabled, mappingFile, jarMergingOutputFile, - andMainDexList, dexKnifeConfig); - } catch (Exception e) { - e.printStackTrace(); - } - - return false; - } - - /** - * get the config of dex knife - */ - protected static DexKnifeConfig getDexKnifeConfig(Project project) throws Exception { - BufferedReader reader = new BufferedReader(new FileReader(project.file(DEX_KNIFE_CFG_TXT))); - DexKnifeConfig dexKnifeConfig = new DexKnifeConfig(); - - String line; - boolean matchCmd; - boolean minimalMainDex = true; - Set addParams = new HashSet<>(); - - Set splitToSecond = new HashSet<>(); - Set keepMain = new HashSet<>(); - Set splitSuggest = new HashSet<>(); - Set keepSuggest = new HashSet<>(); - - while ((line = reader.readLine()) != null) { - line = line.trim(); - if (line.length() == 0) { - continue; - } - - int rem = line.indexOf('#'); - if (rem != -1) { - if (rem == 0) { - continue; - } else { - line = line.substring(0, rem).trim(); - } - } - - String cmd = line.toLowerCase(); - matchCmd = true; - - if (DEX_KNIFE_CFG_AUTO_MAINDEX.equals(cmd)) { - minimalMainDex = false; - } else if (matchCommand(cmd, DEX_KNIFE_CFG_DEX_PARAM)) { - String param = line.substring(DEX_KNIFE_CFG_DEX_PARAM.length()).trim(); - if (!param.toLowerCase().startsWith("--main-dex-list")) { - addParams.add(param); - } - - } else if (matchCommand(cmd, DEX_KNIFE_CFG_SPLIT)) { - String sPattern = line.substring(DEX_KNIFE_CFG_SPLIT.length()).trim(); - addClassFilePath(sPattern, splitToSecond); - - } else if (matchCommand(cmd, DEX_KNIFE_CFG_KEEP)) { - String sPattern = line.substring(DEX_KNIFE_CFG_KEEP.length()).trim(); - addClassFilePath(sPattern, keepMain); - - } else if (DEX_KNIFE_CFG_DONOT_USE_SUGGEST.equals(cmd)) { - dexKnifeConfig.useSuggest = false; - - } else if (DEX_KNIFE_CFG_FILTER_SUGGEST.equals(cmd)) { - dexKnifeConfig.filterSuggest = true; - - } else if (DEX_KNIFE_CFG_LOG_MAIN_DEX.equals(cmd)) { - dexKnifeConfig.logMainList = true; - - } else if (DEX_KNIFE_CFG_LOG_FILTER_SUGGEST.equals(cmd)) { - dexKnifeConfig.logFilterSuggest = true; - - } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_SPLIT)) { - String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_SPLIT.length()).trim(); - addClassFilePath(sPattern, splitSuggest); - - } else if (matchCommand(cmd, DEX_KNIFE_CFG_SUGGEST_KEEP)) { - String sPattern = line.substring(DEX_KNIFE_CFG_SUGGEST_KEEP.length()).trim(); - addClassFilePath(sPattern, keepSuggest); - - } else if (!cmd.startsWith("-")) { - addClassFilePath(line, splitToSecond); - } else { - matchCmd = false; - } - - if (matchCmd) { - System.out.println("DexKnife Config: " + line); - } - } - - reader.close(); - - if (minimalMainDex) { - addParams.add(DEX_MINIMAL_MAIN_DEX); - } - - // 使用ADT建议的mainlist - if (dexKnifeConfig.useSuggest) { - - // 将全局过滤应用到建议的mainlist - if (dexKnifeConfig.filterSuggest) { - splitSuggest.addAll(splitToSecond); - keepSuggest.addAll(keepMain); - } - - if (!splitSuggest.isEmpty() || !keepSuggest.isEmpty()) { - dexKnifeConfig.suggestPatternSet = new PatternSet() - .exclude(splitSuggest) - .include(keepSuggest); - } - } - - if (!splitToSecond.isEmpty() || !keepMain.isEmpty()) { - dexKnifeConfig.patternSet = new PatternSet() - .exclude(splitToSecond) - .include(keepMain); - } else { - dexKnifeConfig.useSuggest = true; - System.err.println("DexKnife Warning: NO SET split Or keep path, it will use Suggest!"); - } - - dexKnifeConfig.additionalParameters = addParams; - - return dexKnifeConfig; - } - - private static boolean matchCommand(String text, String cmd) { - Pattern pattern = Pattern.compile("^" + cmd + "\\s+"); - return pattern.matcher(text).find(); - } - - /** - * add the class path to pattern list, and the single class pattern can work. - */ - private static void addClassFilePath(String classPath, Set patternList) { - if (classPath != null && classPath.length() > 0) { - if (classPath.endsWith(CLASS_SUFFIX)) { - classPath = classPath.substring(0, classPath.length() - CLASS_SUFFIX.length()) - .replace('.', '/') + CLASS_SUFFIX; - } else { - classPath = classPath.replace('.', '/'); - } - - patternList.add(classPath); - } - } - - private static Spec getMaindexSpec(PatternSet patternSet) { - Spec maindexSpec = null; - - if (patternSet != null) { - Spec includeSpec = null; - Spec excludeSpec = null; - - if (!patternSet.getIncludes().isEmpty()) { - includeSpec = patternSet.getAsIncludeSpec(); - } - - if (!patternSet.getExcludes().isEmpty()) { - excludeSpec = patternSet.getAsExcludeSpec(); - } - - if (includeSpec != null && excludeSpec != null) { - maindexSpec = new OrSpec<>(includeSpec, new NotSpec<>(excludeSpec)); - } else { - if (excludeSpec == null) { - maindexSpec = Specs.satisfyAll(); - } else { - maindexSpec = new NotSpec<>(excludeSpec); - } - } - } - - if (maindexSpec == null) { - maindexSpec = Specs.satisfyAll(); - } - - return maindexSpec; - } - - - private static boolean isPatternSetEmpty(PatternSet patternSet) { - return patternSet.getExcludes().isEmpty() && patternSet.getIncludes().isEmpty() - && patternSet.getExcludeSpecs().isEmpty() && patternSet.getIncludeSpecs().isEmpty(); - } - - /** - * generate the main dex list - */ - private static boolean genMainDexList(Project project, boolean minifyEnabled, - File mappingFile, File jarMergingOutputFile, - File andMainDexList, DexKnifeConfig dexKnifeConfig) throws Exception { - - System.out.println(":" + project.getName() + ":genMainDexList"); - - // 1.get the adt's maindexlist - Map adtMainClasses = null; - if (dexKnifeConfig.useSuggest) { - - PatternSet patternSet = dexKnifeConfig.suggestPatternSet; - if (dexKnifeConfig.filterSuggest && patternSet == null) { - patternSet = dexKnifeConfig.patternSet; - } - - System.out.println("DexKnife: use suggest"); - adtMainClasses = getAdtMainDexClasses(andMainDexList, patternSet, dexKnifeConfig.logFilterSuggest); - } - - File keepFile = project.file(MAINDEXLIST_TXT); - keepFile.delete(); - - // 2.process the global filter - List mainClasses = null; - if (dexKnifeConfig.patternSet == null || isPatternSetEmpty(dexKnifeConfig.patternSet)) { - // only filter the suggest list - if (adtMainClasses != null && adtMainClasses.size() > 0) { - mainClasses = new ArrayList<>(); - Set> entries = adtMainClasses.entrySet(); - for (Map.Entry entry : entries) { - if (entry.getValue()) { - mainClasses.add(entry.getKey()); - } - } - } - } else { - if (minifyEnabled) { - System.err.println("DexKnife: From Mapping"); - // get classes from mapping - mainClasses = getMainClassesFromMapping(mappingFile, dexKnifeConfig.patternSet, adtMainClasses); - } else { - System.out.println("DexKnife: From MergedJar: " + jarMergingOutputFile); - if (jarMergingOutputFile != null) { - // get classes from merged jar - mainClasses = getMainClassesFromJar(jarMergingOutputFile, dexKnifeConfig.patternSet, adtMainClasses); - } else { - System.err.println("DexKnife: The Merged Jar is not exist! Can't be processed!"); - } - } - } - - // 3.create the miandexlist - if (mainClasses != null && mainClasses.size() > 0) { - BufferedWriter writer = new BufferedWriter(new FileWriter(keepFile)); - - for (String mainClass : mainClasses) { - writer.write(mainClass); - writer.newLine(); - - if (dexKnifeConfig.logMainList) { - System.out.println(mainClass); - } - } - - writer.close(); - - return true; - } - - throw new Exception("DexKnife Warning: Main dex is EMPTY ! Check your config and project!"); - } - - /** - * Gets main classes from jar. - * - * @param jarMergingOutputFile the jar merging output file - * @param mainDexPattern the main dex pattern - * @param adtMainCls the filter mapping of suggest classes - * @return the main classes from jar - * @throws Exception the exception - * @author ceabie - */ - private static ArrayList getMainClassesFromJar( - File jarMergingOutputFile, PatternSet mainDexPattern, Map adtMainCls) - throws Exception { - ZipFile clsFile = new ZipFile(jarMergingOutputFile); - Spec asSpec = getMaindexSpec(mainDexPattern); - ClassFileTreeElement treeElement = new ClassFileTreeElement(); - - // lists classes from jar. - ArrayList mainDexList = new ArrayList<>(); - Enumeration entries = clsFile.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - String entryName = entry.getName(); - - if (entryName.endsWith(CLASS_SUFFIX)) { - treeElement.setClassPath(entryName); - - if (isAtMainDex(adtMainCls, entryName, treeElement, asSpec)) { - mainDexList.add(entryName); - } - } - } - - clsFile.close(); - - return mainDexList; - } - - /** - * Gets main classes from mapping. - * - * @param mapping the mapping file - * @param mainDexPattern the main dex pattern - * @param adtMainCls the filter mapping of suggest classes - * @return the main classes from mapping - * @throws Exception the exception - * @author ceabie - */ - private static List getMainClassesFromMapping( - File mapping, - PatternSet mainDexPattern, - Map adtMainCls) throws Exception { - - String line; - List mainDexList = new ArrayList<>(); - BufferedReader reader = new BufferedReader(new FileReader(mapping)); // all classes - - ClassFileTreeElement filterElement = new ClassFileTreeElement(); - Spec asSpec = getMaindexSpec(mainDexPattern); - - while ((line = reader.readLine()) != null) { - line = line.trim(); - - if (line.endsWith(":")) { - int flagPos = line.indexOf(MAPPING_FLAG); - if (flagPos != -1) { - String sOrgCls = line.substring(0, flagPos).replace('.', '/') + CLASS_SUFFIX; - String sMapCls = line.substring(flagPos + MAPPING_FLAG_LEN, line.length() - 1) - .replace('.', '/') + CLASS_SUFFIX; - - filterElement.setClassPath(sOrgCls); - - boolean isAtMainDex = isAtMainDex(adtMainCls, sMapCls, filterElement, asSpec); - System.out.println("Filter: " + sOrgCls + " [" + isAtMainDex + "]"); - if (isAtMainDex) { - mainDexList.add(sMapCls); - } - } - } - } - - reader.close(); - - return mainDexList; - } - - private static boolean isAtMainDex( - Map mainCls, String sMapCls, - ClassFileTreeElement treeElement, Spec asSpec) { - - if (mainCls != null) { - Boolean inAdtList = mainCls.get(sMapCls); - if (inAdtList != null) { - return inAdtList; - } - } - - return asSpec.isSatisfiedBy(treeElement); - } - - /** - * get the maindexlist of android gradle plugin. - * if enable ProGuard, return the mapped class. - */ - private static Map getAdtMainDexClasses( - File outputDir, - PatternSet mainDexPattern, - boolean logFilter) throws Exception { - - if (outputDir == null || !outputDir.exists()) { - System.err.println("DexKnife Warning: Android recommand Main dex is no exist, try run again!"); - return null; - } - - HashMap mainCls = new HashMap<>(); - BufferedReader reader = new BufferedReader(new FileReader(outputDir)); - - ClassFileTreeElement treeElement = new ClassFileTreeElement(); - Spec asSpec = mainDexPattern != null ? getMaindexSpec(mainDexPattern) : null; - - String line, clsPath; - while ((line = reader.readLine()) != null) { - line = line.trim(); - int clsPos = line.lastIndexOf(CLASS_SUFFIX); - if (clsPos != -1) { - boolean satisfiedBy = true; - - if (asSpec != null) { - clsPath = line.substring(0, clsPos).replace('.', '/') + CLASS_SUFFIX; - treeElement.setClassPath(clsPath); - - satisfiedBy = asSpec.isSatisfiedBy(treeElement); - if (logFilter) { - System.out.println("DexKnife-Suggest: [" + - (satisfiedBy ? "Keep" : "Split") + "] " + clsPath); - } - } - - mainCls.put(line, satisfiedBy); - } - } - - reader.close(); - - if (mainCls.size() == 0) { - mainCls = null; - } - - return mainCls; - } - - static int getAndroidPluginVersion(String version) { - int size = version.length(); - int ver = 0; - for (int i = 0; i < size; i++) { - char c = version.charAt(i); - if (Character.isDigit(c) || c == '.') { - if (c != '.') { - ver = ver * 10 + c - '0'; - } - } else { - break; - } - } - - return ver; - } -} \ No newline at end of file diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy deleted file mode 100644 index 5651173..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/InjectAndroidBuilder.groovy +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife - -import com.android.build.gradle.internal.transforms.DexTransform -import com.android.builder.core.AndroidBuilder -import com.android.builder.core.DexOptions -import com.android.builder.core.ErrorReporter -import com.android.builder.sdk.TargetInfo -import com.android.ide.common.process.JavaProcessExecutor -import com.android.ide.common.process.ProcessException -import com.android.ide.common.process.ProcessExecutor -import com.android.ide.common.process.ProcessOutputHandler -import com.android.utils.ILogger -import groovy.transform.CompileStatic - -import java.lang.reflect.Field - -/** - * proxy the androidBuilder that plugin 1.5.0 to add '--minimal-main-dex' options. - * - * @author ceabie - */ -public class InjectAndroidBuilder extends AndroidBuilder { - - Collection mAddParams; - AndroidBuilder mAndroidBuilder; - - public InjectAndroidBuilder(String projectId, - String createdBy, - ProcessExecutor processExecutor, - JavaProcessExecutor javaProcessExecutor, - ErrorReporter errorReporter, - ILogger logger, - boolean verboseExec) { - super(projectId, createdBy, processExecutor, javaProcessExecutor, errorReporter, logger, verboseExec) - } - -// @Override // for < 2.2.0 - public void convertByteCode(Collection inputs, - File outDexFolder, - boolean multidex, - File mainDexList, - DexOptions dexOptions, - List additionalParameters, - boolean incremental, - boolean optimize, - ProcessOutputHandler processOutputHandler) - throws IOException, InterruptedException, ProcessException { - - println("DexKnife: convertByteCode before 2.2.0") - if (mAddParams != null) { - if (additionalParameters == null) { - additionalParameters = new ArrayList<>() - } - - mergeParams(additionalParameters, mAddParams) - } - - // groovy call super has bug - mAndroidBuilder.convertByteCode(inputs, outDexFolder, multidex, mainDexList, dexOptions, - additionalParameters, incremental, optimize, processOutputHandler); - } - -// @Override for >= 2.2.0 - public void convertByteCode(Collection inputs, - File outDexFolder, - boolean multidex, - File mainDexList, - final DexOptions dexOptions, - boolean optimize, - ProcessOutputHandler processOutputHandler) - throws IOException, InterruptedException, ProcessException { - - println("DexKnife:convertByteCode after 2.2.0") - - DexOptions dexOptionsProxy = dexOptions - - if (mAddParams != null) { - List additionalParameters = dexOptions.getAdditionalParameters() - if (additionalParameters == null) { - additionalParameters = new ArrayList<>() - } - - mergeParams(additionalParameters, mAddParams) - } - - mAndroidBuilder.convertByteCode(inputs, outDexFolder, multidex, mainDexList, dexOptionsProxy, - optimize, processOutputHandler); - } - - @CompileStatic - @Override - List getBootClasspath(boolean includeOptionalLibraries) { - return mAndroidBuilder.getBootClasspath(includeOptionalLibraries) - } - - @CompileStatic - @Override - List getBootClasspathAsStrings(boolean includeOptionalLibraries) { - return mAndroidBuilder.getBootClasspathAsStrings(includeOptionalLibraries) - } - - - @CompileStatic - static void mergeParams(List additionalParameters, Collection addParams) { - List mergeParam = new ArrayList<>() - for (String param : addParams) { - if (!additionalParameters.contains(param)) { - mergeParam.add(param) - } - } - - if (mergeParam.size() > 0) { - additionalParameters.addAll(mergeParam) - } - } - - - public static void proxyAndroidBuilder(DexTransform transform, Collection addParams) { - if (addParams != null && addParams.size() > 0) { - accessibleField(DexTransform.class, "androidBuilder") - .set(transform, getProxyAndroidBuilder(transform.androidBuilder, addParams)) - } - } - - private static AndroidBuilder getProxyAndroidBuilder(AndroidBuilder orgAndroidBuilder, - Collection addParams) { - InjectAndroidBuilder myAndroidBuilder = new InjectAndroidBuilder( - orgAndroidBuilder.mProjectId, - orgAndroidBuilder.mCreatedBy, - orgAndroidBuilder.getProcessExecutor(), - orgAndroidBuilder.mJavaProcessExecutor, - orgAndroidBuilder.getErrorReporter(), - orgAndroidBuilder.getLogger(), - orgAndroidBuilder.mVerboseExec) - - // if >= 2.2.0 - def to = myAndroidBuilder.respondsTo("setTargetInfo", TargetInfo.class) - if (to.size() > 0) { - myAndroidBuilder.setTargetInfo(orgAndroidBuilder.getTargetInfo()) - myAndroidBuilder.setSdkInfo(orgAndroidBuilder.getSdkInfo()) - myAndroidBuilder.setLibraryRequests(orgAndroidBuilder.mLibraryRequests) - } else { - myAndroidBuilder.setTargetInfo( - orgAndroidBuilder.getSdkInfo(), - orgAndroidBuilder.getTargetInfo(), - orgAndroidBuilder.mLibraryRequests) - } - - myAndroidBuilder.mAddParams = addParams - myAndroidBuilder.mAndroidBuilder = orgAndroidBuilder -// myAndroidBuilder.mBootClasspathFiltered = orgAndroidBuilder.mBootClasspathFiltered -// myAndroidBuilder.mBootClasspathAll = orgAndroidBuilder.mBootClasspathAll - - return myAndroidBuilder - } - - @CompileStatic - private static Field accessibleField(Class cls, String field) { - Field f = cls.getDeclaredField(field) - f.setAccessible(true) - return f - } -} diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy deleted file mode 100644 index 58fdba5..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor130.groovy +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife - -import org.gradle.api.Project - -/** - * the spilt tools for plugin 1.3.0. - * - * @author ceabie - */ -public class SplitToolsFor130 extends DexSplitTools { - - public static boolean isCompat(Object variant) { - try { - if (variant != null) { - variant.dex - - return true - } - } catch (RuntimeException e) { -// e.printStackTrace() - } - - return false - } - - public static void processSplitDex(Project project, Object variant) { - def dex = variant.dex - if (dex.multiDexEnabled) { - dex.inputs.file DEX_KNIFE_CFG_TXT - - dex.doFirst { - startDexKnife() - - DexKnifeConfig dexKnifeConfig = getDexKnifeConfig(project) - - def scope = variant.getVariantData().getScope() - File mergedJar = scope.jarMergingOutputFile - File mappingFile = variant.mappingFile - File andMainDexList = scope.mainDexListFile - boolean minifyEnabled = variant.buildType.minifyEnabled - - if (processMainDexList(project, minifyEnabled, mappingFile, mergedJar, - andMainDexList, dexKnifeConfig)) { - if (dex.additionalParameters == null) { - dex.additionalParameters = [] - } - - dex.additionalParameters += '--main-dex-list=maindexlist.txt' - dex.additionalParameters += dexKnifeConfig.additionalParameters - } - - endDexKnife() - } - } - } -} \ No newline at end of file diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy deleted file mode 100644 index 84932d3..0000000 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/SplitToolsFor150.groovy +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2016 ceabie (https://github.com/ceabie/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ceabie.dexknife - -import com.android.build.api.transform.Format -import com.android.build.api.transform.Transform -import com.android.build.gradle.api.ApplicationVariant -import com.android.build.gradle.internal.pipeline.TransformTask -import com.android.build.gradle.internal.transforms.DexTransform -import org.gradle.api.Project - -/** - * the spilt tools for plugin 1.5.0. - * - * @author ceabie - */ -public class SplitToolsFor150 extends DexSplitTools { - - public static boolean isCompat() { -// if (getAndroidPluginVersion() < 200) { -// return true; -// } - - return true; - } - - public static void processSplitDex(Project project, ApplicationVariant variant) { - if (isInInstantRunMode(variant)) { - System.err.println("DexKnife: Instant Run mode, DexKnife is auto disabled!") - return - } - - TransformTask dexTask -// TransformTask proGuardTask - TransformTask jarMergingTask - - String name = variant.name.capitalize() - boolean minifyEnabled = variant.buildType.minifyEnabled - - // find the task we want to process - project.tasks.matching { - ((it instanceof TransformTask) && it.name.endsWith(name)) // TransformTask - }.each { TransformTask theTask -> - Transform transform = theTask.transform - String transformName = transform.name - -// if (minifyEnabled && "proguard".equals(transformName)) { // ProGuardTransform -// proGuardTask = theTask -// } else - if ("jarMerging".equalsIgnoreCase(transformName)) { - jarMergingTask = theTask - } else if ("dex".equalsIgnoreCase(transformName)) { // DexTransform - dexTask = theTask - } - } - - if (dexTask != null && ((DexTransform) dexTask.transform).multiDex) { - dexTask.inputs.file DEX_KNIFE_CFG_TXT - - dexTask.doFirst { - startDexKnife() - - File mergedJar = null - File mappingFile = variant.mappingFile - DexTransform dexTransform = it.transform - File fileAdtMainList = dexTransform.mainDexListFile - - println("DexKnife Adt Main: " + fileAdtMainList) - - DexKnifeConfig dexKnifeConfig = getDexKnifeConfig(project) - - // 非混淆的,从合并后的jar文件中提起mainlist; - // 混淆的,直接从mapping文件中提取 - if (minifyEnabled) { - println("DexKnife-From Mapping: " + mappingFile) - } else { - if (jarMergingTask != null) { - Transform transform = jarMergingTask.transform - def outputProvider = jarMergingTask.outputStream.asOutput() - mergedJar = outputProvider.getContentLocation("combined", - transform.getOutputTypes(), - transform.getScopes(), Format.JAR) - } - - println("DexKnife-From MergedJar: " + mergedJar) - } - - if (processMainDexList(project, minifyEnabled, mappingFile, mergedJar, - fileAdtMainList, dexKnifeConfig)) { - - int version = getAndroidPluginVersion(getAndroidGradlePluginVersion()) - println("DexKnife: AndroidPluginVersion: " + version) - - // after 2.2.0, it can additionalParameters, but it is a copy in task - - // 替换 AndroidBuilder - InjectAndroidBuilder.proxyAndroidBuilder(dexTransform, - dexKnifeConfig.additionalParameters) - - // 替换这个文件 - fileAdtMainList.delete() - project.copy { - from 'maindexlist.txt' - into fileAdtMainList.parentFile - } - } - - endDexKnife() - } - } - } - - private static boolean isInInstantRunMode(Object variant) { - try { - def scope = variant.getVariantData().getScope() - def instantRunBuildContext = scope.getInstantRunBuildContext() - return instantRunBuildContext.isInInstantRunMode() - } catch (Throwable e) { - } - - return false - } -} \ No newline at end of file diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifeExtension.groovy similarity index 77% rename from DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifeExtension.groovy index dffcbf0..31795a9 100644 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifeExtension.groovy +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifeExtension.groovy @@ -1,4 +1,4 @@ -package com.ceabie.dexknife +package com.tangxiaolv.dexknife class DexKnifeExtension { boolean enabled = false diff --git a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifePlusPlugin.groovy similarity index 75% rename from DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy rename to DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifePlusPlugin.groovy index c7086b6..c19971b 100644 --- a/DexKnifePlugin/dexknife-plus/src/main/groovy/com/ceabie/dexknife/DexKnifePlugin.groovy +++ b/DexKnifePlugin/dexknife-plus/src/main/groovy/com/tangxiaolv/dexknife/DexKnifePlusPlugin.groovy @@ -13,15 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ceabie.dexknife +package com.tangxiaolv.dexknife +import com.ceabie.dexknife.DexKnifePlugin +import com.ceabie.dexknife.DexSplitTools import org.gradle.api.Plugin import org.gradle.api.Project /** * the spilt tools plugin. */ -public class DexKnifePlugin implements Plugin { +public class DexKnifePlusPlugin implements Plugin { @Override void apply(Project project) { @@ -48,21 +50,11 @@ public class DexKnifePlugin implements Plugin { filterActivity(project); - if (isMultiDexEnabled(variant)) { - if (SplitToolsFor130.isCompat(variant)) { - System.err.println("DexKnife: Compat 1.3.0."); - SplitToolsFor130.processSplitDex(project, variant) - } else if (SplitToolsFor150.isCompat()) { - SplitToolsFor150.processSplitDex(project, variant) - } else { - System.err.println("DexKnife Error: DexKnife is not compatible your Android gradle plugin."); - } - } else { - System.err.println("DexKnife : MultiDexEnabled is false, it's not work."); - } + DexKnifePlugin.dexKnifeProcessVariant(project, variant) } + } else { + printf "-DexKnifePlugin Enable = false\n"; } - printf "-DexKnifePlugin Enable = false\n"; } } } @@ -103,19 +95,4 @@ public class DexKnifePlugin implements Plugin { } } } - - private static boolean isMultiDexEnabled(variant) { - def is = variant.buildType.multiDexEnabled - if (is != null) { - return is; - } - - is = variant.mergedFlavor.multiDexEnabled - if (is != null) { - return is; - } - - return false - } - } \ No newline at end of file diff --git a/DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties b/DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties index 24abf7f..c2ec48d 100644 --- a/DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties +++ b/DexKnifePlugin/dexknife-plus/src/main/resources/META-INF/gradle-plugins/dexknifePlus.properties @@ -1 +1 @@ -implementation-class=com.ceabie.dexknife.DexKnifePlugin +implementation-class=com.tangxiaolv.dexknife.DexKnifePlusPlugin From bfe34c47676e9b5cb98f926dc166285e784967ed Mon Sep 17 00:00:00 2001 From: ceabie Date: Mon, 10 Apr 2017 00:15:07 +0800 Subject: [PATCH 16/21] update readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e5d2f30..745e0d4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 -注2:本插件是基于[DexKnifePlugin 1.6.0](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 +注2:本插件是基于[DexKnifePlugin 1.6.2](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 ## 填坑之路 ### 坑1:65536 ,So easy! @@ -201,6 +201,8 @@ dexKnife{ **第六步:在 defaultConfig 或者 buildTypes中打开 multiDexEnabled true,否则不起作用** +**使用前先参阅 DexKnife 的[特性部分](https://github.com/ceabie/DexKnifePlugin#特性重要)** + ## 已知错误 注:分包的时候如果发现一些莫名的错误,可以关掉instant run,一般都能解决 From 79a7b0ea6da3cc0fa234abdf9dcfc6dab0a3be4c Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Mon, 10 Apr 2017 09:42:32 +0800 Subject: [PATCH 17/21] sync update from dexknife --- .gitignore | 1 + DexKnifePlugin/dexknife-plus/gradle.properties | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 20c8c87..fa5f81f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ /DexKnifePlugin/.idea/qaplug_profiles.xml /DexKnifePlugin/.idea/runConfigurations.xml /DexKnifePlugin/.idea/vcs.xml +.idea/ diff --git a/DexKnifePlugin/dexknife-plus/gradle.properties b/DexKnifePlugin/dexknife-plus/gradle.properties index e492aa4..2f24490 100644 --- a/DexKnifePlugin/dexknife-plus/gradle.properties +++ b/DexKnifePlugin/dexknife-plus/gradle.properties @@ -1,6 +1,6 @@ #Gradle:groupId:libraryName:publicVersion LOCAL_VERSION=0.0.5 -PUBLIC_VERSION=1.0.3 +PUBLIC_VERSION=1.0.4 GROUP_ID=com.library.tangxiaolv #Modelһ LIBRARY_NAME=dexknife-plus diff --git a/README.md b/README.md index 745e0d4..aae8520 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ protected void attachBaseContext(Context base) { ``` buildscript { dependencies { - classpath 'com.library.tangxiaolv:dexknife-plus:1.0.3' + classpath 'com.library.tangxiaolv:dexknife-plus:1.0.4' } } ``` From 09f786eb448e553251d0ba791605d1ce6d2f4d28 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Mon, 10 Apr 2017 09:51:56 +0800 Subject: [PATCH 18/21] update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index aae8520..c64d957 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # Android傻瓜式分包插件 +[ ![Download](https://api.bintray.com/packages/tangxiaolv/maven/dexknife-plus/images/download.svg?version=1.0.4) ](https://bintray.com/tangxiaolv/maven/dexknife-plus/1.0.4/link) + 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 注2:本插件是基于[DexKnifePlugin 1.6.2](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。 From d7b22bbd038b434082a51f4911d09b7653ee6389 Mon Sep 17 00:00:00 2001 From: tangxiaolv Date: Mon, 10 Apr 2017 10:25:28 +0800 Subject: [PATCH 19/21] update readme --- DexKnifePlugin/app/dexknife.txt | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/DexKnifePlugin/app/dexknife.txt b/DexKnifePlugin/app/dexknife.txt index 33e281b..c6e76f4 100644 --- a/DexKnifePlugin/app/dexknife.txt +++ b/DexKnifePlugin/app/dexknife.txt @@ -1,10 +1,10 @@ #为注释符 -#-----------主Dex中必要依赖的脚本配置----------- -#默认保留四大组件中其他三大组件(并计算其依赖树),Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity +#-----------主Dex中必要依赖的脚本配置-----------(支持依赖检测) +#默认保留四大组件中Service,ContentProvider,BroadcastReceiver三大组件,Activity组件选择性保留,若为空不保留任何Activity -just activity com.ceabie.demo.MainActivity -#-----------附加类----------- +#-----------附加类-----------(不支持依赖检测) # 如果你想要某个包路径在maindex中,则使用 -keep 选项,即使他已经在分包的路径中.若为空,不保留任意类 #-keep com.ceabie.demo.** diff --git a/README.md b/README.md index c64d957..4d98b13 100644 --- a/README.md +++ b/README.md @@ -170,11 +170,11 @@ dexKnife{ ``` #为注释符 -#-----------主Dex中必要依赖的脚本配置----------- -#默认保留四大组件中其他三大组件(并计算其依赖树),Activity组件选择性保留(使用-just activity 选项),若为空不保留任何Activity +#-----------主Dex中必要依赖的脚本配置-----------(支持依赖检测) +#默认保留四大组件中Service,ContentProvider,BroadcastReceiver三大组件,Activity组件选择性保留,若为空不保留任何Activity -just activity com.ceabie.demo.MainActivity -#-----------附加类----------- +#-----------附加类-----------(不支持依赖检测) # 如果你想要某个包路径在maindex中,则使用 -keep 选项,即使他已经在分包的路径中.若为空,不保留任意类 #-keep com.ceabie.demo.** From c90d78fdde307bf878a9805c38d8502dcaa0979e Mon Sep 17 00:00:00 2001 From: Artist Date: Sun, 20 Jan 2019 16:02:35 +0800 Subject: [PATCH 20/21] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4d98b13..b67d2d2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# Deprecated +plz use [multiDexKeepProguard](https://developer.android.com/studio/build/multidex?hl=zh-cn) to splite main dex classes. + # Android傻瓜式分包插件 [ ![Download](https://api.bintray.com/packages/tangxiaolv/maven/dexknife-plus/images/download.svg?version=1.0.4) ](https://bintray.com/tangxiaolv/maven/dexknife-plus/1.0.4/link) From 19abd3325654666e82f4f868d1c1396781c113f4 Mon Sep 17 00:00:00 2001 From: Artist Date: Sun, 20 Jan 2019 16:03:56 +0800 Subject: [PATCH 21/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b67d2d2..28cdf90 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Deprecated -plz use [multiDexKeepProguard](https://developer.android.com/studio/build/multidex?hl=zh-cn) to splite main dex classes. +Please use [multiDexKeepProguard](https://developer.android.com/studio/build/multidex?hl=zh-cn) to splite main dex classes. # Android傻瓜式分包插件 [ ![Download](https://api.bintray.com/packages/tangxiaolv/maven/dexknife-plus/images/download.svg?version=1.0.4) ](https://bintray.com/tangxiaolv/maven/dexknife-plus/1.0.4/link)