Dagger2 编译记录

编译目标

cc 使用的是 dagger2.38.1 版本,这次需要修改这个版本,所以编译的是这个版本。

编译环境

1. 区分大小写的磁盘环境

需要这个的原因是,dagger2 使用 bazel 构建,bazel 在每个构建分区上都存在一个 BUILD 文件,用来描述如何构建,其中一个分区是使用 gradle 构建的,gradle 会再当前目录构建一个 build 文件夹用来存放构建输出文件。如果磁盘不区分大小写,这两个东西就会冲突,导致 BUILD 这个文件消失了

对于 window

可以参考这个设置大小写

直接使用 docker 编译也可以,我做好了编译镜像

对于 mac

对于 mac 来说,默认也不是区分大小写的,可以使用磁盘分区工具创建一个 dmg 存放代码,用来编译 dagger,按一下截图操作即可

1. 新建文件

大小建议设置为 2G

2. 放入项目

双击加载磁盘

放入项目

2. 安装编译环境

bazel

官方安装文档
建议安装的是 Bazelisk
bazelisk 带了版本管理功能,能自动根据不同项目使用,不同的项目使用的版本是不同,dagger2.38.1 使用的是3.7.1

brew install bazelisk

idea bazel 插件

plugin 市场安装 bazel 即可,安装后使用 bazel 模式重新打开项目就能同步

python

可以是 python3 ,但是需要 python 命令,可以直接 ln -s python3 python

g++

brew install g++

zip

bazel 需要调用 unzip 命令

jdk8

我编译的版本是 2.38.1 使用 jdk8 编译,不要尝试 11,我试过了,不行

Android 环境

  1. ANDROID_HOME 需要定义
  2. ANDROID_NDK_HOME 需要定义,指向 21.4.7075529 这个版本
  3. 需要安装 platforms;android-30 这个版本的 android sdk

如果不确定,可以直接通过 sdkmanager 安装

sdkmanager "ndk;21.4.7075529" "platforms;android-30" "build-tools;30.0.2"

如何找到需要的环境

1. 查看 CI 文件

CI 实际上能跑的东西,基本上包含了所有的环境

2. 查看 CONTRIBUTING.MD

这个文件包含了 Android 的环境

没有说明 ndk 环境,ndk是我编译不过之后加的

开始编译

1. 设置工作区间(使用bazelisk需要)

因为我使用的是 bazelisk 需要在项目中新建一个文件 .bazeliskrc 来告诉 bazelisk 我使用的是哪个版本

2. 使用脚本编译

dagger 在 uitl 文件夹中提供了丰富的脚本

install-local-snapshot.sh 这个用来本地测试,运行之后会在 mavenLocal(~/.m2) 编译出来一个版本,项目中增加 mavenLocal() 也就是这样就能直接使用了

publish-snapshot-on-commit.sh 这个脚本是发布到 nexus 仓库上

如果进行修改的话,一般都是发布到自己内部的仓库上,所以我们可以基于,publish-snapshot-on-commit.sh 这个脚本更改

新建一个文件 publish-to-my.sh,内容如下


set -eux

bash $(dirname $0)/deploy-all.sh \
  "deploy:deploy-file" \
  $1 \
  "-DrepositoryId=cc-nexus-release" \
  "-Durl=http://nexus.cc.163.com/repository/releases/" \
  "--settings=$(dirname $0)/settings.xml"

echo -e "Published maven snapshot"

新建 settings.xml

<settings>
    <servers>
        <server>
            <id>cc-nexus-snapshots</id>
            <username>${nexusUsername}</username>
            <password>${nexusPassword}</password>
        </server>
        <server>
            <id>cc-nexus-release</id>
            <username>${nexusUsername}</username>
            <password>${nexusPassword}</password>
        </server>
        <server>
            <id>sonatype-nexus-snapshots</id>
            <username>${env.CI_DEPLOY_USERNAME}</username>
            <password>${env.CI_DEPLOY_PASSWORD}</password>
        </server>
    </servers>
    <mirrors>
        <mirror>
            <id>cc-nexus</id>
            <mirrorOf>central</mirrorOf>
            <name>cc-nexus</name>
            <url>https://nexus.cc-mobile.cn/repository/maven-public/</url>
        </mirror>
        <mirror>
            <id>cc-nexus</id>
            <mirrorOf>google</mirrorOf>
            <name>cc-nexus</name>
            <url>https://nexus.cc-mobile.cn/repository/maven-public/</url>
        </mirror>
    </mirrors>
</settings>