首页 > 解决方案 > 打印源文件的当前内容(在 Android 上使用 Java 或 Kotlin)

问题描述

假设我们有 Android 应用程序,从文件 A、B、C 编译。我想在屏幕上打印文件 A 的源代码,如果将来我会对文件进行一些更改,AI 想打印这个文件的新状态。假设允许从文件 B 或 C 打印(文件 A 不必自己打印)。 最直接的方法是什么?

提示。 根据我的研究,我认为 gradle 任务是可能的,它在编译之前将复制文件从 src/main/java 填充到资产中。我们可以以“标准”方式从资产中读取这些文件。但这对我来说听起来像是一种解决方法。我不想在我的应用程序中有重复的 java/kotlin 文件。如果我在 src/main/java 下有 A、B、C 类,我想在没有这些操作的情况下从 B 类打印例如 A 类的源代码。

标签: javaandroidgradlekotlin

解决方案


那么为什么要这样我们不能打印带有所有函数和变量等的整个类呢?

简单的答案:因为程序不需要运行,因此被编译器剥离,甚至更多地被proguard等工具剥离。因此,在运行时,您想要访问的代码(您想要明文的代码)甚至可能不在生成的 .aar 中。

Java 被编译为类文件中的字节码,您可以通过某种方式读取其中的所有内容。

根据我的研究,我认为 gradle 任务是可能的,它在编译之前将复制文件从 src/main/java 填充到资产中。我们可以以“标准”方式从资产中读取这些文件。但这对我来说听起来像是一种解决方法。我不想在我的应用程序中有重复的 java/kotlin 文件。如果我在 src/main/java 下有 A、B、C 类,我想在没有这些操作的情况下从 B 类打印例如 A 类的源代码。

这不是解决方法。您想在程序中保留编译程序所需的信息,然后您必须自己保留(即在.zip 文件或so​​urces.jar 中)。

我们可以很容易地打印例如示例中的类名,例如 tutorialspoint.com/java/lang/class_getsimplename.htm

这是因为该信息对于实例化公共类是必需的,即通过依赖注入。


推荐阅读