gradle 确定给定包在Android Studio中源自哪个存储库依赖项

aydmsdu9  于 2023-08-06  发布在  Android
关注(0)|答案(1)|浏览(115)

问题:

对于给定的导入,例如

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

cyej8jka

cyej8jka1#

为了找出依赖父项,您需要:
1.从import语句中打开一个类,并查看库ID和版本(在Project选项卡中)
1.然后点击Gradle选项卡中的“Analyze dependencies...”:


的数据

相关问题