Expo项目在本地打包apk的问题
没想到在新公司又用到了React Native,于是配置安卓环境又浪费了我一天时间。
本来我们用的是expo,它可以完全跳过安卓环境来打包项目,走EAS Build。但是官网打包它慢,有时还要排队,我最长打过1个多小时的包,真的是不太能忍。
另一点是因为新项目很可能需要用原生代码去实现某些功能,所以研究了npx expo prebuild,把原项目的android文件夹暴露出来。
然后就开始了痛苦的一天,虽然app\android\gradle\wrapper\gradle-wrapper.properties里替换了distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.13-bin.zip
app\android\build.gradle里也增加了阿里云的路径:
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven{ url 'https://maven.aliyun.com/repository/central' }maven{ url 'https://maven.aliyun.com/repository/public' }maven{ url 'https://maven.aliyun.com/repository/google' }maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'}google()mavenCentral()}dependencies {classpath('com.android.tools.build:gradle')classpath('com.facebook.react:react-native-gradle-plugin')classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')}
}def reactNativeAndroidDir = new File(providers.exec {workingDir(rootDir)commandLine("node", "--print", "require.resolve('react-native/package.json')")}.standardOutput.asText.get().trim(),"../android"
)allprojects {repositories {maven{ url 'https://maven.aliyun.com/repository/central' }maven{ url 'https://maven.aliyun.com/repository/public' }maven{ url 'https://maven.aliyun.com/repository/google' }maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'}maven {// All of React Native (JS, Obj-C sources, Android binaries) is installed from npmurl(reactNativeAndroidDir)}google()mavenCentral()maven { url 'https://www.jitpack.io' }}
}apply plugin: "expo-root-project"
apply plugin: "com.facebook.react.rootproject"
可真跑起gradlew assembleRelease来,还是慢慢吞吞,下载了一个多小时的.gradle包后跟我说,jdk版本太低,至少应该为11。
晕,原电脑的同事用的是java8…… 换完java11后,又告诉我至少得用java17…… 算了,我直接下java21得了。
在javac -version显示javac 21.0.7的情况下,使用gradlew assembleRelease,还报错找不到java11……
我以为是项目的问题,重来了几次依旧不行。后来才查到,原来是C:\Users\用户\.gradle捣的鬼,所以一上头,直接把这下了一个多小时几个G的.gradle删除。
不管是gradlew assembleRelease还是gradlew clean,还是会继续下载该包的,但鉴于经常有些包请求不到,于是考虑走本地代理,在app\android\gradle.properties中增加配置:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7897
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7897
解决了下载gradle包超级慢的问题,它依旧会报错:缺少ANDROID_HOME配置环境。
果然,还是得把安卓的SDK弄一遍。理论上可以只下载SDK不用下载Android Studio,然而实际官网那个SDK包我是真的不大会用,里面虽然看到个sdkmanager.bat,但不是可视化操作真不如jdk那样安装方便。
退而求其次,干脆还是下载Android Studio吧,结果下载安装时,需要配置代理才能安装SDK。什么mirrors.neusoft.edu.cn、mirrors.aliyun.com都试过,看似通了其实并没有。
The Android SDK location cannot be at the filesystem root
在sdk components setup根本就无法勾选SDK,折腾了几个小时,最后还是换成本地代理解决了。
配置好ANDROID_HOME,终于能让expo项目在本地生成apk了,除了第一次生成有些慢之外,第二次以后生成时间也就一两分钟有点超出我的意料。因为之前用RN写的项目,打个包也至少得跑几分钟的代码,Expo居然能加速这么多?!