从 Android Studio 项目中删除所有未使用的类、方法
Posted
技术标签:
【中文标题】从 Android Studio 项目中删除所有未使用的类、方法【英文标题】:Remove all unused classes,methods from Android Studio project 【发布时间】:2016-09-01 04:19:48 【问题描述】:我使用了 lint(Analyze->Inspect Code...) 并找出未使用的方法和资源。 Refractor->Remove used Resources 删除了所有未使用的资源,但没有找到任何类似这样的选项来删除 java 类和方法。 android studio或任何插件中是否有任何功能可以删除所有java类,代码中未使用的方法以节省手动折射?
【问题讨论】:
How can I find all unused methods of my project in the Android Studio IDEA?的可能重复 @Nirekin 我的问题是“删除未使用的类和方法”而不是“查找未使用的方法” 我相信它不是自动化的。你必须用手来做 【参考方案1】:第一步
使用 Proguard 或 R8 生成 usage.txt 和 mapping.txt
将-printusage
添加到您的 proguard.pro 文件中运行
./gradlew app:minifyReleaseWithProguard
或 ./gradlew app:minifyReleaseWithR8
第 2 步
查找usage.txt中但不在mapping.txt中的类名记录,这些是Proguard/ R8删除的未使用的类 这样的算法写起来不难,但是可以考虑使用HashTable或者二叉树。
我已经详细阐述了here
【讨论】:
【参考方案2】:Android 附带 ProGuard,可以为所欲为。如果您使用 Gradle 作为构建系统,则可以在 build.gradle
文件中添加以下行:
android
// ... other configurations
buildTypes
release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules-debug.pro'
您的proguard-rules-debug.pro
文件只需要包含一行
-dontobfuscate
通过这些添加,您的发布版本会缩小和混淆,但是,您的调试版本只会缩小,即删除不必要的代码。 请注意,ProGuard 在构建而不是源代码上运行。
ProGuard FAQ 有更多关于它可以做什么的信息。
【讨论】:
我相信主题启动者会被 Android Studio 的发现所困扰,而不是从未使用的方法中清除 apk @EugenMartynov 也许,但问题中没有明确说明。也许 OP 可以对此有所了解。 您正在告诉解决方案在运行时删除未使用的方法。需要在开发过程中删除未使用的方法。【参考方案3】:这可以通过使用内置检查Java | Declaration redundancy | Unused declaration
来实现。
要在整个项目上运行它,请转到 Analyze -> Run inspection by name...
,输入 Unused declaration
并选择所需的范围。
然后仔细检查输出并在需要时将一些类标记为入口点。
现在您可以在列表中选择Unused declaration
节点,并立即对所有未使用的声明执行Safe delete
操作。
对于 Kotlin,有类似的检查 Kotlin | Redundant constructs | Unused symbol
。
【讨论】:
嗨,我看不到 Kotlin |冗余结构 |未使用的符号选项。你能帮忙吗 @MrMike 检查在Analyze -> Run inspection by name...
中找不到全名,你可以试试Unused symbol
。 i.stack.imgur.com/lwTwx.png以上是关于从 Android Studio 项目中删除所有未使用的类、方法的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android Studio 中的特定文件中删除所有评论? [复制]
如何为 Android Studio 中的所有配置删除未使用的字符串资源?