我使用了lint( Analyze-> Inspect Code ...)并找出了未使用的方法和资源。所有未使用的资源都被 Refractor->删除了未使用的资源但未找到任何类似的选项来删除java类和方法。 android studio或任何插件中是否有任何功能可以删除所有java类,这些方法在代码中没有用来保存手动折射?
答案 0 :(得分:22)
这可以通过使用内置检查Java | Declaration redundancy | Unused declaration
来实现。
要在整个项目中运行,请转到Analyze -> Run inspection by name...
,输入Unused declaration
并选择所需的范围。
然后仔细检查输出并在需要时将某些类标记为入口点。
现在,您可以在列表中选择Unused declaration
节点,并立即对所有未使用的声明执行Safe delete
操作。
对于Kotlin,有类似的检查Kotlin | Redundant constructs | Unused symbol
。
答案 1 :(得分: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有更多关于它可以做什么的信息。
答案 2 :(得分:0)
第1步
通过Proguard或R8生成usage.txt和mapping.txt
将-printusage
添加到您的proguard.pro文件中运行
./gradlew app:minifyReleaseWithProguard
或./gradlew app:minifyReleaseWithR8
第2步
查找用法名称.txt中而不是mapping.txt中的类名称记录,这些是Proguard / R8删除的未使用的类 编写这样的算法并不难,但是您可以考虑使用Binary Search Tree here