Android Studio 进行android开发,但是编译的耗时又是很头疼的问题。所以决定拉取源代码编译一下他,研究下如何提升性能。过程很坎坷。 先贴下效果图:
但是我写这个的目的 不光记录下编译的过程,也想分享给需要的人,可以少走坑。所以我也从头来吧:
1.Clone代码,这个还是比较简单的
官方教程: source.android.com/source/down…
1.首先我们需要创建目录。 mac同学注意了,代码一定要存储在大小写敏感的磁盘里。 首先我们创建自己的目录:
mkdir android-studio-master
cd android-studio-master
2.获取代码 repo init -u android.googlesource.com/platform/ma… -b 分支 我们这里编译的是2021.1.1版本 所以分支我们就填入studio-2021.1.1
repo init -u https://android.googlesource.com/platform/manifest -b studio-2021.1.1
关于版本管理可以参考Android Studio版本说明,当前的最新版本就是2021.1.1。
我们就等待他同步相关的仓库信息。
关于repo的安装 可以看官方的文档,这里我就贴出对应的命令。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
当看到输出initialized 就表示同步成功。同步完成以后运行repo sync -j4
,进行代码的拉取。时间比较久,我们就让他同步着吧。
我也是新拉取的,所以先写到这里,等代码拉取成功再更新。
2.项目介绍
当看到这个就说明代码拉取成功了,接下来就要导入项目了。
这里我就使用IntelliJ IDEA 2021.3.2版本了。
介绍下我们需要用到的目录: tools/base:这个库是Android Studio的公共库,构建系统gradle plugin和sdk组件。 包括:
- Instant-run
- SDKManager
- Manifest Merger
- 以及一些公共库、测试库 和性能分析工具profiler。
tools/base/adt/idea:这个库是IntelliJ平台的Android插件源代码,也是Android Studio最核心的部分。 包括:
- Android light classes
- Assistant
- Color picker
- Kotlin light-class
- Layout editor placeholder
- Logging
- Resources system等等。 我们主要导入tools/base/adt/idea。 导入后的界面:
从右上角的Configurations中下拉选中Android Studio 不过这个时候是报错的,是因为我们缺少了依赖环境。
3.依赖环境
- JDK:
我们不需要重新下载JDK,在我们拉取的项目中已经有了JDK。
prebuilts/studio/jdk/mac
默认目录。需要在项目中导入该JDK环境。
设置JDK后,我们还需要设置插件的依赖库,也就是tools/base库的依赖。
2. 公共库依赖
缺了这么多库,不用慌张。我们直接构建一次Android Studio就会生成这些库了。
在tools/idea目录 运行build_studio.sh 脚本就会为我们构建Android Studio了。
$ cd tools/idea
$ ./build_studio.sh
中间会出现很多问题,我们一步一步来解决。
开始:
🤣刚开始就报错了。
我们来看看错误
[java] [gant] The following modules from productProperties.productLayout.bundledPluginModules aren't found in the project: [intellij.c.clangd, intellij.c.plugin, intellij.cidr.debugger.plugin, intellij.cidr.base.plugin]
这是因为CIDR插件源码中是没有的,这些库源码中是没有的,所以我们需要注掉。具体的代码在构建Android Studio的groovy脚本中。
/Volumes/android_studio/android-studio-master/tools/idea/build/groovy/org/jetbrains/intellij/build/AndroidStudioProperties.groovy
我们注掉
搞定,我们继续。重新运行build_studio.sh 构建成功:
tools/idea/out/studio/dist/android-studio-211.7628.21.2111.__BUILD_NUMBER__.mac.zip
这就是编译出来的Android Studio了。
编译出来的Android Studio是不可以直接运行的,我们导入项目依赖:
还有报红的库,是因为我们还缺少android artifacts。需要使用bazel构建artifacts。
cd /tools/base/bazel
chmod u+x ./bazel
./bazel verion
./bazel build //tools/adt/idea/android:artifacts
🤣🤣🤣刚开始又挂了,是因为tools/vendor/google3/bazel 是内部使用的,我们没有,官方也做了处理,我们注掉就可以,不影响构建。 文件就在toplevel.WORKSPACE。
修改内容如下:
继续 ./bazel build //tools/adt/idea/android:artifacts。
又挂了
缺少了BUILD文件 这个需要我们配置BUIlD。内容如下:
package(default_visibility = ["//visibility:public"])
java_import(
name = "studio-sdk",
jars = glob(["AI-211/iehshx/lib/*.jar","AI-211/iehshx/plugins/java/lib/*.jar"],
["AI-211/iehshx/lib/annotations-java5.jar"]),
)
java_import(
name = "studio-sdk-plugin-Groovy",
jars = glob(["AI-211/iehshx/plugins/Groovy/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-Kotlin",
jars = glob(["AI-211/iehshx/plugins/Kotlin/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-git4idea",
jars = glob(["AI-211/iehshx/plugins/git4idea/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-webp",
jars = glob(["AI-211/iehshx/plugins/webp/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-junit",
jars = glob(["AI-211/iehshx/plugins/junit/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-properties",
jars = glob(["AI-211/iehshx/plugins/properties/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-gradle",
jars = glob(["AI-211/iehshx/plugins/gradle/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-gradle-java",
jars = glob(["AI-211/iehshx/plugins/gradle-java/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-platform-images",
jars = glob(["AI-211/iehshx/plugins/platform-images/lib/*.jar"]),
)
java_import(
name = "studio-sdk-plugin-IntelliLang",
jars = glob(["AI-211/iehshx/plugins/IntelliLang/lib/*.jar"]),
)
继续... 挂
这是少配置了ndk的环境,需要配置下, 把ndk放在/Volumes/android_studio/android-studio-master/prebuilts/studio/sdk/darwin/ndk/。 默认使用的是20.1.5948944,推荐我们使用默认版本,在 /tools/base/bazl/repositories.bzl中配置ndk目录。
继续...
挂
这是因为缺少jvmti.h头文件,我们把他下载到 tools/vendor/google/android-ndk/includes目录下。
curl https://android.googlesource.com/platform/art/+/master/openjdkjvmti/include/jvmti.h\?format\=TEXT | base64 -d >jvmti.h
创建BUILD: tools/vendor/google/android-ndk/BUILD文件 内容如下:
package(default_visibility = ["//visibility:public"])
cc_library(
name = "jvmti",
includes = ["includes"],
)
继续build...
挂:
缺少android.jar 我们补充到prebuilts/studio/sdk:darwin/sdk 把platfroms拷贝进来,或者编辑指定目录
prebuilts/studio/sdk/BUILD
这里我就选择了拷贝进来
这样环境就齐全了。
4.运行
右上角下拉框选择AndroidStudio,点击哪个有点绿的播放按钮。开始~
成功~~~
附上已经编译好的:
链接: pan.baidu.com/s/1Na_Ws7yp…
提取码: r9yx
欢迎大家一起讨论