首页 > 解决方案 > 是否可以在 build.gradle 中编写 java 代码?

问题描述

我知道我们可以在 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 中。是否可以?

标签: javaandroidbuild.gradle

解决方案


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

有关如何构建配置文件的更多信息,请阅读此内容。

编辑:

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


推荐阅读