是否可以在build.gradle中编写java代码?

Is it possible to write java code in build.gradle?

我知道我们可以在 build.gradle 中写入字符串值。现在我想知道在 build.gradle 中编写一些特定的 java 代码。是否有可能做到这一点? 我在下面有示例代码

@Override
        protected void onCreate(Bundle savedInstanceState) {
       
        super.onCreate(savedInstanceState);
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        setContentView(R.layout.our_activity_main);

 if (jahwil(getApplicationContext().getPackageName(),"MD5").substring(100,200).compareTo("800") != 0) {
                this.finishAffinity();
            }

  private static String jahwil(String txt, String hashType) {
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);
            byte[] array = md.digest(txt.getBytes());
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < array.length; ++i) {
                sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
            }
            return sb.toString().toUpperCase();
        } catch (java.security.NoSuchAlgorithmException e) {
        }
        return null;
    }

我要写代码

 if (jahwil(getApplicationContext().getPackageName(),"MD5").substring(100,200).compareTo("800") != 0) {
                    this.finishAffinity();
                }

  private static String jahwil(String txt, String hashType) {
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);
            byte[] array = md.digest(txt.getBytes());
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < array.length; ++i) {
                sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
            }
            return sb.toString().toUpperCase();
        } catch (java.security.NoSuchAlgorithmException e) {
        }
        return null;
    }

在 build.gradle 中。可能吗?

简短的回答是否定的,你不能。但这样做的原因是Gradle不是写在Java代码中而是写在Domain Specific Language or DSL中。正如@a_local_nobody 的评论所说,Gradle 使用的是 Groovy,这是 Java Virtual Machine (JVM) 的动态语言。这些文件已创建,您通常会在其中拥有所需的一切。

有关如何build configuration files, read this.

的更多信息

编辑:

感谢@a_local_nobody,正如他在评论中所说,您可以使用 JavaExec 来执行一些 Java 代码。它仍然是 Gradle 中的 DSL,但它会从另一个地方执行 Java 代码。这可用于在应用程序启动之前将一些参数传递给应用程序。检查这个答案: