java - 打印源文件的当前内容(在 Android 上使用 Java 或 Kotlin)

标签 java android gradle kotlin

假设我们有 Android 应用程序,由文件 A、B、C 编译而成。 我想在屏幕上打印文件 A 的源代码,如果将来我将在文件 A 中进行一些更改,我想打印该文件的新状态。假设可以从文件 B 或 C 打印(文件 A 不必打印自身)。 最直接的方法是什么?

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

最佳答案

So why going this way we can't print whole class with all functions and variables etc.?

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

Java 被编译为字节码 class file ,您可以以某种方式阅读其中的所有内容。

From my research i think it's possible with gradle task, which fill copy files from src/main/java to assets before compilation. Than we can read these files from assets in "standard" way. But this sound for me like a workaround. I don't want to have duplicates of java/kotlin files in my app. If i have classes A,B,C under src/main/java i want to print e.g source of class A from class B without these operations.

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

we can easy print e.g. class name like in sample here tutorialspoint.com/java/lang/class_getsimplename.htm

这是因为此信息对于实例化公共(public)类(即通过依赖注入(inject))是必需的。

关于java - 打印源文件的当前内容(在 Android 上使用 Java 或 Kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014667/

相关文章:

Java JComboBox 图标

java - Spring AOP :Cannot resolve method to a unique method

android - 动态检查类型的变量android

java - 每秒上传进度 - Android

gradle - asciidoctor任务作为gradle构建的一部分

java - 如何在Azure存储文件共享上上传大文件?

java - 在 BaseAdapter 中将 hasStableIds() 设置为 false 有什么好处?

java - 无法从 firebase 数据库中检索值

java - 格拉德鲁 : no source code available for type "userclass"

c++ - 将 C++ cmake-library 构建发布到本地 repo 时出现 Gradle 错误