Deploy to GitHub pages

This commit is contained in:
github-actions[bot]
2025-11-15 17:19:55 +00:00
committed by GitHub
commit b6e2fda7eb
52 changed files with 2613 additions and 0 deletions

View File

@@ -0,0 +1 @@
const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data};

View File

@@ -0,0 +1 @@
import{_ as e,o as c,c as t}from"./app-aH6YcK-Q.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default};

View File

@@ -0,0 +1 @@
const t=JSON.parse('{"key":"v-41967128","path":"/zh-cn/about/about.html","title":"关于此文档","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"许可证","slug":"许可证","link":"#许可证","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/about/about.md"}');export{t as data};

View File

@@ -0,0 +1,16 @@
import{_ as o,r as c,o as l,c as t,a,b as e,d as n,e as p}from"./app-aH6YcK-Q.js";const r={},i=a("h1",{id:"关于此文档",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#关于此文档","aria-hidden":"true"},"#"),e(" 关于此文档")],-1),d={href:"https://v2.vuepress.vuejs.org/zh",target:"_blank",rel:"noopener noreferrer"},h=a("h2",{id:"许可证",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#许可证","aria-hidden":"true"},"#"),e(" 许可证")],-1),b={href:"https://github.com/HighCapable/Gropify/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer"},u=p(`<div class="language-text" data-ext="text"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#adbac7;">Apache License Version 2.0</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Copyright (C) 2019 HighCapable</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></span>
<span class="line"><span style="color:#adbac7;">you may not use this file except in compliance with the License.</span></span>
<span class="line"><span style="color:#adbac7;">You may obtain a copy of the License at</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;"> https://www.apache.org/licenses/LICENSE-2.0</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Unless required by applicable law or agreed to in writing, software</span></span>
<span class="line"><span style="color:#adbac7;">distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></span>
<span class="line"><span style="color:#adbac7;">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></span>
<span class="line"><span style="color:#adbac7;">See the License for the specific language governing permissions and</span></span>
<span class="line"><span style="color:#adbac7;">limitations under the License.</span></span>
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>版权所有 © 2019 HighCapable</p>`,2);function _(y,f){const s=c("ExternalLinkIcon");return l(),t("div",null,[i,a("blockquote",null,[a("p",null,[e("此文档由 "),a("a",d,[e("VuePress"),n(s)]),e(" 强力驱动。")])]),h,a("p",null,[a("a",b,[e("Apache-2.0"),n(s)])]),u])}const m=o(r,[["render",_],["__file","about.html.vue"]]);export{m as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-7a15fe3b","path":"/en/about/about.html","title":"About This Document","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"License","slug":"license","link":"#license","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/about/about.md"}');export{e as data};

View File

@@ -0,0 +1,16 @@
import{_ as o,r as t,o as c,c as l,a as e,b as a,d as n,e as p}from"./app-aH6YcK-Q.js";const i={},r=e("h1",{id:"about-this-document",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#about-this-document","aria-hidden":"true"},"#"),a(" About This Document")],-1),d={href:"https://v2.vuepress.vuejs.org/en",target:"_blank",rel:"noopener noreferrer"},h=e("h2",{id:"license",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),b={href:"https://github.com/HighCapable/Gropify/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer"},u=p(`<div class="language-text" data-ext="text"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#adbac7;">Apache License Version 2.0</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Copyright (C) 2019 HighCapable</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></span>
<span class="line"><span style="color:#adbac7;">you may not use this file except in compliance with the License.</span></span>
<span class="line"><span style="color:#adbac7;">You may obtain a copy of the License at</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;"> https://www.apache.org/licenses/LICENSE-2.0</span></span>
<span class="line"><span style="color:#adbac7;"></span></span>
<span class="line"><span style="color:#adbac7;">Unless required by applicable law or agreed to in writing, software</span></span>
<span class="line"><span style="color:#adbac7;">distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></span>
<span class="line"><span style="color:#adbac7;">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></span>
<span class="line"><span style="color:#adbac7;">See the License for the specific language governing permissions and</span></span>
<span class="line"><span style="color:#adbac7;">limitations under the License.</span></span>
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>Copyright © 2019 HighCapable</p>`,2);function y(_,m){const s=t("ExternalLinkIcon");return c(),l("div",null,[r,e("blockquote",null,[e("p",null,[a("This document is powered by "),e("a",d,[a("VuePress"),n(s)]),a(".")])]),h,e("p",null,[e("a",b,[a("Apache-2.0"),n(s)])]),u])}const f=o(i,[["render",y],["__file","about.html.vue"]]);export{f as default};

16
assets/app-aH6YcK-Q.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as a,r as s,o as d,c as l,a as e,b as o,d as n,e as i}from"./app-aH6YcK-Q.js";const c={},r=i('<h1 id="changelog" tabindex="-1"><a class="header-anchor" href="#changelog" aria-hidden="true">#</a> Changelog</h1><blockquote><p>The version update history of <code>Gropify</code> is recorded here.</p></blockquote><div class="custom-container danger"><p class="custom-container-title">Pay Attention</p><p>We will only maintain the latest API version. If you are using an outdated API version, you voluntarily renounce any possibility of maintenance.</p></div><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>To avoid translation time consumption, Changelog will use <strong>Google Translation</strong> from <strong>Chinese</strong> to <strong>English</strong>, please refer to the original text for actual reference.</p><p>Time zone of version release date: <strong>UTC+8</strong></p></div>',4),u={id:"_1-0-1-2025-11-16",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#_1-0-1-2025-11-16","aria-hidden":"true"},"#",-1),p=i("<ul><li>Fixed the issue where <code>permanentKeyValues</code> was incorrectly configured to <code>replacementKeyValues</code></li><li>Optimized the automatic type conversion function for property key-values, fixed the problem of negative long integers being converted to integers</li><li>Optimized log output function, added tags and text colors for each type of log</li><li>Added <code>keyValueRules</code> to manually specify the type of property key-values, effective when <code>useTypeAutoConversion</code> is enabled</li><li>Enhanced debugging function, added detailed log output in debug mode</li><li>Fixed the issue where <code>extensionName</code> was judged as empty and illegal under default settings</li><li>Added judgment content for default extension method names that may cause conflicts</li><li>Added <code>manifestPlaceholders</code> property key-value synchronization function to <code>android</code> configuration method block</li><li>Fixed the problem of Javapoet and Kotlinpoet processing special escape characters in source code generation</li><li>Fixed other issues that may cause build script compilation failure</li></ul>",1),g={id:"_1-0-0-2025-11-11",tabindex:"-1"},f=e("a",{class:"header-anchor",href:"#_1-0-0-2025-11-11","aria-hidden":"true"},"#",-1),m=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function _(y,v){const t=s("Badge");return d(),l("div",null,[r,e("h3",u,[h,o(" 1.0.1 | 2025.11.16 "),n(t,{type:"tip",text:"latest",vertical:"middle"})]),p,e("h3",g,[f,o(" 1.0.0 | 2025.11.11 "),n(t,{type:"warning",text:"stale",vertical:"middle"})]),m])}const b=a(c,[["render",_],["__file","changelog.html.vue"]]);export{b as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-3f851d14","path":"/en/about/changelog.html","title":"Changelog","lang":"en-US","frontmatter":{},"headers":[{"level":3,"title":"1.0.1 | 2025.11.16","slug":"_1-0-1-2025-11-16","link":"#_1-0-1-2025-11-16","children":[]},{"level":3,"title":"1.0.0 | 2025.11.11","slug":"_1-0-0-2025-11-11","link":"#_1-0-0-2025-11-11","children":[]}],"git":{"updatedTime":1763226900000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/about/changelog.md"}');export{e as data};

View File

@@ -0,0 +1 @@
import{_ as a,r as i,o as c,c as n,a as e,b as o,d as l,e as d}from"./app-aH6YcK-Q.js";const s={},r=e("h1",{id:"更新日志",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#更新日志","aria-hidden":"true"},"#"),o(" 更新日志")],-1),_=e("blockquote",null,[e("p",null,[o("这里记录了 "),e("code",null,"Gropify"),o(" 的版本更新历史。")])],-1),h=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"特别注意"),e("p",null,"我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。")],-1),u={id:"_1-0-1-2025-11-16",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-0-1-2025-11-16","aria-hidden":"true"},"#",-1),m=d("<ul><li>修复 <code>permanentKeyValues</code> 被错误地配置到 <code>replacementKeyValues</code> 的问题</li><li>优化属性键值的类型自动转换功能,修复负数长整型被转换为整型的问题</li><li>优化日志输出功能,加入每种日志的标签和文字颜色</li><li>新增 <code>keyValueRules</code> 可手动指定属性键值的类型,在启用了 <code>useTypeAutoConversion</code> 时生效</li><li>增强调试功能,加入了调试模式下的详细日志输出</li><li>修复 <code>extensionName</code> 在默认设置情况下被判断为空格式非法的问题</li><li>增加了可能造成冲突的默认扩展方法名称判断内容</li><li><code>android</code> 配置方法块新增 <code>manifestPlaceholders</code> 属性键值同步功能</li><li>修复源代码生成 Javapoet 和 Kotlinpoet 处理特殊转义字符的问题</li><li>修复其它可能导致构建脚本编译失败的问题</li></ul>",1),f={id:"_1-0-0-2025-11-11",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-0-0-2025-11-11","aria-hidden":"true"},"#",-1),v=e("ul",null,[e("li",null,"首个版本提交至 Maven")],-1);function g(y,V){const t=i("Badge");return c(),n("div",null,[r,_,h,e("h3",u,[p,o(" 1.0.1 | 2025.11.16 "),l(t,{type:"tip",text:"最新",vertical:"middle"})]),m,e("h3",f,[x,o(" 1.0.0 | 2025.11.11 "),l(t,{type:"warning",text:"过旧",vertical:"middle"})]),v])}const B=a(s,[["render",g],["__file","changelog.html.vue"]]);export{B as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-0e6c3476","path":"/zh-cn/about/changelog.html","title":"更新日志","lang":"zh-CN","frontmatter":{},"headers":[{"level":3,"title":"1.0.1 | 2025.11.16","slug":"_1-0-1-2025-11-16","link":"#_1-0-1-2025-11-16","children":[]},{"level":3,"title":"1.0.0 | 2025.11.11","slug":"_1-0-0-2025-11-11","link":"#_1-0-0-2025-11-11","children":[]}],"git":{"updatedTime":1763226900000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{e as data};

View File

@@ -0,0 +1 @@
const t=JSON.parse('{"key":"v-193cf592","path":"/en/about/contacts.html","title":"Contact Us","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Help with Maintenance","slug":"help-with-maintenance","link":"#help-with-maintenance","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/about/contacts.md"}');export{t as data};

View File

@@ -0,0 +1 @@
import{_ as r,r as a,o as l,c as s,a as e,b as t,d as o}from"./app-aH6YcK-Q.js";const c={},_=e("h1",{id:"联系我们",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#联系我们","aria-hidden":"true"},"#"),t(" 联系我们")],-1),i=e("blockquote",null,[e("p",null,"如在使用中有任何问题,或有任何建设性的建议,都可以联系我们。")],-1),h=e("p",null,"加入我们的开发者群组。",-1),d={href:"https://t.me/HighCapable_Dev",target:"_blank",rel:"noopener noreferrer"},u={href:"https://qm.qq.com/cgi-bin/qm/qr?k=Pnsc5RY6N2mBKFjOLPiYldbAbprAU3V7&jump_from=webapi&authKey=X5EsOVzLXt1dRunge8ryTxDRrh9/IiW1Pua75eDLh9RE3KXE+bwXIYF5cWri/9lf",target:"_blank",rel:"noopener noreferrer"},p=e("strong",null,"酷安",-1),f={href:"http://www.coolapk.com/u/876977",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"助力维护",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#助力维护","aria-hidden":"true"},"#"),t(" 助力维护")],-1),b=e("p",null,[t("感谢您选择并使用 "),e("code",null,"Gropify"),t(",如有代码相关的建议和请求,可在 GitHub 提交 Pull Request。")],-1);function k(x,g){const n=a("ExternalLinkIcon");return l(),s("div",null,[_,i,h,e("ul",null,[e("li",null,[e("a",d,[t("点击加入 Telegram 群组 (开发者)"),o(n)])]),e("li",null,[e("a",u,[t("点击加入 QQ 群 (开发者)"),o(n)])])]),e("p",null,[t("在 "),p,t(" 找到我 "),e("a",f,[t("@星夜不荟"),o(n)]),t("。")]),m,b])}const E=r(c,[["render",k],["__file","contacts.html.vue"]]);export{E as default};

View File

@@ -0,0 +1 @@
const t=JSON.parse('{"key":"v-6cf86266","path":"/zh-cn/about/contacts.html","title":"联系我们","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"助力维护","slug":"助力维护","link":"#助力维护","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/about/contacts.md"}');export{t as data};

View File

@@ -0,0 +1 @@
import{_ as a,r as s,o as r,c,a as e,b as n,d as o}from"./app-aH6YcK-Q.js";const l={},i=e("h1",{id:"contact-us",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),n(" Contact Us")],-1),u=e("blockquote",null,[e("p",null,"If you have any questions during usage, or have any constructive suggestions, you can contact us.")],-1),h=e("p",null,"Join our developers group.",-1),d={href:"https://t.me/HighCapable_Dev",target:"_blank",rel:"noopener noreferrer"},_=e("strong",null,"Twitter",-1),p={href:"https://twitter.com/fankesyooni",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"help-with-maintenance",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#help-with-maintenance","aria-hidden":"true"},"#"),n(" Help with Maintenance")],-1),g=e("p",null,[n("Thank you for choosing and using "),e("code",null,"Gropify"),n(".")],-1),m=e("p",null,"If you have code-related suggestions and requests, you can submit a Pull Request on GitHub.",-1);function k(v,y){const t=s("ExternalLinkIcon");return r(),c("div",null,[i,u,h,e("ul",null,[e("li",null,[e("a",d,[n("Click to join Telegram group (Developer)"),o(t)])])]),e("p",null,[n("Find me on "),_,n(),e("a",p,[n("@fankesyooni"),o(t)]),n(".")]),f,g,m])}const x=a(l,[["render",k],["__file","contacts.html.vue"]]);export{x as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-3106ca14","path":"/zh-cn/about/future.html","title":"展望未来","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"未来的计划","slug":"未来的计划","link":"#未来的计划","children":[{"level":3,"title":"支持更多项目类型","slug":"支持更多项目类型","link":"#支持更多项目类型","children":[]}]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/about/future.md"}');export{e as data};

View File

@@ -0,0 +1 @@
import{_ as e,o as t,c as o,e as r}from"./app-aH6YcK-Q.js";const a={},d=r('<h1 id="looking-toward-the-future" tabindex="-1"><a class="header-anchor" href="#looking-toward-the-future" aria-hidden="true">#</a> Looking Toward the Future</h1><blockquote><p>The future is bright and uncertain, let us look forward to the future development potential of <code>Gropify</code>.</p></blockquote><h2 id="future-plans" tabindex="-1"><a class="header-anchor" href="#future-plans" aria-hidden="true">#</a> Future Plans</h2><blockquote><p>Features that <code>Gropify</code> may add later are included here.</p></blockquote><h3 id="support-more-project-types" tabindex="-1"><a class="header-anchor" href="#support-more-project-types" aria-hidden="true">#</a> Support More Project Types</h3><p><code>Gropify</code> currently supports generating properties into the source code of Kotlin, Java, and Android projects. In the future, it may support more projects that can participate in Gradle builds, such as C/C++ (Android JNI), Swift, etc., to meet the needs of more developers.</p>',6),c=[d];function u(n,i){return t(),o("div",null,c)}const p=e(a,[["render",u],["__file","future.html.vue"]]);export{p as default};

View File

@@ -0,0 +1 @@
import{_ as e,o,c as a,e as r}from"./app-aH6YcK-Q.js";const t={},c=r('<h1 id="展望未来" tabindex="-1"><a class="header-anchor" href="#展望未来" aria-hidden="true">#</a> 展望未来</h1><blockquote><p>未来是美好的,也是不确定的,让我们共同期待 <code>Gropify</code> 在未来的发展空间。</p></blockquote><h2 id="未来的计划" tabindex="-1"><a class="header-anchor" href="#未来的计划" aria-hidden="true">#</a> 未来的计划</h2><blockquote><p>这里收录了 <code>Gropify</code> 可能会在后期添加的功能。</p></blockquote><h3 id="支持更多项目类型" tabindex="-1"><a class="header-anchor" href="#支持更多项目类型" aria-hidden="true">#</a> 支持更多项目类型</h3><p><code>Gropify</code> 目前支持将属性生成到 Kotlin、Java 和 Android 项目的源代码中,在未来可能会支持更多能够参与 Gradle 构建的项目,例如 C/C++ (Android JNI)、Swift 等,以满足更多开发者的需求。</p>',6),d=[c];function i(n,h){return o(),a("div",null,d)}const l=e(t,[["render",i],["__file","future.html.vue"]]);export{l as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-ae7b83f2","path":"/en/about/future.html","title":"Looking Toward the Future","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Future Plans","slug":"future-plans","link":"#future-plans","children":[{"level":3,"title":"Support More Project Types","slug":"support-more-project-types","link":"#support-more-project-types","children":[]}]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/about/future.md"}');export{e as data};

View File

@@ -0,0 +1,11 @@
import{_ as n,r,o as i,c as l,a as e,b as s,d as a,e as p}from"./app-aH6YcK-Q.js";const t={},c=e("h1",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction","aria-hidden":"true"},"#"),s(" Introduction")],-1),d=e("blockquote",null,[e("p",null,[e("code",null,"Gropify"),s(" is a type-safe and modern properties plugin for Gradle.")])],-1),u=e("h2",{id:"background",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),s(" Background")],-1),y=e("p",null,[s("This plugin is designed for Gradle build scripts. It aims to bring properties similar to those in the "),e("code",null,"gradle.properties"),s(" file into build scripts in a type-safe way, avoiding problems that hard-coded strings might cause.")],-1),h={href:"https://github.com/Lagrio",target:"_blank",rel:"noopener noreferrer"},m=e("strong",null,"G",-1),g=e("strong",null,"ropify",-1),b={href:"https://github.com/HighCapable/SweetProperty",target:"_blank",rel:"noopener noreferrer"},f=p(`<p>The configuration plan format of <code>Gropify</code> is similar to <code>SweetProperty</code>. If you are using <code>SweetProperty</code>, you can consider migrating to <code>Gropify</code>.</p><h2 id="usage" tabindex="-1"><a class="header-anchor" href="#usage" aria-hidden="true">#</a> Usage</h2><p><code>Gropify</code> is mainly designed for Kotlin DSL build scripts. Groovy can directly use properties from the <code>gradle.properties</code> file as variables, but you can still use <code>Gropify</code> to achieve type-safe property access.</p><p><code>Gropify</code> also supports generating properties (similar to those defined in a <code>gradle.properties</code> file) in a type-safe way into the source code of Kotlin, Java, and Android projects for use at application runtime—similar to Android&#39;s <code>BuildConfig</code>&#39;s <code>buildConfigField</code> feature.</p><p>Suppose we have the following <code>gradle.properties</code> file.</p><blockquote><p>The following example</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.app.name</span><span style="color:#ADBAC7;">=Gropify-Demo</span></span>
<span class="line"><span style="color:#F47067;">project.app.version</span><span style="color:#ADBAC7;">=1.0.0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>Here is an example of calling the code automatically generated by <code>Gropify</code>.</p><blockquote><p>Build Script (Kotlin DSL, Groovy DSL)</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.app.name</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.app.version</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-groovy line-numbers-mode" data-ext="groovy"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">def</span><span style="color:#F69D50;"> appName </span><span style="color:#F47067;">=</span><span style="color:#F69D50;"> gropify</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">project</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">app</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">name</span></span>
<span class="line"><span style="color:#F47067;">def</span><span style="color:#F69D50;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#F69D50;"> gropify</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">project</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">app</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">version</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>Source Code (Kotlin, Java)</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_NAME</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_VERSION</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-ext="java"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">appName</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_NAME;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">appVersion</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_VERSION;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><code>Gropify</code> also supports Kotlin Multiplatform projects, and you can use the generated property classes in the <code>commonMain</code> source set.</p><h2 id="language-requirement" tabindex="-1"><a class="header-anchor" href="#language-requirement" aria-hidden="true">#</a> Language Requirement</h2><p>It&#39;s recommended to use Kotlin DSL to configure your project&#39;s build scripts. Groovy is also supported, but in pure Groovy projects some configuration syntax may have compatibility issues.</p><p>In Groovy DSL, we will no longer be responsible for troubleshooting and fixing any issues that arise from using this plugin, and it may be completely unsupported in future versions.</p><h2 id="contribution" tabindex="-1"><a class="header-anchor" href="#contribution" aria-hidden="true">#</a> Contribution</h2><p>The maintenance of this project is inseparable from the support and contributions of all developers.</p><p>This project is currently in its early stages, and there may still be some problems or lack of functions you need.</p>`,21),v={href:"https://github.com/HighCapable/Gropify/issues",target:"_blank",rel:"noopener noreferrer"};function _(k,A){const o=r("ExternalLinkIcon");return i(),l("div",null,[c,d,u,y,e("p",null,[s("The project icon was designed by "),e("a",h,[s("MaiTungTM"),a(o)]),s(". The name comes from "),m,s("radleP"),g,s(", meaning a plugin for Gradle properties.")]),e("p",null,[s("It is a brand-new project rebuilt from "),e("a",b,[s("SweetProperty"),a(o)]),s(", borrowing previous design ideas and making it more polished and easier to use.")]),f,e("p",null,[s("If possible, feel free to submit a PR to contribute features you think are needed to this project or go to "),e("a",v,[s("GitHub Issues"),a(o)]),s(" to make suggestions to us.")])])}const D=n(t,[["render",_],["__file","home.html.vue"]]);export{D as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-6a609e09","path":"/zh-cn/guide/home.html","title":"介绍","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"背景","slug":"背景","link":"#背景","children":[]},{"level":2,"title":"用途","slug":"用途","link":"#用途","children":[]},{"level":2,"title":"语言要求","slug":"语言要求","link":"#语言要求","children":[]},{"level":2,"title":"功能贡献","slug":"功能贡献","link":"#功能贡献","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/guide/home.md"}');export{e as data};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-efb45d4c","path":"/en/guide/home.html","title":"Introduction","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Background","slug":"background","link":"#background","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Language Requirement","slug":"language-requirement","link":"#language-requirement","children":[]},{"level":2,"title":"Contribution","slug":"contribution","link":"#contribution","children":[]}],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/guide/home.md"}');export{e as data};

View File

@@ -0,0 +1,11 @@
import{_ as n,r as l,o as p,c as r,a as e,b as s,d as o,e as i}from"./app-aH6YcK-Q.js";const c={},t=e("h1",{id:"介绍",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#介绍","aria-hidden":"true"},"#"),s(" 介绍")],-1),d=e("blockquote",null,[e("p",null,[e("code",null,"Gropify"),s(" 是一个类型安全且现代化的 Gradle 属性插件。")])],-1),y=e("h2",{id:"背景",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#背景","aria-hidden":"true"},"#"),s(" 背景")],-1),u=e("p",null,[s("这是一个为 Gradle 构建脚本设计的插件,旨在将类似 "),e("code",null,"gradle.properties"),s(" 文件中的属性以类型安全的方式引入到构建脚本中,从而避免硬编码字符串可能带来的问题。")],-1),h={href:"https://github.com/Lagrio",target:"_blank",rel:"noopener noreferrer"},v=e("strong",null,"G",-1),m=e("strong",null,"ropify",-1),b={href:"https://github.com/HighCapable/SweetProperty",target:"_blank",rel:"noopener noreferrer"},_=i(`<p><code>Gropify</code> 的配置方案与 <code>SweetProperty</code> 类似,如果你正在使用 <code>SweetProperty</code>,你可以考虑将其迁移到 <code>Gropify</code>。</p><h2 id="用途" tabindex="-1"><a class="header-anchor" href="#用途" aria-hidden="true">#</a> 用途</h2><p><code>Gropify</code> 主要针对 Kotlin DSL 构建脚本设计Groovy 语言可以直接将 <code>gradle.properties</code> 文件中的属性作为变量使用,但是你也可以通过 <code>Gropify</code> 来实现类型安全的属性访问。</p><p><code>Gropify</code> 同时支持将类似 <code>gradle.properties</code> 文件中的属性以类型安全的方式生成到 Kotlin、Java、Android 项目的源码中以供应用程序运行时使用,功能类似 Android 的 <code>BuildConfig</code> 中的 <code>buildConfigField</code> 功能。</p><p>假设我们有以下 <code>gradle.properties</code> 文件。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.app.name</span><span style="color:#ADBAC7;">=Gropify-Demo</span></span>
<span class="line"><span style="color:#F47067;">project.app.version</span><span style="color:#ADBAC7;">=1.0.0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>这是 <code>Gropify</code> 自动生成的代码调用示例。</p><blockquote><p>构建脚本 (Kotlin DSL、Groovy DSL)</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.app.name</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.app.version</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-groovy line-numbers-mode" data-ext="groovy"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">def</span><span style="color:#F69D50;"> appName </span><span style="color:#F47067;">=</span><span style="color:#F69D50;"> gropify</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">project</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">app</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">name</span></span>
<span class="line"><span style="color:#F47067;">def</span><span style="color:#F69D50;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#F69D50;"> gropify</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">project</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">app</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">version</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>源代码 (Kotlin、Java)</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_NAME</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appVersion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_VERSION</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-ext="java"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">appName</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_NAME;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">appVersion</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MyAppProperties.PROJECT_APP_VERSION;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><code>Gropify</code> 同样支持 Kotlin Multiplatform 项目,你可以在 <code>commonMain</code> 源集中使用生成的属性类。</p><h2 id="语言要求" tabindex="-1"><a class="header-anchor" href="#语言要求" aria-hidden="true">#</a> 语言要求</h2><p>推荐使用 Kotlin DSL 来配置项目的构建脚本Groovy 语言同样受支持,但在纯 Groovy 项目中部分配置语法可能存在兼容性问题。</p><p>在 Groovy DSL 中使用此插件发生的任何问题,我们都将不再负责排查和修复,并且在后期版本可能会完全不再支持 Groovy DSL。</p><h2 id="功能贡献" tabindex="-1"><a class="header-anchor" href="#功能贡献" aria-hidden="true">#</a> 功能贡献</h2>`,19),g={href:"https://github.com/HighCapable/Gropify/issues",target:"_blank",rel:"noopener noreferrer"};function A(F,f){const a=l("ExternalLinkIcon");return p(),r("div",null,[t,d,y,u,e("p",null,[s("项目图标由 "),e("a",h,[s("MaiTungTM"),o(a)]),s(" 设计,名称取自 "),v,s("radleP"),m,s(",意为针对 Gradle 属性的插件。")]),e("p",null,[s("它是基于 "),e("a",b,[s("SweetProperty"),o(a)]),s(" 重构的全新项目,借鉴了以往的设计方案,使得其在原有基础上更加完善和易用。")]),_,e("p",null,[s("本项目的维护离不开各位开发者的支持和贡献,目前这个项目处于初期阶段,可能依然存在一些问题或者缺少你需要的功能, 如果可能,欢迎提交 PR 为此项目贡献你认为需要的功能或前往 "),e("a",g,[s("GitHub Issues"),o(a)]),s(" 向我们提出建议。")])])}const k=n(c,[["render",A],["__file","home.html.vue"]]);export{k as default};

View File

@@ -0,0 +1 @@
import{_ as e,o as c,c as t}from"./app-aH6YcK-Q.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-c0c85b84","path":"/zh-cn/","title":"首页","lang":"zh-CN","frontmatter":{"home":true,"title":"首页","heroImage":"/images/logo.svg","actions":[{"text":"快速上手","link":"/zh-cn/guide/home","type":"primary"},{"text":"更新日志","link":"/zh-cn/about/changelog","type":"secondary"}],"footer":"Apache-2.0 License | Copyright (C) 2019 HighCapable"},"headers":[],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/index.md"}');export{e as data};

View File

@@ -0,0 +1 @@
import{_ as e,o as c,c as t}from"./app-aH6YcK-Q.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-2d0a870d","path":"/en/","title":"Home","lang":"en-US","frontmatter":{"home":true,"title":"Home","heroImage":"/images/logo.svg","actions":[{"text":"Get Started","link":"/en/guide/home","type":"primary"},{"text":"Changelog","link":"/en/about/changelog","type":"secondary"}],"footer":"Apache-2.0 License | Copyright (C) 2019 HighCapable"},"headers":[],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/index.md"}');export{e as data};

View File

@@ -0,0 +1 @@
import{_ as e,o as c,c as t}from"./app-aH6YcK-Q.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default};

View File

@@ -0,0 +1 @@
const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"","lang":"en-US","frontmatter":{"home":true,"navbar":false,"sidebar":false,"title":null,"heroAlt":null,"heroText":null,"tagline":"Select a language","actions":[{"text":"English","link":"/en/","type":"secondary"},{"text":"简体中文","link":"/zh-cn/","type":"secondary"}],"footer":"Apache-2.0 License | Copyright (C) 2019 HighCapable"},"headers":[],"git":{"updatedTime":1762849016000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"index.md"}');export{e as data};

View File

@@ -0,0 +1 @@
const i=JSON.parse('{"key":"v-72889797","path":"/en/guide/quick-start.html","title":"Quick Start","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Deploy Plugin","slug":"deploy-plugin","link":"#deploy-plugin","children":[]},{"level":2,"title":"Feature Configuration","slug":"feature-configuration","link":"#feature-configuration","children":[{"level":3,"title":"Common Configuration","slug":"common-configuration","link":"#common-configuration","children":[]},{"level":3,"title":"Build Script Configuration","slug":"build-script-configuration","link":"#build-script-configuration","children":[]},{"level":3,"title":"Android Project Configuration","slug":"android-project-configuration","link":"#android-project-configuration","children":[]},{"level":3,"title":"JVM Project Configuration","slug":"jvm-project-configuration","link":"#jvm-project-configuration","children":[]},{"level":3,"title":"Kotlin Multiplatform Project Configuration","slug":"kotlin-multiplatform-project-configuration","link":"#kotlin-multiplatform-project-configuration","children":[]}]},{"level":2,"title":"Usage Examples","slug":"usage-examples","link":"#usage-examples","children":[]},{"level":2,"title":"Possible Issues","slug":"possible-issues","link":"#possible-issues","children":[]},{"level":2,"title":"Limitations","slug":"limitations","link":"#limitations","children":[]}],"git":{"updatedTime":1763223336000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/guide/quick-start.md"}');export{i as data};

View File

@@ -0,0 +1,493 @@
import{_ as s,o as n,c as a,e}from"./app-aH6YcK-Q.js";const l={},o=e(`<h1 id="quick-start" tabindex="-1"><a class="header-anchor" href="#quick-start" aria-hidden="true">#</a> Quick Start</h1><blockquote><p>Integrate <code>Gropify</code> into your project.</p></blockquote><h2 id="deploy-plugin" tabindex="-1"><a class="header-anchor" href="#deploy-plugin" aria-hidden="true">#</a> Deploy Plugin</h2><p><img src="https://img.shields.io/maven-central/v/com.highcapable.gropify/com.highcapable.gropify.gradle.plugin?logo=apachemaven&amp;logoColor=orange&amp;style=flat-square" alt="Maven Central"><span style="margin-left:5px;"></span><img src="https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fraw.githubusercontent.com%2FHighCapable%2Fmaven-repository%2Frefs%2Fheads%2Fmain%2Frepository%2Freleases%2Fcom%2Fhighcapable%2Fgropify%2Fcom.highcapable.gropify.gradle.plugin%2Fmaven-metadata.xml&amp;logo=apachemaven&amp;logoColor=orange&amp;label=highcapable-maven-releases&amp;style=flat-square" alt="Maven metadata URL"></p><p><code>Gropify</code> dependencies are published on <strong>Maven Central</strong> and our public repository. You can configure the repository as follows.</p><p>We recommend using Gradle version <code>7.x.x</code> or higher, and recommend using Kotlin DSL as the Gradle build script language. This documentation will no longer detail how to use it in Groovy DSL.</p><p>We recommend using the new <code>pluginManagement</code> method for deployment, which is a feature added since Gradle version <code>7.x.x</code>.</p><p>If your project is still using <code>buildscript</code> for management, we recommend migrating to the new method. Instructions for the old version will no longer be provided here.</p><p>First, configure the plugin repository in your project&#39;s <code>settings.gradle.kts</code>.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">pluginManagement</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">repositories</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">gradlePluginPortal</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// Optional</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">google</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// Optional</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">mavenCentral</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// Required</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// (Optional) You can add this URL to use our public repository</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// This repository is added as an alternative when Sonatype-OSS fails to publish dependencies</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// For details, please visit: https://github.com/HighCapable/maven-repository</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">maven</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;https://raw.githubusercontent.com/HighCapable/maven-repository/main/repository/releases&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Then add the <code>Gropify</code> plugin dependency in <code>plugin</code> in <code>settings.gradle.kts</code>. Please note <strong>do not</strong> add <code>apply false</code> after it.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">plugins</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">id</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;com.highcapable.gropify&quot;</span><span style="color:#ADBAC7;">) version </span><span style="color:#96D0FF;">&quot;&lt;version&gt;&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Please replace <code>&lt;version&gt;</code> with the version shown at the top of this section.</p><p>After completing the above configuration, run Gradle sync once.</p><p><code>Gropify</code> will automatically search for <code>gradle.properties</code> files in the root project and each subproject, read the property key-values in them, and generate corresponding code for each project.</p><div class="custom-container warning"><p class="custom-container-title">Notice</p><p><code>Gropify</code> can only be applied to <code>settings.gradle.kts</code>, configuring it once will take effect globally. Please do not apply it to <code>build.gradle.kts</code>, otherwise the functionality will be invalid.</p></div><h2 id="feature-configuration" tabindex="-1"><a class="header-anchor" href="#feature-configuration" aria-hidden="true">#</a> Feature Configuration</h2><p>You can configure <code>Gropify</code> to implement customization and personalized features.</p><p><code>Gropify</code> provides relatively rich customizable features. Below are the descriptions and configuration methods for these features.</p><p>Please add the <code>gropify</code> method block in your <code>settings.gradle.kts</code> to start configuring <code>Gropify</code>.</p><p>To use in Groovy DSL, please change all variable <code>=</code> to spaces, remove <code>is</code> before <code>Enabled</code>.</p><p>If you encounter a <code>Gradle DSL method not found</code> error, the solution is to migrate to Kotlin DSL.</p><p>If you don&#39;t want to use Kotlin DSL entirely, you can also migrate only <code>settings.gradle</code> to <code>settings.gradle.kts</code>.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">gropify</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enable Gropify, setting it to \`false\` will disable all features.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable debug mode.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can help us identify the problem by enabling this option</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// to print more debugging information in the logs.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: THIS IS ONLY FOR DEBUGGING!</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The debug log will contain your local environment,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// which may contain sensitive information.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Please be sure to protect this information.</span></span>
<span class="line"><span style="color:#ADBAC7;"> debugMode </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>Gropify</code>&#39;s configuration mode is divided into three types: <code>global</code> global configuration, and <code>rootProject</code>, <code>projects</code> root project and subproject configuration.</p><p>You can continue to configure and integrate the configuration of the parent project in the child code blocks.</p><p>All configurations below are performed in the <code>gropify</code> method block.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// Global configuration.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// You can modify configurations in all projects in the global configuration.</span></span>
<span class="line"><span style="color:#768390;">// Configurations not declared in each project will use the global configuration.</span></span>
<span class="line"><span style="color:#768390;">// The functions in each configuration method block are exactly the same.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// You can refer to the configuration methods of root project and subprojects below.</span></span>
<span class="line"><span style="color:#DCBDFB;">global</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Common configuration.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;common&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Build script configuration.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;buildscript&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Android project configuration.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;android&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// JVM project configuration.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;jvm&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Kotlin Multiplatform project configuration.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;kmp&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// Root project configuration.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// This is a special configuration method block that can only be used for the root project.</span></span>
<span class="line"><span style="color:#DCBDFB;">rootProject</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;common&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;buildscript&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;android&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;jvm&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;kmp&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// Other projects and subprojects configuration.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// Fill in the full name of the project you need to configure in the</span></span>
<span class="line"><span style="color:#768390;">// method parameters to configure the corresponding project.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// If the current project is a subproject, you must include the &quot;:&quot; before</span></span>
<span class="line"><span style="color:#768390;">// the subproject name, such as &quot;:app&quot;.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// If the current project is a nested subproject, such as app → sub,</span></span>
<span class="line"><span style="color:#768390;">// you need to use &quot;:&quot; to separate multiple subprojects, such as &quot;:app:sub&quot;.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// The name of the root project cannot be used directly to configure subprojects,</span></span>
<span class="line"><span style="color:#768390;">// please use &quot;rootProject&quot;.</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// You can configure multiple projects and subprojects at the same time by filling</span></span>
<span class="line"><span style="color:#768390;">// in an array of full project names in the method parameters to</span></span>
<span class="line"><span style="color:#768390;">// configure each corresponding project.</span></span>
<span class="line"><span style="color:#DCBDFB;">projects</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;:app&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;:modules:library1&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;:modules:library2&quot;</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;common&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;buildscript&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;android&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;jvm&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Configure &quot;kmp&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>You can continue below to learn how to configure the features in each method block.</p><h3 id="common-configuration" tabindex="-1"><a class="header-anchor" href="#common-configuration" aria-hidden="true">#</a> Common Configuration</h3><p>Here you can configure related features for all configuration types at the same time. The configurations here will be applied down to <a href="#build-script-configuration">Build Script Configuration</a>, <a href="#android-project-configuration">Android Project Configuration</a>, <a href="#jvm-project-configuration">JVM Project Configuration</a>, <a href="#kotlin-multiplatform-project-configuration">Kotlin Multiplatform Project Configuration</a>.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enable feature.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can set [buildscript], [android], [jvm], [kmp] separately.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to exclude the non-string type key-values content.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled, key-values and content that are not</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// string types will be excluded from properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> excludeNonStringValue </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to use type auto conversion.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled, the type in the properties&#39; key-values will be</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// automatically identified and converted to the corresponding type.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// After enabling, if you want to force the content of a key-values to be a string type,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// you can use single quotes or double quotes to wrap the entire string.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: After disabled this function, the functions mentioned above will also be invalid.</span></span>
<span class="line"><span style="color:#ADBAC7;"> useTypeAutoConversion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to use key-values content interpolation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, after enabling it will automatically identify</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// the \`\${...}\` content in the properties&#39; key-values content and replace it.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Note: The interpolated content will only be looked up from the</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// current (current configuration file) properties&#39; key-values list.</span></span>
<span class="line"><span style="color:#ADBAC7;"> useValueInterpolation </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set exists property files.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The property files will be automatically obtained from the root directory</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// of the current root project,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// subproject and user directory according to the file name you set.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// By default, will add &quot;gradle.properties&quot; if [addDefault] is \`true\`.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can add multiple sets of property files name, they will be read in order.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: Generally there is no need to modify this setting,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// an incorrect file name will result in obtaining empty key-values content.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">existsPropertyFiles</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some-other-1.properties&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some-other-2.properties&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> addDefault </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set a permanent list of properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Here you can set some key-values that must exist, these key-values will be</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// generated regardless of whether they can be obtained from the properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// These keys use the content of the properties&#39; key if it exists,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// use the content set here if it does not exist.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: Special symbols and spaces cannot exist in properties&#39; key names,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// otherwise the generation may fail.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">permanentKeyValues</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;permanent.some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;some_value_1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;permanent.some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;some_value_2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set a replacement list of properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Here you can set some key-values that need to be replaced, these key-values</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// will be replaced the existing properties&#39; key-values, if not exist, they will be ignored.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The key-values set here will also overwrite the key-values set in [permanentKeyValues].</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replacementKeyValues</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;new.value1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;new.value2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set a key list of properties&#39; key-values name that need to be excluded.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Here you can set some key names that you want to exclude from</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// known properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// These keys are excluded if they are present in the properties&#39; key,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// will not appear in the generated code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: If you exclude key-values set in [permanentKeyValues], then they will</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// only change to the initial key-values content you set and continue to exist.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">excludeKeys</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;exclude.some.key1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;exclude.some.key2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set a key list of properties&#39; key-values name that need to be included.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Here you can set some key value names that you want to include from</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// known properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// These keys are included if the properties&#39; key exists,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// unincluded keys will not appear in the generated code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">includeKeys</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;include.some.key1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;include.some.key2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set properties&#39; key-values rules.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can set up a set of key-values rules,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// use [ValueRule] to create new rule for parsing the obtained key-values content.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// These key-values rules are applied when properties&#39; keys exist.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">keyValuesRules</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;"> { </span><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (it.</span><span style="color:#DCBDFB;">contains</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;_&quot;</span><span style="color:#ADBAC7;">)) it.</span><span style="color:#DCBDFB;">replace</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;_&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;-&quot;</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">else</span><span style="color:#ADBAC7;"> it },</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;"> { </span><span style="color:#96D0FF;">&quot;</span><span style="color:#6CB6FF;">$it</span><span style="color:#96D0FF;">-value&quot;</span><span style="color:#ADBAC7;"> },</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can also specify the expected type class,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// the type you specify will be used during generation,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// and an exception will be thrown if the type cannot be converted correctly.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// If the [useTypeAutoConversion] is not enabled, this parameter will be ignored.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key3&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;">(Int::</span><span style="color:#DCBDFB;">class</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Set where to find properties&#39; key-values.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Defaults are [GropifyLocation.CurrentProject], [GropifyLocation.RootProject].</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can set this up using the following types.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.CurrentProject]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.RootProject]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.Global]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.System]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.SystemEnv]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// We will generate properties&#39; key-values in sequence from the locations you set,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// the order of the generation locations follows the order you set.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Risk warning: [GropifyLocation.Global], [GropifyLocation.System],</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// [GropifyLocation.SystemEnv] may have keys and certificates,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// please manage the generated code carefully.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">locations</span><span style="color:#ADBAC7;">(GropifyLocation.CurrentProject, GropifyLocation.RootProject)</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container tip"><p class="custom-container-title">Tips</p><p>When referencing <code>GropifyLocation</code>, the build script may generate the following at the top of the build script when used with IDE auto-import.</p><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">import</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.highcapable.gropify.plugin.config.type.GropifyLocation</span></span>
<span class="line"></span></code></pre></div><p><code>Gropify</code> does alias processing for this, you can directly delete this import statement.</p></div><h3 id="build-script-configuration" tabindex="-1"><a class="header-anchor" href="#build-script-configuration" aria-hidden="true">#</a> Build Script Configuration</h3><p>The code generated in the build script can be directly used by the current <code>build.gradle.kts</code>, <code>build.gradle</code>.</p><p>The configuration here includes the configuration in <code>common</code>, and you can override it.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom buildscript extension name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;gropify&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> extensionName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;gropify&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>Gradle also has a <code>buildscript</code> method block, please be careful to use the correct DSL level.</p></div><h3 id="android-project-configuration" tabindex="-1"><a class="header-anchor" href="#android-project-configuration" aria-hidden="true">#</a> Android Project Configuration</h3><p>The content in this configuration block only takes effect for projects with AGP.</p><p>The configuration here includes the configuration in <code>common</code>, and you can override it.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated directory path.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can fill in the path relative to the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Format example: &quot;path/to/your/src/main&quot;, the &quot;src/main&quot; is a fixed suffix.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;build/generated/gropify/src/main&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// We recommend that you set the generated path under the &quot;build&quot; directory,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// which is ignored by version control systems by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom deployment \`sourceSet\` name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// If your project source code deployment name is not default, you can customize it here.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;main&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;main&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated package name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Android projects use the \`namespace\` in the \`android\` configuration method block</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;generated&quot; is a fixed suffix that avoids conflicts with your own namespaces,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// if you don&#39;t want this suffix, you can refer to [isIsolationEnabled].</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated class name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is use the name of the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;Properties&quot; is a fixed suffix to distinguish it from your own class names.</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to use Kotlin language generation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled will generate Kotlin code,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// disabled will generate Java code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: This option will be disabled when this project is a pure Java project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> useKotlin </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable restricted access.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Disabled by default, when enabled will add the \`internal\` modifier to</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// generated Kotlin classes or remove the \`public\` modifier to generated Java classes.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable code isolation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled will generate code in an</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// isolated package suffix &quot;generated&quot; to avoid conflicts with other projects that</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// also use or not only Gropify to generate code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: If you disable this option, please make sure that there are no other projects</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// that also use or not only Gropify to generate code to avoid conflicts.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to use manifest placeholders&#39; generation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// </span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Disabled by default, when enabled will synchronize the properties&#39; key-values</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// to the \`manifestPlaceholders\` in the \`android\` configuration method block.</span></span>
<span class="line"><span style="color:#ADBAC7;"> manifestPlaceholders </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="jvm-project-configuration" tabindex="-1"><a class="header-anchor" href="#jvm-project-configuration" aria-hidden="true">#</a> JVM Project Configuration</h3><p>The content in this configuration block only takes effect for pure JVM projects (including Kotlin and Java projects). For Android projects, please refer to <a href="#android-project-configuration">Android Project Configuration</a> for configuration.</p><p>The configuration here includes the configuration in <code>common</code>, and you can override it.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated directory path.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can fill in the path relative to the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Format example: &quot;path/to/your/src/main&quot;, the &quot;src/main&quot; is a fixed suffix.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;build/generated/gropify/src/main&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// We recommend that you set the generated path under the &quot;build&quot; directory,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// which is ignored by version control systems by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom deployment \`sourceSet\` name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// If your project source code deployment name is not default, you can customize it here.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;main&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;main&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated package name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Java, Kotlin projects use the \`project.group\` of the project settings by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;generated&quot; is a fixed suffix that avoids conflicts with your own namespaces,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// if you don&#39;t want this suffix, you can refer to [isIsolationEnabled].</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated class name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is use the name of the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;Properties&quot; is a fixed suffix to distinguish it from your own class names.</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to use Kotlin language generation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled will generate Kotlin code,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// disabled will generate Java code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: This option will be disabled when this project is a pure Java project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> useKotlin </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable restricted access.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Disabled by default, when enabled will add the \`internal\` modifier to</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// generated Kotlin classes or remove the \`public\` modifier to generated Java classes.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable code isolation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled will generate code in an</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// isolated package suffix &quot;generated&quot; to avoid conflicts with other projects that</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// also use or not only Gropify to generate code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: If you disable this option, please make sure that there are no other projects</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// that also use or not only Gropify to generate code to avoid conflicts.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="kotlin-multiplatform-project-configuration" tabindex="-1"><a class="header-anchor" href="#kotlin-multiplatform-project-configuration" aria-hidden="true">#</a> Kotlin Multiplatform Project Configuration</h3><p>The content in this configuration block only takes effect for projects with the Kotlin Multiplatform plugin.</p><p>The configuration here includes the configuration in <code>common</code>, and you can override it.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated directory path.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// You can fill in the path relative to the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Format example: &quot;path/to/your/src/main&quot;, the &quot;src/main&quot; is a fixed suffix.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;build/generated/gropify/src/main&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// We recommend that you set the generated path under the &quot;build&quot; directory,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// which is ignored by version control systems by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom deployment \`sourceSet\` name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// If your project source code deployment name is not default, you can customize it here.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is &quot;commonMain&quot;.</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;commonMain&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated package name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Kotlin Multiplatform projects use the \`project.group\` of the project settings</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// In a Kotlin Multiplatform project, if the AGP plugin is also applied,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// the \`namespace\` will still be used as the package name by default.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;generated&quot; is a fixed suffix that avoids conflicts with your own namespaces,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// if you don&#39;t want this suffix, you can refer to [isIsolationEnabled].</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Custom generated class name.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Default is use the name of the current project.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// The &quot;Properties&quot; is a fixed suffix to distinguish it from your own class names.</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable restricted access.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Disabled by default, when enabled will add the \`internal\` modifier to</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// generated Kotlin classes.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Whether to enable code isolation.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Enabled by default, when enabled will generate code in an</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// isolated package suffix &quot;generated&quot; to avoid conflicts with other projects that</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// also use or not only Gropify to generate code.</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - Note: If you disable this option, please make sure that there are no other projects</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// that also use or not only Gropify to generate code to avoid conflicts.</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="usage-examples" tabindex="-1"><a class="header-anchor" href="#usage-examples" aria-hidden="true">#</a> Usage Examples</h2><p>Below is a project&#39;s <code>gradle.properties</code> configuration file.</p><blockquote><p>The following example</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.groupName</span><span style="color:#ADBAC7;">=com.highcapable.gropifydemo</span></span>
<span class="line"><span style="color:#F47067;">project.description</span><span style="color:#ADBAC7;">=Hello Gropify Demo!</span></span>
<span class="line"><span style="color:#F47067;">project.version</span><span style="color:#ADBAC7;">=1.0.0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>In the build script <code>build.gradle.kts</code>, we can directly use these key-values as shown below.</p><p>Here is an example of the Maven publish configuration section.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">publications</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">create</span><span style="color:#ADBAC7;">&lt;</span><span style="color:#F69D50;">MavenPublication</span><span style="color:#ADBAC7;">&gt;(</span><span style="color:#96D0FF;">&quot;maven&quot;</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> groupId </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.groupName</span></span>
<span class="line"><span style="color:#ADBAC7;"> version </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.version</span></span>
<span class="line"><span style="color:#ADBAC7;"> pom.description.</span><span style="color:#DCBDFB;">set</span><span style="color:#ADBAC7;">(gropify.project.description)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">from</span><span style="color:#ADBAC7;">(components[</span><span style="color:#96D0FF;">&quot;java&quot;</span><span style="color:#ADBAC7;">])</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Similarly, you can also call the generated key-values in the current project.</p><blockquote><p>Kotlin</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> groupName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_GROUP_NAME</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> description </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_DESCRIPTION</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> version </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_VERSION</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>Java</p></blockquote><div class="language-java line-numbers-mode" data-ext="java"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">groupName</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_GROUP_NAME;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">description</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_DESCRIPTION;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">version</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_VERSION;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Let&#39;s take another example with an Android project.</p><p>In Android projects, many repetitive and fixed properties usually need to be configured, such as <code>targetSdk</code>.</p><blockquote><p>The following example</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.namespace</span><span style="color:#ADBAC7;">=com.highcapable.gropifydemo</span></span>
<span class="line"><span style="color:#F47067;">project.appName</span><span style="color:#ADBAC7;">=Gropify Demo</span></span>
<span class="line"><span style="color:#F47067;">project.compileSdk</span><span style="color:#ADBAC7;">=36</span></span>
<span class="line"><span style="color:#F47067;">project.targetSdk</span><span style="color:#ADBAC7;">=36</span></span>
<span class="line"><span style="color:#F47067;">project.minSdk</span><span style="color:#ADBAC7;">=26</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>When you set <code>useTypeAutoConversion = true</code>, <code>Gropify</code> will try to convert it to the corresponding type during the entity class generation process under the default configuration.</p><p>For example, the key-values used below can be identified as string and integer types, which can be directly used by the project configuration.</p><blockquote><p>The following example</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> namespace </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.namespace</span></span>
<span class="line"><span style="color:#ADBAC7;"> compileSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.compileSdk</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">defaultConfig</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> minSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.minSdk</span></span>
<span class="line"><span style="color:#ADBAC7;"> targetSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.targetSdk</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>When you set <code>manifestPlaceholders = true</code>, Gropify will automatically synchronize these properties&#39; key-values to <code>manifestPlaceholders</code> in the android configuration method block.</p><p>You can then use these placeholders directly in <code>AndroidManifest.xml</code>.</p><blockquote><p>The following example</p></blockquote><div class="language-xml line-numbers-mode" data-ext="xml"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">&lt;</span><span style="color:#8DDB8C;">manifest</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">xmlns:android</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;http://schemas.android.com/apk/res/android&quot;</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> &lt;</span><span style="color:#8DDB8C;">application</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">android:label</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;\${project.appName}&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">android:icon</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;@mipmap/ic_launcher&quot;</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> &lt;/</span><span style="color:#8DDB8C;">application</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="color:#ADBAC7;">&lt;/</span><span style="color:#8DDB8C;">manifest</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>You no longer need to use <code>buildConfigField</code> to add code to <code>BuildConfig</code>. With the property key-value code generated by <code>Gropify</code>, you can manage your project more flexibly.</p><p>You can also use interpolation <code>\${...}</code> in property key-values to reference each other&#39;s content, but recursive references are not allowed.</p><p>When you set <code>useValueInterpolation = true</code>, <code>Gropify</code> will automatically merge these referenced contents to the corresponding positions.</p><blockquote><p>The following example</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.name</span><span style="color:#ADBAC7;">=MyDemo</span></span>
<span class="line"><span style="color:#F47067;">project.developer.name</span><span style="color:#ADBAC7;">=myname</span></span>
<span class="line"><span style="color:#F47067;">project.url</span><span style="color:#ADBAC7;">=https://github.com/\${project.developer.name}/\${project.name}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>If you add <code>GropifyLocation.SystemEnv</code> to <code>locations</code>, you can also directly reference system environment variables.</p><blockquote><p>The following example</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;"># Use the $USER environment variable in Linux or macOS systems to get the current username.</span></span>
<span class="line"><span style="color:#F47067;">project.developer.name</span><span style="color:#ADBAC7;">=\${USER}</span></span>
<span class="line"><span style="color:#768390;"># Assume you have a system environment variable called SECRET_KEY (PLEASE BE SURE TO BE SAFE).</span></span>
<span class="line"><span style="color:#F47067;">project.secretKey</span><span style="color:#ADBAC7;">=\${SECRET_KEY}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>This feature is provided by <code>Gropify</code>. Native <code>gradle.properties</code> does not support this feature.</p><p>The interpolated content is searched and replaced from top to bottom through the <code>locations</code> hierarchy. If there are duplicate key names, the last found content will be used for replacement.</p></div><h2 id="possible-issues" tabindex="-1"><a class="header-anchor" href="#possible-issues" aria-hidden="true">#</a> Possible Issues</h2><p>If your project only has a root project and no subprojects are imported, and the extension method cannot be generated normally at this time, you can migrate your root project to a subproject and import this subproject in <code>settings.gradle.kts</code>, which can solve this problem.</p><p>We generally recommend categorizing the functions of the project, with the root project only used to manage plugins and some configurations.</p><h2 id="limitations" tabindex="-1"><a class="header-anchor" href="#limitations" aria-hidden="true">#</a> Limitations</h2><p><code>Gropify</code> cannot generate extension methods in <code>settings.gradle.kts</code> because it is upstream of <code>Gropify</code>.</p>`,98),p=[o];function i(c,t){return n(),a("div",null,p)}const d=s(l,[["render",i],["__file","quick-start.html.vue"]]);export{d as default};

View File

@@ -0,0 +1,461 @@
import{_ as s,o as n,c as a,e as l}from"./app-aH6YcK-Q.js";const e={},p=l(`<h1 id="快速开始" tabindex="-1"><a class="header-anchor" href="#快速开始" aria-hidden="true">#</a> 快速开始</h1><blockquote><p>集成 <code>Gropify</code> 到你的项目中。</p></blockquote><h2 id="部署插件" tabindex="-1"><a class="header-anchor" href="#部署插件" aria-hidden="true">#</a> 部署插件</h2><p><img src="https://img.shields.io/maven-central/v/com.highcapable.gropify/com.highcapable.gropify.gradle.plugin?logo=apachemaven&amp;logoColor=orange&amp;style=flat-square" alt="Maven Central"><span style="margin-left:5px;"></span><img src="https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fraw.githubusercontent.com%2FHighCapable%2Fmaven-repository%2Frefs%2Fheads%2Fmain%2Frepository%2Freleases%2Fcom%2Fhighcapable%2Fgropify%2Fcom.highcapable.gropify.gradle.plugin%2Fmaven-metadata.xml&amp;logo=apachemaven&amp;logoColor=orange&amp;label=highcapable-maven-releases&amp;style=flat-square" alt="Maven metadata URL"></p><p><code>Gropify</code> 的依赖发布在 <strong>Maven Central</strong> 和我们的公共存储库中,你可以使用如下方式配置存储库。</p><p>我们建议使用不低于 <code>7.x.x</code> 版本的 Gradle并推荐使用 Kotlin DSL 作为 Gradle 构建脚本语言,文档中将不再详细介绍在 Groovy DSL 中的使用方法。</p><p>我们推荐使用 <code>pluginManagement</code> 新方式进行部署,它是自 Gradle <code>7.x.x</code> 版本开始添加的功能。</p><p>如果你的项目依然在使用 <code>buildscript</code> 的方式进行管理,推荐迁移到新方式,这里将不再提供旧版本的使用方式说明。</p><p>首先,在你的项目 <code>settings.gradle.kts</code> 中配置插件的存储库。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">pluginManagement</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">repositories</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">gradlePluginPortal</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// 可选</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">google</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// 可选</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">mavenCentral</span><span style="color:#ADBAC7;">() </span><span style="color:#768390;">// 必须</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// (可选) 你可以添加此 URL 以使用我们的公共存储库</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 当 Sonatype-OSS 发生故障无法发布依赖时,此存储库作为备选进行添加</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 详情请前往https://github.com/HighCapable/maven-repository</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">maven</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;https://raw.githubusercontent.com/HighCapable/maven-repository/main/repository/releases&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>然后在 <code>settings.gradle.kts</code> 中 <code>plugin</code> 添加 <code>Gropify</code> 插件依赖,请注意<strong>不要</strong>在后方加入 <code>apply false</code>。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">plugins</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">id</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;com.highcapable.gropify&quot;</span><span style="color:#ADBAC7;">) version </span><span style="color:#96D0FF;">&quot;&lt;version&gt;&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>请将 <code>&lt;version&gt;</code> 修改为此小结顶部显示的版本。</p><p>上述配置完成后,运行一次 Gradle Sync。</p><p><code>Gropify</code> 将会自动搜索根项目和每个子项目中的 <code>gradle.properties</code> 文件,并读取其中的属性键值,为每个项目生成对应的代码。</p><div class="custom-container warning"><p class="custom-container-title">注意</p><p><code>Gropify</code> 只能被应用到 <code>settings.gradle.kts</code> 中,配置一次即可全局生效,请勿将其应用到 <code>build.gradle.kts</code> 中,否则功能将会无效。</p></div><h2 id="功能配置" tabindex="-1"><a class="header-anchor" href="#功能配置" aria-hidden="true">#</a> 功能配置</h2><p>你可以对 <code>Gropify</code> 进行配置来实现自定义和个性化功能。</p><p><code>Gropify</code> 为你提供了相对丰富的可自定义功能,下面是这些功能的说明与配置方法。</p><p>请在你的 <code>settings.gradle.kts</code> 中添加 <code>gropify</code> 方法块以开始配置 <code>Gropify</code>。</p><p>如需在 Groovy DSL 中使用,请将所有变量的 <code>=</code> 改为空格,并删除 <code>Enabled</code> 前方的 <code>is</code> 即可。</p><p>如果你遇到了 <code>Gradle DSL method not found</code> 错误,解决方案为迁移到 Kotlin DSL。</p><p>如果你不想全部使用 Kotlin DSL你也可以仅将 <code>settings.gradle</code> 迁移到 <code>settings.gradle.kts</code>。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">gropify</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 启用 Gropify设置为 \`false\` 将禁用所有功能</span></span>
<span class="line"><span style="color:#ADBAC7;"> isEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用调试模式</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以通过启用此选项在日志中打印更多调试信息帮助我们定位问题</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 此功能仅用于调试!</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调试日志将包含你的本地环境,其中可能包含敏感信息,请务必保护好这些信息</span></span>
<span class="line"><span style="color:#ADBAC7;"> debugMode </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>Gropify</code> 的配置模式分为 <code>global</code> 全局配置和 <code>rootProject</code>、<code>projects</code> 根项目和子项目配置三种。</p><p>你可以在子项的代码块中继续配置和集成顶层项目的配置。</p><p>以下配置均在 <code>gropify</code> 方法块中进行。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 全局配置</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 你可以在全局配置中修改所有项目中的配置</span></span>
<span class="line"><span style="color:#768390;">// 每个项目中未进行声明的配置将使用全局配置</span></span>
<span class="line"><span style="color:#768390;">// 每个配置方法块中的功能完全一致</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 你可以参考下方根项目、子项目的配置方法</span></span>
<span class="line"><span style="color:#DCBDFB;">global</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 通用配置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;common&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 构建脚本配置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;buildscript&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Android 项目配置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;android&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// JVM 项目配置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;jvm&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Kotlin 多平台项目配置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;kmp&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// 根项目 (Root Project) 配置</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 这是一个特殊的配置方法块,只能用于根项目</span></span>
<span class="line"><span style="color:#DCBDFB;">rootProject</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;common&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;buildscript&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;android&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;jvm&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;kmp&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// 其它项目与子项目配置</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 在方法参数中填入需要配置的项目完整名称来配置对应的项目</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 如果当前项目是子项目,你必须填写子项目前面的 &quot;:&quot;,例如 &quot;:app&quot;</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 如果当前项目为嵌套型子项目,例如 app → sub</span></span>
<span class="line"><span style="color:#768390;">// 此时你需要使用 &quot;:&quot; 来分隔多个子项目,例如 &quot;:app:sub&quot;</span></span>
<span class="line"><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#768390;">// 根项目的名称不能直接用来配置子项目,请使用 &quot;rootProject&quot;</span></span>
<span class="line"><span style="color:#768390;">// 你可以同时进行多个项目与子项目配置,在方法参数中填入需要配置的项目完整名称数组来配置每个对应的项目</span></span>
<span class="line"><span style="color:#DCBDFB;">projects</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;:app&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;:modules:library1&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;:modules:library2&quot;</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;common&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;buildscript&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;android&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;jvm&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 配置 &quot;kmp&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>你可以继续在下方了解如何配置每个方法块中的功能。</p><h3 id="通用配置" tabindex="-1"><a class="header-anchor" href="#通用配置" aria-hidden="true">#</a> 通用配置</h3><p>在这里你可以同时配置所有配置类型的相关功能,这里的配置会向下应用到 <a href="#%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC%E9%85%8D%E7%BD%AE">构建脚本配置</a>、<a href="#android-%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE">Android 项目配置</a>、<a href="#jvm-%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE">JVM 项目配置</a>、<a href="#kotlin-%E5%A4%9A%E5%B9%B3%E5%8F%B0%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE">Kotlin 多平台项目配置</a> 中。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">common</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 启用功能</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以分别对 [buildscript]、[android]、[jvm]、[kmp] 进行设置</span></span>
<span class="line"><span style="color:#ADBAC7;"> isEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否排除非字符串类型的键值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将排除非字符串类型的键值和内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> excludeNonStringValue </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否使用类型自动转换</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将自动识别属性键值中的类型并转换为对应类型</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 启用后,如果你想强制将键值内容设为字符串类型,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 可以使用单引号或双引号包裹整个字符串</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 禁用此功能后,上述功能也将失效</span></span>
<span class="line"><span style="color:#ADBAC7;"> useTypeAutoConversion </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否使用键值内容插值</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将自动识别属性键值内容中的 \`\${...}\` 并进行替换</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 注意: 插值内容仅会从当前 (当前配置文件) 属性键值列表中查找</span></span>
<span class="line"><span style="color:#ADBAC7;"> useValueInterpolation </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置已存在的属性文件</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 属性文件将根据你设置的文件名自动从当前根项目、</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 子项目和用户目录的根目录获取</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认情况下,如果 [addDefault] 为 \`true\`,将添加 &quot;gradle.properties&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以添加多组属性文件名,它们将按顺序读取</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 通常无需修改此设置,错误的文件名将导致获取空键值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">existsPropertyFiles</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some-other-1.properties&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some-other-2.properties&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> addDefault </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置永久属性键值列表</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里你可以设置一些必须存在的键值,无论是否能从属性键值中获取,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这些键值都将被生成</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这些键如果存在于属性键中则使用属性键的内容,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果不存在则使用这里设置的内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 属性键名称中不能存在特殊符号和空格,否则可能导致生成失败</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">permanentKeyValues</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;permanent.some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;some_value_1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;permanent.some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;some_value_2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置替换属性键值列表</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里你可以设置一些需要替换的键值,这些键值</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 将替换现有的属性键值,如果不存在则忽略</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这里设置的键值也会覆盖 [permanentKeyValues] 中设置的键值</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replacementKeyValues</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;new.value1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#96D0FF;">&quot;new.value2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置需要排除的属性键值名称列表</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里你可以设置一些要从已知属性键值中排除的键名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果这些键存在于属性键中则排除它们,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 不会出现在生成的代码中</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 如果你排除了 [permanentKeyValues] 中设置的键值,那么它们将</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 仅更改为你设置的初始键值内容并继续存在</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">excludeKeys</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;exclude.some.key1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;exclude.some.key2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置需要包含的属性键值名称列表</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里你可以设置一些要从已知属性键值中包含的键名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果属性键存在则包含这些键,未包含的键不会出现在生成的代码中</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">includeKeys</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;include.some.key1&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;include.some.key2&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置属性键值规则</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以设置一组键值规则,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 使用 [ValueRule] 创建新规则来解析获取的键值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 当属性键存在时应用这些键值规则</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">keyValuesRules</span><span style="color:#ADBAC7;">(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key1&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;"> { </span><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (it.</span><span style="color:#DCBDFB;">contains</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;_&quot;</span><span style="color:#ADBAC7;">)) it.</span><span style="color:#DCBDFB;">replace</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;_&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;-&quot;</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">else</span><span style="color:#ADBAC7;"> it },</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key2&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;"> { </span><span style="color:#96D0FF;">&quot;</span><span style="color:#6CB6FF;">$it</span><span style="color:#96D0FF;">-value&quot;</span><span style="color:#ADBAC7;"> },</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你还可以指定期望的类型类,生成时将使用你指定的类型,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果类型无法正确转换,将抛出异常</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果未启用 [useTypeAutoConversion],此参数将被忽略</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;some.key3&quot;</span><span style="color:#ADBAC7;"> to </span><span style="color:#DCBDFB;">ValueRule</span><span style="color:#ADBAC7;">(Int::</span><span style="color:#DCBDFB;">class</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置查找属性键值的位置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 [GropifyLocation.CurrentProject]、[GropifyLocation.RootProject]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以使用以下类型进行设置</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.CurrentProject]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.RootProject]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.Global]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.System]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - [GropifyLocation.SystemEnv]</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 我们将按顺序从你设置的位置生成属性键值,生成位置的顺序遵循你设置的顺序</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 风险警告: [GropifyLocation.Global]、[GropifyLocation.System]、</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// [GropifyLocation.SystemEnv] 可能包含密钥和证书,请谨慎管理生成的代码</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">locations</span><span style="color:#ADBAC7;">(GropifyLocation.CurrentProject, GropifyLocation.RootProject)</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>在引用 <code>GropifyLocation</code> 时,构建脚本在配合 IDE 自动导入时可能会在构建脚本顶部生成以下内容。</p><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">import</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.highcapable.gropify.plugin.config.type.GropifyLocation</span></span>
<span class="line"></span></code></pre></div><p><code>Gropify</code> 对此做了 alias 处理,你可以直接删除此 import 语句。</p></div><h3 id="构建脚本配置" tabindex="-1"><a class="header-anchor" href="#构建脚本配置" aria-hidden="true">#</a> 构建脚本配置</h3><p>在构建脚本中生成的代码可直接被当前 <code>build.gradle.kts</code>、<code>build.gradle</code> 使用。</p><p>这里的配置包括 <code>common</code> 中的配置,你可以对其进行复写。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">buildscript</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义构建脚本扩展名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;gropify&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> extensionName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;gropify&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container warning"><p class="custom-container-title">注意</p><p>Gradle 中也有一个 <code>buildscript</code> 方法块,请注意使用正确的 DSL 层级。</p></div><h3 id="android-项目配置" tabindex="-1"><a class="header-anchor" href="#android-项目配置" aria-hidden="true">#</a> Android 项目配置</h3><p>此配置块中的内容仅对存在 AGP 的项目生效。</p><p>这里的配置包括 <code>common</code> 中的配置,你可以对其进行复写。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的目录路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以填写相对于当前项目的路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 格式示例: &quot;path/to/your/src/main&quot;&quot;src/main&quot; 是固定后缀</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;build/generated/gropify/src/main&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 我们建议你将生成路径设置在 &quot;build&quot; 目录下,该目录默认被版本控制系统忽略</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义部署 \`sourceSet\` 名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你的项目源代码部署名称不是默认的,可以在此处自定义</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;main&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;main&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Android 项目默认使用 \`android\` 配置方法块中的 \`namespace\`</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;generated&quot; 是固定后缀,用于避免与你自己的命名空间冲突,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你不想要此后缀,可以参考 [isIsolationEnabled]</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的类名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认使用当前项目的名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;Properties&quot; 是固定后缀,用于与你自己的类名区分</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否使用 Kotlin 语言生成</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将生成 Kotlin 代码,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 禁用后将生成 Java 代码</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 当此项目为纯 Java 项目时,此选项将被禁用</span></span>
<span class="line"><span style="color:#ADBAC7;"> useKotlin </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用受限访问</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认禁用,启用后将为生成的 Kotlin 类添加 \`internal\` 修饰符,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 或为生成的 Java 类移除 \`public\` 修饰符</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用代码隔离</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将在隔离的包后缀 &quot;generated&quot; 中生成代码,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 以避免与其他同样使用或不仅使用 Gropify 生成代码的项目冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 如果你禁用此选项,请确保没有其他同样使用或不仅使用</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Gropify 生成代码的项目,以避免冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否使用清单占位符的生成。</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// </span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认禁用,启用后将同步属性的键值到 \`android\` 配置方法块中的 \`manifestPlaceholders\`</span></span>
<span class="line"><span style="color:#ADBAC7;"> manifestPlaceholders </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="jvm-项目配置" tabindex="-1"><a class="header-anchor" href="#jvm-项目配置" aria-hidden="true">#</a> JVM 项目配置</h3><p>此配置块中的内容仅对纯 JVM 项目生效 (包括 Kotlin、Java 项目),如果是 Android 项目请参考 <a href="#android-%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE">Android 项目配置</a> 进行配置。</p><p>这里的配置包括 <code>common</code> 中的配置,你可以对其进行复写。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">jvm</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的目录路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以填写相对于当前项目的路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 格式示例: &quot;path/to/your/src/main&quot;&quot;src/main&quot; 是固定后缀</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;build/generated/gropify/src/main&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 我们建议你将生成路径设置在 &quot;build&quot; 目录下,该目录默认被版本控制系统忽略</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义部署 \`sourceSet\` 名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你的项目源代码部署名称不是默认的,可以在此处自定义</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;main&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;main&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Java、Kotlin 项目默认使用项目设置的 \`project.group\`</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;generated&quot; 是固定后缀,用于避免与你自己的命名空间冲突,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你不想要此后缀,可以参考 [isIsolationEnabled]</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的类名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认使用当前项目的名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;Properties&quot; 是固定后缀,用于与你自己的类名区分</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否使用 Kotlin 语言生成</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将生成 Kotlin 代码,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 禁用后将生成 Java 代码</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 当此项目为纯 Java 项目时,此选项将被禁用</span></span>
<span class="line"><span style="color:#ADBAC7;"> useKotlin </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用受限访问</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认禁用,启用后将为生成的 Kotlin 类添加 \`internal\` 修饰符,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 或为生成的 Java 类移除 \`public\` 修饰符</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用代码隔离</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将在隔离的包后缀 &quot;generated&quot; 中生成代码,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 以避免与其他同样使用或不仅使用 Gropify 生成代码的项目冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 如果你禁用此选项,请确保没有其他同样使用或不仅使用</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Gropify 生成代码的项目,以避免冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="kotlin-多平台项目配置" tabindex="-1"><a class="header-anchor" href="#kotlin-多平台项目配置" aria-hidden="true">#</a> Kotlin 多平台项目配置</h3><p>此配置块中的内容仅对含有 Kotlin Multiplatform 插件的项目生效。</p><p>这里的配置包括 <code>common</code> 中的配置,你可以对其进行复写。</p><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">kmp</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的目录路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 你可以填写相对于当前项目的路径</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 格式示例: &quot;path/to/your/src/main&quot;&quot;src/main&quot; 是固定后缀</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;build/generated/gropify/src/main&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 我们建议你将生成路径设置在 &quot;build&quot; 目录下,该目录默认被版本控制系统忽略</span></span>
<span class="line"><span style="color:#ADBAC7;"> generateDirPath </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;build/generated/gropify&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义部署 \`sourceSet\` 名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你的项目源代码部署名称不是默认的,可以在此处自定义。</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认为 &quot;commonMain&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> sourceSetName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;commonMain&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Kotlin 多平台项目默认使用项目设置的 \`project.group\`</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在 Kotlin 多平台项目中,如果同时应用了 AGP 插件,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 仍将默认使用 \`namespace\` 作为包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;generated&quot; 是固定后缀,用于避免与你自己的命名空间冲突,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 如果你不想要此后缀,可以参考 [isIsolationEnabled]</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.example.mydemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 自定义生成的类名</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认使用当前项目的名称</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &quot;Properties&quot; 是固定后缀,用于与你自己的类名区分</span></span>
<span class="line"><span style="color:#ADBAC7;"> className </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;MyDemo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用受限访问</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认禁用,启用后将为生成的 Kotlin 类添加 \`internal\` 修饰符</span></span>
<span class="line"><span style="color:#ADBAC7;"> isRestrictedAccessEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 是否启用代码隔离</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 默认启用,启用后将在隔离的包后缀 &quot;generated&quot; 中生成代码,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 以避免与其他同样使用或不仅使用 Gropify 生成代码的项目冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">//</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// - 注意: 如果你禁用此选项,请确保没有其他同样使用或不仅使用</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Gropify 生成代码的项目,以避免冲突</span></span>
<span class="line"><span style="color:#ADBAC7;"> isIsolationEnabled </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="使用示例" tabindex="-1"><a class="header-anchor" href="#使用示例" aria-hidden="true">#</a> 使用示例</h2><p>下面是一个项目的 <code>gradle.properties</code> 配置文件。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.groupName</span><span style="color:#ADBAC7;">=com.highcapable.gropifydemo</span></span>
<span class="line"><span style="color:#F47067;">project.description</span><span style="color:#ADBAC7;">=Hello Gropify Demo!</span></span>
<span class="line"><span style="color:#F47067;">project.version</span><span style="color:#ADBAC7;">=1.0.0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>在构建脚本 <code>build.gradle.kts</code> 中,我们就可以如下所示这样直接去使用这些键值。</p><p>这里以 Maven 发布的配置部分举例。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">publications</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">create</span><span style="color:#ADBAC7;">&lt;</span><span style="color:#F69D50;">MavenPublication</span><span style="color:#ADBAC7;">&gt;(</span><span style="color:#96D0FF;">&quot;maven&quot;</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> groupId </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.groupName</span></span>
<span class="line"><span style="color:#ADBAC7;"> version </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.version</span></span>
<span class="line"><span style="color:#ADBAC7;"> pom.description.</span><span style="color:#DCBDFB;">set</span><span style="color:#ADBAC7;">(gropify.project.description)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">from</span><span style="color:#ADBAC7;">(components[</span><span style="color:#96D0FF;">&quot;java&quot;</span><span style="color:#ADBAC7;">])</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>同样地,你也可以在当前项目中调用生成的键值。</p><blockquote><p>Kotlin</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> groupName </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_GROUP_NAME</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> description </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_DESCRIPTION</span></span>
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> version </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_VERSION</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>Java</p></blockquote><div class="language-java line-numbers-mode" data-ext="java"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">groupName</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_GROUP_NAME;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">description</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_DESCRIPTION;</span></span>
<span class="line"><span style="color:#F47067;">var</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">version</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> GropifyDemoProperties.PROJECT_VERSION;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>下面再以 Android 项目举例。</p><p>在 Android 项目中通常需要配置很多重复、固定的属性,例如 <code>targetSdk</code>。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.namespace</span><span style="color:#ADBAC7;">=com.highcapable.gropifydemo</span></span>
<span class="line"><span style="color:#F47067;">project.appName</span><span style="color:#ADBAC7;">=Gropify Demo</span></span>
<span class="line"><span style="color:#F47067;">project.compileSdk</span><span style="color:#ADBAC7;">=36</span></span>
<span class="line"><span style="color:#F47067;">project.targetSdk</span><span style="color:#ADBAC7;">=36</span></span>
<span class="line"><span style="color:#F47067;">project.minSdk</span><span style="color:#ADBAC7;">=26</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当你设置了 <code>useTypeAutoConversion = true</code> 时,<code>Gropify</code> 在生成实体类过程在默认配置下将尝试将其转换为对应的类型。</p><p>例如下方所使用的键值,其类型可被识别为字符串和整型,可被项目配置直接使用。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">android</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> namespace </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.namespace</span></span>
<span class="line"><span style="color:#ADBAC7;"> compileSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.compileSdk</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">defaultConfig</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> minSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.minSdk</span></span>
<span class="line"><span style="color:#ADBAC7;"> targetSdk </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> gropify.project.targetSdk</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当你设置了 <code>manifestPlaceholders = true</code> 时,<code>Gropify</code> 将自动将这些属性键值同步到 <code>android</code> 配置方法块中的 <code>manifestPlaceholders</code>。</p><p>此时你可以直接在 <code>AndroidManifest.xml</code> 中使用这些占位符。</p><blockquote><p>示例如下</p></blockquote><div class="language-xml line-numbers-mode" data-ext="xml"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">&lt;</span><span style="color:#8DDB8C;">manifest</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">xmlns:android</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;http://schemas.android.com/apk/res/android&quot;</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> &lt;</span><span style="color:#8DDB8C;">application</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">android:label</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;\${project.appName}&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">android:icon</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;@mipmap/ic_launcher&quot;</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> &lt;/</span><span style="color:#8DDB8C;">application</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"><span style="color:#ADBAC7;">&lt;/</span><span style="color:#8DDB8C;">manifest</span><span style="color:#ADBAC7;">&gt;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>你可以无需再使用 <code>buildConfigField</code> 向 <code>BuildConfig</code> 添加代码,有了 <code>Gropify</code> 生成的属性键值代码,你可以更加灵活地管理你的项目。</p><p>你还可以在属性键值中使用插值 <code>\${...}</code> 互相引用其中的内容,但不允许递归引用。</p><p>当你设置了 <code>useValueInterpolation = true</code> 时,<code>Gropify</code> 将自动合并这些引用的内容到对应位置。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">project.name</span><span style="color:#ADBAC7;">=MyDemo</span></span>
<span class="line"><span style="color:#F47067;">project.developer.name</span><span style="color:#ADBAC7;">=myname</span></span>
<span class="line"><span style="color:#F47067;">project.url</span><span style="color:#ADBAC7;">=https://github.com/\${project.developer.name}/\${project.name}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果你在 <code>locations</code> 中添加了 <code>GropifyLocation.SystemEnv</code>,你还可以直接引用系统环境变量。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;"># Linux 或 macOS 系统中使用 $USER 环境变量可以获取当前用户名</span></span>
<span class="line"><span style="color:#F47067;">project.developer.name</span><span style="color:#ADBAC7;">=\${USER}</span></span>
<span class="line"><span style="color:#768390;"># 假设你有一个名为 SECRET_KEY 的系统环境变量 (请确保安全)</span></span>
<span class="line"><span style="color:#F47067;">project.secretKey</span><span style="color:#ADBAC7;">=\${SECRET_KEY}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container warning"><p class="custom-container-title">注意</p><p>这个特性是 <code>Gropify</code> 提供的,原生的 <code>gradle.properties</code> 并不支持此功能。</p><p>插值内容通过 <code>locations</code> 的层级自上而下进行查找替换,如果存在重复的键值名称,将使用最后查找到的内容进行替换。</p></div><h2 id="可能遇到的问题" tabindex="-1"><a class="header-anchor" href="#可能遇到的问题" aria-hidden="true">#</a> 可能遇到的问题</h2><p>如果你的项目仅存在一个根项目,且没有导入任何子项目,此时如果扩展方法不能正常生成, 你可以将你的根项目迁移至子项目并在 <code>settings.gradle.kts</code> 中导入这个子项目,这样即可解决此问题。</p><p>我们一般推荐将项目的功能进行分类,根项目仅用来管理插件和一些配置。</p><h2 id="局限性说明" tabindex="-1"><a class="header-anchor" href="#局限性说明" aria-hidden="true">#</a> 局限性说明</h2><p><code>Gropify</code> 无法生成 <code>settings.gradle.kts</code> 中的扩展方法,因为这属于 <code>Gropify</code> 的上游。</p>`,97),o=[p];function i(c,r){return n(),a("div",null,o)}const d=s(e,[["render",i],["__file","quick-start.html.vue"]]);export{d as default};

View File

@@ -0,0 +1 @@
const l=JSON.parse('{"key":"v-24840ff0","path":"/zh-cn/guide/quick-start.html","title":"快速开始","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"部署插件","slug":"部署插件","link":"#部署插件","children":[]},{"level":2,"title":"功能配置","slug":"功能配置","link":"#功能配置","children":[{"level":3,"title":"通用配置","slug":"通用配置","link":"#通用配置","children":[]},{"level":3,"title":"构建脚本配置","slug":"构建脚本配置","link":"#构建脚本配置","children":[]},{"level":3,"title":"Android 项目配置","slug":"android-项目配置","link":"#android-项目配置","children":[]},{"level":3,"title":"JVM 项目配置","slug":"jvm-项目配置","link":"#jvm-项目配置","children":[]},{"level":3,"title":"Kotlin 多平台项目配置","slug":"kotlin-多平台项目配置","link":"#kotlin-多平台项目配置","children":[]}]},{"level":2,"title":"使用示例","slug":"使用示例","link":"#使用示例","children":[]},{"level":2,"title":"可能遇到的问题","slug":"可能遇到的问题","link":"#可能遇到的问题","children":[]},{"level":2,"title":"局限性说明","slug":"局限性说明","link":"#局限性说明","children":[]}],"git":{"updatedTime":1763223336000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"zh-cn/guide/quick-start.md"}');export{l as data};

File diff suppressed because one or more lines are too long