是否可以在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 代码。这可用于在应用程序启动之前将一些参数传递给应用程序。检查这个答案:
我知道我们可以在 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 代码。这可用于在应用程序启动之前将一些参数传递给应用程序。检查这个答案: