问题:
对于给定的导入,例如
import androidx.appcompat.app.AppCompatActivity;
字符串
在Android Studio中,是否有一种快速有效的方法来回溯跟踪从哪个gradle依赖项以及从哪个存储库提取该依赖项?一个类似的功能是用Ctrl+q快捷键来获取当前光标下的文档,但据我所知,这并没有超出.java文件的范围。换句话说,我想找到一种从给定的import语句Map出依赖关系树的方法。
用例示例:
例如,如果在Android Studio 4.0中创建新的空白Activity项目时,我有默认的MainActivity.java,则我有以下默认的MainActivity.java代码:
package jp.oist.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
型
使用以下项目级gradle文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
型
和以下应用程序级gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "30.0.0"
defaultConfig {
applicationId "jp.oist.myapplication"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
型
在这里,由于项目的简单性,我知道
import androidx.appcompat.app.AppCompatActivity;
型
将由应用程序级gradle文件依赖引起:
implementation 'androidx.appcompat:appcompat:1.1.0'
型
而这又是从项目级gradle文件定义的存储库中提取的:
repositories {
google()
jcenter()
}
型
我希望我对这一切的理解是正确的?即使在这种情况下,androidx.appcompat:appcompat:1.1.0
包是从google()
还是jcenter()
中提取的仍然是不明确的。显然,Android Studio Linter正在后台确认哪一个,因为如果它无法从任何repos中提取,它将抛出错误。
我希望能找到一种方法来找到这些依赖关系树的细节,类似于我如何使用Ctrl+q来查看代码中任何地方的给定方法或变量的文档和包细节。我还使用Ctrl+B转到给定方法或变量的声明或用法。
在上面的默认代码中,我可以单击onCreate(Bundle ...
,按Ctrl-q,我会发现它是在jp.oist.myapplication.MainActivity中定义的,而且我还看到它覆盖了类AppCompatActivity的onCreate方法。我可以打开AppCompatActivity类并重复相同的步骤,发现这里的onCreate方法覆盖了FragmentActivity类的onCreate方法...等等。这为我提供了一种方法,可以一直跟踪到最上层的父节点(或者依赖项,如果从gradle上下文的Angular 考虑的话)。
是否有类似的功能来追溯给定导入语句的“父”或依赖项?然后是依赖关系的回收?
我会发现这在尝试从示例代码中学习时非常有用(例如Google的Vision Quickstart示例项目)。试图理解如何使这样的示例适应我的代码,需要我知道基本依赖关系的位置,而不仅仅是复制和粘贴所有内容,我宁愿更好地理解代码中的内容。
我尝试过:
在stackoverflow上搜索“android studio which repo import from”,“android studio”tracing import statements back to gradle”等。但还没有找到一个好的搜索字符串使用它似乎。我相信这已经在某个地方被问到或回答过了,但我就是找不到。任何正确方向的观点都值得赞赏!
默认生成系统:
Android Studio 4.0 Build #AI-193.6911.18.40.6514223,构建于2020年5月21日运行时版本:1.8.0_242-release-1644-b3-6222593 amd64 VM:OpenJDK 64-Bit Server VM by JetBrains s.r.o Linux 5.3.0-46-generic GC:ParNew、ConcurrentMarkSweep内存:1981 M核心:8登记处:ide.new.welcome.screen.force=true非捆绑插件:PlantUML集成,SequenceDiagram,org.jetbrains.Kotlin,com.google.services.firebase,com.intellij.marketplace,com.thoughtworks.gauge,org.intellij.plugins.markdown,org.pmesmeur.sketchit,ru.leoklo.stackuml,simpleUML
1条答案
按热度按时间cyej8jka1#
为了找出依赖父项,您需要:
1.从import语句中打开一个类,并查看库ID和版本(在Project选项卡中)
1.然后点击Gradle选项卡中的“Analyze dependencies...”:
的数据