PageRenderTime 41ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/atlas-gradle-plugin/atlas-plugin/src/main/java/com/taobao/android/builder/tools/classinject/ApkInjectInfoCreator.java

https://bitbucket.org/luo1291250810/atlas
Java | 299 lines | 60 code | 19 blank | 220 comment | 7 complexity | f6b0daffb86dd9aa8f465869fd481075 MD5 | raw file
Possible License(s): GPL-2.0, Apache-2.0, LGPL-3.0
  1. /*
  2. *
  3. *
  4. * Apache License
  5. * Version 2.0, January 2004
  6. * http://www.apache.org/licenses/
  7. *
  8. * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  9. *
  10. * 1. Definitions.
  11. *
  12. * "License" shall mean the terms and conditions for use, reproduction,
  13. * and distribution as defined by Sections 1 through 9 of this document.
  14. *
  15. * "Licensor" shall mean the copyright owner or entity authorized by
  16. * the copyright owner that is granting the License.
  17. *
  18. * "Legal Entity" shall mean the union of the acting entity and all
  19. * other entities that control, are controlled by, or are under common
  20. * control with that entity. For the purposes of this definition,
  21. * "control" means (i) the power, direct or indirect, to cause the
  22. * direction or management of such entity, whether by contract or
  23. * otherwise, or (ii) ownership of fifty percent (50%) or more of the
  24. * outstanding shares, or (iii) beneficial ownership of such entity.
  25. *
  26. * "You" (or "Your") shall mean an individual or Legal Entity
  27. * exercising permissions granted by this License.
  28. *
  29. * "Source" form shall mean the preferred form for making modifications,
  30. * including but not limited to software source code, documentation
  31. * source, and configuration files.
  32. *
  33. * "Object" form shall mean any form resulting from mechanical
  34. * transformation or translation of a Source form, including but
  35. * not limited to compiled object code, generated documentation,
  36. * and conversions to other media types.
  37. *
  38. * "Work" shall mean the work of authorship, whether in Source or
  39. * Object form, made available under the License, as indicated by a
  40. * copyright notice that is included in or attached to the work
  41. * (an example is provided in the Appendix below).
  42. *
  43. * "Derivative Works" shall mean any work, whether in Source or Object
  44. * form, that is based on (or derived from) the Work and for which the
  45. * editorial revisions, annotations, elaborations, or other modifications
  46. * represent, as a whole, an original work of authorship. For the purposes
  47. * of this License, Derivative Works shall not include works that remain
  48. * separable from, or merely link (or bind by name) to the interfaces of,
  49. * the Work and Derivative Works thereof.
  50. *
  51. * "Contribution" shall mean any work of authorship, including
  52. * the original version of the Work and any modifications or additions
  53. * to that Work or Derivative Works thereof, that is intentionally
  54. * submitted to Licensor for inclusion in the Work by the copyright owner
  55. * or by an individual or Legal Entity authorized to submit on behalf of
  56. * the copyright owner. For the purposes of this definition, "submitted"
  57. * means any form of electronic, verbal, or written communication sent
  58. * to the Licensor or its representatives, including but not limited to
  59. * communication on electronic mailing lists, source code control systems,
  60. * and issue tracking systems that are managed by, or on behalf of, the
  61. * Licensor for the purpose of discussing and improving the Work, but
  62. * excluding communication that is conspicuously marked or otherwise
  63. * designated in writing by the copyright owner as "Not a Contribution."
  64. *
  65. * "Contributor" shall mean Licensor and any individual or Legal Entity
  66. * on behalf of whom a Contribution has been received by Licensor and
  67. * subsequently incorporated within the Work.
  68. *
  69. * 2. Grant of Copyright License. Subject to the terms and conditions of
  70. * this License, each Contributor hereby grants to You a perpetual,
  71. * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  72. * copyright license to reproduce, prepare Derivative Works of,
  73. * publicly display, publicly perform, sublicense, and distribute the
  74. * Work and such Derivative Works in Source or Object form.
  75. *
  76. * 3. Grant of Patent License. Subject to the terms and conditions of
  77. * this License, each Contributor hereby grants to You a perpetual,
  78. * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  79. * (except as stated in this section) patent license to make, have made,
  80. * use, offer to sell, sell, import, and otherwise transfer the Work,
  81. * where such license applies only to those patent claims licensable
  82. * by such Contributor that are necessarily infringed by their
  83. * Contribution(s) alone or by combination of their Contribution(s)
  84. * with the Work to which such Contribution(s) was submitted. If You
  85. * institute patent litigation against any entity (including a
  86. * cross-claim or counterclaim in a lawsuit) alleging that the Work
  87. * or a Contribution incorporated within the Work constitutes direct
  88. * or contributory patent infringement, then any patent licenses
  89. * granted to You under this License for that Work shall terminate
  90. * as of the date such litigation is filed.
  91. *
  92. * 4. Redistribution. You may reproduce and distribute copies of the
  93. * Work or Derivative Works thereof in any medium, with or without
  94. * modifications, and in Source or Object form, provided that You
  95. * meet the following conditions:
  96. *
  97. * (a) You must give any other recipients of the Work or
  98. * Derivative Works a copy of this License; and
  99. *
  100. * (b) You must cause any modified files to carry prominent notices
  101. * stating that You changed the files; and
  102. *
  103. * (c) You must retain, in the Source form of any Derivative Works
  104. * that You distribute, all copyright, patent, trademark, and
  105. * attribution notices from the Source form of the Work,
  106. * excluding those notices that do not pertain to any part of
  107. * the Derivative Works; and
  108. *
  109. * (d) If the Work includes a "NOTICE" text file as part of its
  110. * distribution, then any Derivative Works that You distribute must
  111. * include a readable copy of the attribution notices contained
  112. * within such NOTICE file, excluding those notices that do not
  113. * pertain to any part of the Derivative Works, in at least one
  114. * of the following places: within a NOTICE text file distributed
  115. * as part of the Derivative Works; within the Source form or
  116. * documentation, if provided along with the Derivative Works; or,
  117. * within a display generated by the Derivative Works, if and
  118. * wherever such third-party notices normally appear. The contents
  119. * of the NOTICE file are for informational purposes only and
  120. * do not modify the License. You may add Your own attribution
  121. * notices within Derivative Works that You distribute, alongside
  122. * or as an addendum to the NOTICE text from the Work, provided
  123. * that such additional attribution notices cannot be construed
  124. * as modifying the License.
  125. *
  126. * You may add Your own copyright statement to Your modifications and
  127. * may provide additional or different license terms and conditions
  128. * for use, reproduction, or distribution of Your modifications, or
  129. * for any such Derivative Works as a whole, provided Your use,
  130. * reproduction, and distribution of the Work otherwise complies with
  131. * the conditions stated in this License.
  132. *
  133. * 5. Submission of Contributions. Unless You explicitly state otherwise,
  134. * any Contribution intentionally submitted for inclusion in the Work
  135. * by You to the Licensor shall be under the terms and conditions of
  136. * this License, without any additional terms or conditions.
  137. * Notwithstanding the above, nothing herein shall supersede or modify
  138. * the terms of any separate license agreement you may have executed
  139. * with Licensor regarding such Contributions.
  140. *
  141. * 6. Trademarks. This License does not grant permission to use the trade
  142. * names, trademarks, service marks, or product names of the Licensor,
  143. * except as required for reasonable and customary use in describing the
  144. * origin of the Work and reproducing the content of the NOTICE file.
  145. *
  146. * 7. Disclaimer of Warranty. Unless required by applicable law or
  147. * agreed to in writing, Licensor provides the Work (and each
  148. * Contributor provides its Contributions) on an "AS IS" BASIS,
  149. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  150. * implied, including, without limitation, any warranties or conditions
  151. * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  152. * PARTICULAR PURPOSE. You are solely responsible for determining the
  153. * appropriateness of using or redistributing the Work and assume any
  154. * risks associated with Your exercise of permissions under this License.
  155. *
  156. * 8. Limitation of Liability. In no event and under no legal theory,
  157. * whether in tort (including negligence), contract, or otherwise,
  158. * unless required by applicable law (such as deliberate and grossly
  159. * negligent acts) or agreed to in writing, shall any Contributor be
  160. * liable to You for damages, including any direct, indirect, special,
  161. * incidental, or consequential damages of any character arising as a
  162. * result of this License or out of the use or inability to use the
  163. * Work (including but not limited to damages for loss of goodwill,
  164. * work stoppage, computer failure or malfunction, or any and all
  165. * other commercial damages or losses), even if such Contributor
  166. * has been advised of the possibility of such damages.
  167. *
  168. * 9. Accepting Warranty or Additional Liability. While redistributing
  169. * the Work or Derivative Works thereof, You may choose to offer,
  170. * and charge a fee for, acceptance of support, warranty, indemnity,
  171. * or other liability obligations and/or rights consistent with this
  172. * License. However, in accepting such obligations, You may act only
  173. * on Your own behalf and on Your sole responsibility, not on behalf
  174. * of any other Contributor, and only if You agree to indemnify,
  175. * defend, and hold each Contributor harmless for any liability
  176. * incurred by, or claims asserted against, such Contributor by reason
  177. * of your accepting any such warranty or additional liability.
  178. *
  179. * END OF TERMS AND CONDITIONS
  180. *
  181. * APPENDIX: How to apply the Apache License to your work.
  182. *
  183. * To apply the Apache License to your work, attach the following
  184. * boilerplate notice, with the fields enclosed by brackets "[]"
  185. * replaced with your own identifying information. (Don't include
  186. * the brackets!) The text should be enclosed in the appropriate
  187. * comment syntax for the file format. We also recommend that a
  188. * file or class name and description of purpose be included on the
  189. * same "printed page" as the copyright notice for easier
  190. * identification within third-party archives.
  191. *
  192. * Copyright 2016 Alibaba Group
  193. *
  194. * Licensed under the Apache License, Version 2.0 (the "License");
  195. * you may not use this file except in compliance with the License.
  196. * You may obtain a copy of the License at
  197. *
  198. * http://www.apache.org/licenses/LICENSE-2.0
  199. *
  200. * Unless required by applicable law or agreed to in writing, software
  201. * distributed under the License is distributed on an "AS IS" BASIS,
  202. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  203. * See the License for the specific language governing permissions and
  204. * limitations under the License.
  205. *
  206. *
  207. */
  208. package com.taobao.android.builder.tools.classinject;
  209. import com.alibaba.fastjson.JSON;
  210. import com.android.build.gradle.internal.api.AppVariantContext;
  211. import com.taobao.android.builder.AtlasBuildContext;
  212. import com.taobao.android.builder.dependency.AndroidDependencyTree;
  213. import com.taobao.android.builder.dependency.model.AwbBundle;
  214. import com.taobao.android.builder.tools.bundleinfo.model.BasicBundleInfo;
  215. import com.taobao.android.builder.tools.bundleinfo.model.BundleInfo;
  216. import org.apache.commons.lang3.StringUtils;
  217. import org.dom4j.DocumentException;
  218. import java.io.IOException;
  219. import java.util.ArrayList;
  220. import java.util.List;
  221. /**
  222. * Created by wuzhong on 2016/12/1.
  223. */
  224. public class ApkInjectInfoCreator {
  225. public InjectParam creteInjectParam(AppVariantContext appVariantContext) throws IOException, DocumentException {
  226. InjectParam injectParam = new InjectParam();
  227. injectParam.removePreverify = !appVariantContext.getAtlasExtension()
  228. .getTBuildConfig()
  229. .getDoPreverify();
  230. injectParam.version = appVariantContext.getVariantConfiguration().getVersionName();
  231. AndroidDependencyTree androidDependencyTree = AtlasBuildContext.androidDependencyTrees.get(
  232. appVariantContext.getScope().
  233. getVariantConfiguration().getFullName());
  234. List<BasicBundleInfo> basicBundleInfos = new ArrayList<BasicBundleInfo>();
  235. for (AwbBundle awbBundle : androidDependencyTree.getAwbBundles()) {
  236. BundleInfo muppBundleInfo = awbBundle.bundleInfo;
  237. BasicBundleInfo basicBundleInfo = new BasicBundleInfo();
  238. basicBundleInfo.setApplicationName(muppBundleInfo.getApplicationName());
  239. basicBundleInfo.setVersion(muppBundleInfo.getVersion());
  240. basicBundleInfo.setPkgName(muppBundleInfo.getPkgName());
  241. if (!muppBundleInfo.getIsInternal()) {
  242. basicBundleInfo.setIsInternal(false);
  243. }
  244. if (!muppBundleInfo.getActivities().isEmpty()) {
  245. basicBundleInfo.setActivities(muppBundleInfo.getActivities());
  246. }
  247. if (!muppBundleInfo.getContentProviders().isEmpty()) {
  248. basicBundleInfo.setContentProviders(muppBundleInfo.getContentProviders());
  249. }
  250. if (!muppBundleInfo.getDependency().isEmpty()) {
  251. basicBundleInfo.setDependency(muppBundleInfo.getDependency());
  252. }
  253. if (!muppBundleInfo.getReceivers().isEmpty()) {
  254. basicBundleInfo.setReceivers(muppBundleInfo.getReceivers());
  255. }
  256. if (!muppBundleInfo.getServices().isEmpty()) {
  257. basicBundleInfo.setServices(muppBundleInfo.getServices());
  258. }
  259. basicBundleInfos.add(basicBundleInfo);
  260. }
  261. injectParam.bundleInfo = JSON.toJSONString(basicBundleInfos);
  262. //FIXME MOVE TO MTL-PLUGIN
  263. //List<String> autoStartBundles = new ArrayList<String>(appVariantContext.getAtlasExtension().getTBuildConfig().getAutoStartBundles());
  264. //
  265. //UpdateConfig updateConfig = appVariantContext.getAtlasExtension().getUpdateConfig();
  266. //if (updateConfig.enabled) {
  267. // injectParam.group = updateConfig.getProductName();
  268. // injectParam.outApp = updateConfig.isOutApp();
  269. // autoStartBundles.add(0, updateConfig.getSdkPkgName());
  270. //}
  271. //
  272. injectParam.autoStartBundles = StringUtils.join(appVariantContext.getAtlasExtension()
  273. .getTBuildConfig()
  274. .getAutoStartBundles(), ",");
  275. injectParam.preLaunch = appVariantContext.getAtlasExtension()
  276. .getTBuildConfig()
  277. .getPreLaunch();
  278. return injectParam;
  279. }
  280. }