关于rn下载gradle依赖速度慢的问题

对与rn、flutter等项目,在初学者对于下载gradle会感觉到抓挠,下载依赖时非常慢,以下是个人依赖下载处理的记录

1.gradle本体下载

初次生成rn项目时,在安装完nodemodules后,执行npm run android或者其他yarn pnpm,首先就是下载gradle,需要在项目根目录下面的android/gradle/gradle-wrapper.properties里面修改

js 复制代码
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists

# 这是初始化生成自带的,地址为国外,100多mb下载巨慢无比
# distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
# 这是阿里云的国内gradle镜像,不同版本的rn需要的的gradle不一样,如果gradle-8.14.1-bin.zip这部分不同,
# 这部分保留替换前面的
distributionUrl=https://mirrors.aliyun.com/macports/distfiles/gradle//gradle-8.14.1-bin.zip

networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

2.gradle下载依赖

这部分需要在Android/build.gradle里面配置

js 复制代码
buildscript {
    ext {
        buildToolsVersion = "35.0.0"
        minSdkVersion = 24
        compileSdkVersion = 35
        targetSdkVersion = 35
        ndkVersion = "27.1.12297006"
        kotlinVersion = "2.1.20"
    }
    repositories {
        #这部分是修改的,抛开google与mavenCentral添加的,其他的都是国内镜像。
        # 腾讯云
        maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/spring' }
        maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
        maven { url 'https://maven.aliyun.com/repository/grails-core' }
        maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
         // 华为云镜像
        maven { url 'https://repo.huaweicloud.com/repository/maven/' }
        // 腾讯云镜像
        maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
        // 网易镜像
        maven {url 'https://mirrors.163.com/maven/repository/maven-public/' }
        google()
        mavenCentral()

    }
    dependencies {
        // classpath("com.android.tools.build:gradle:8.4.0")
        classpath("com.android.tools.build:gradle")
        classpath("com.facebook.react:react-native-gradle-plugin")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
    }
}
#这部分为添加的,
allprojects {
    repositories {
        #同上
        maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/spring' }
        maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
        maven { url 'https://maven.aliyun.com/repository/grails-core' }
        maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
         // 华为云镜像
        maven { url 'https://repo.huaweicloud.com/repository/maven/' }
        // 腾讯云镜像
        maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
        // 网易镜像
        maven {url 'https://mirrors.163.com/maven/repository/maven-public/' }
        google()
        mavenCentral()


    }
}
apply plugin: "com.facebook.react.rootproject"

在初始化的项目中只有buildscript与括号里面的东西和apply plugin: "com.facebook.react.rootproject",当配置完后依然遇到下载较慢的问题,这时候可以使用一项配置查看下载的镜像源的域名是哪里的。

在android/gradle.properties 内

js 复制代码
    # android/gradle.properties
....其他配置

org.gradle.logging.level=info

开启这个后在查看下载会发现有部分依然是使用国外源,这时候需要在nodemodules里面配置

例如在nodemodules/@react-native/gradle-plugin/settings.gradle.kts

kts 复制代码
pluginManagement {
  repositories {
          #同上,除开mavenCentral google gradlePluginPortal其他都是国内镜像源
        maven { url = uri("https://maven.aliyun.com/repository/central") }
        maven { url = uri("https://maven.aliyun.com/repository/jcenter") }
        maven { url = uri("https://maven.aliyun.com/repository/google") }
        maven { url = uri("https://maven.aliyun.com/repository/public") }
        maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
        mavenCentral()
        google()
        gradlePluginPortal()
  }
}

plugins { id("org.gradle.toolchains.foojay-resolver-convention").version("0.5.0") }

include(
    ":react-native-gradle-plugin",
    ":settings-plugin",
    ":shared",
    ":shared-testutil",
)

rootProject.name = "gradle-plugin-root"

同样的,在rn的第三方库中多少都涉及到gradle,如果发现卡顿下载慢,查看下载慢的依赖在跑去库内比对。比如react-native-fs

在nodemodules/react-native-fs/android/build.gradle修改进行尝试。

gradle在构建过程中有

  1. 初始化阶段(有INIT开头的英文)
  2. 配置阶段(有CONFIG开头英文)
  3. 执行阶段(有EXEC开头英文) 在gradle构建中最大的包是react-android-debug.arr 该包有200mb,否则会下载将近2、3个小时(别人,问就是亲身经历),该在执行阶段,这部分一定要用国内镜像源!!

还有就是hermes-android.aar z这个包。

当你打包的时候也需要下载react-android-release.arr的包,100多。

相关推荐
zihan51821 小时前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
Flynt3 天前
Shopify 弃 React Native 上了 HN 1272 分,我复现了它给 Agent 用的那套无头架构
react native·前端框架·agent
古法安卓4 天前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
执明wa5 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio
JMchen5 天前
Android自定义View三大核心流程:measure、layout、draw完全解密
android·android studio
古法安卓6 天前
Android-Fork 机制详解
android·java·android studio
JMchen6 天前
第 12 篇|项目整合与打包发布 —— 从 Demo 到可安装 APK 的完整收官指南
kotlin·android studio
JMchen7 天前
第 9 篇|网络请求基础 —— 从 HttpURLConnection 到 OkHttp
kotlin·android studio
程序员老刘7 天前
Android Studio Quail 4发布,看日志我以为谷歌放弃Flutter了
flutter·android studio·ai编程