---
title: 编译Conscrypt
description: "1. 进入服务器“/home”目录，下载Conscrypt源码。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengwebs/ecosystemEnable/DependencyLibrary/kunpengconscryptopenjdkuber_02_0010.html
sourcePath: /source/zh/kunpengwebs/ecosystemEnable/DependencyLibrary/kunpengconscryptopenjdkuber_02_0010.html
indexId: cf7e9296fa7d8b769e1ea8995f295cab75bba5db9d35c933cf50c228c9c0c91597
---
# 编译Conscrypt

1. 进入服务器“/home”目录，下载Conscrypt源码。
  1 2 cd /home wget https://github.com/google/conscrypt/archive/2.1.0.zip --no-check-certificate

2. 解压Conscrypt源码包。
  1 unzip 2.1.0.zip

3. 将“conscrypt-2.1.0”更名为“conscrypt”。
  1 mv conscrypt-2.1.0 conscrypt

4. 拉取Conscrypt依赖包。
  该步骤会自动下载gradle-4.8.1-all，Gradle的默认的下载路径是“/root/.gradle/wrapper/dists”。

  1 2 cd /home/conscrypt ./gradlew

  若使用代理，执行如下命令。请根据实际的代理环境配置代理的主机名、端口号、用户名和密码。

```
./gradlew -Dhttp.proxyHost=proxysg.huawei.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxysg.huawei.com -Dhttps.proxyPort=8080  -Dhttps.proxyUser= -Dhttps.proxyPassword=  -Dhttp.proxyUser= -Dhttp.proxyPassword=
```


  如果执行./gradlew时，报错如下： 通过如下方法解决： 进入“/root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2”目录。 cd /root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2 注意：6fmj4nezasjg1b7kkmy10xgo2目录有可能不同，根据实际情况修改。 下载Gradle源码。 1 wget https://services.gradle.org/distributions/gradle-4.8.1-all.zip --no-check-certificate 解压缩gradle-4.8.1-all.zip文件。 1 unzip gradle-4.8.1-all.zip 进入“/home/conscrypt”目录。 1 cd /home/conscrypt 重新执行编译（代理主机、端口、用户和密码，请根据实际情况填写）。 ./gradlew -Dhttp.proxyHost=proxysg.huawei.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxysg.huawei.com -Dhttps.proxyPort=8080 -Dhttps.proxyUser= -Dhttps.proxyPassword= -Dhttp.proxyUser= -Dhttp.proxyPassword=

5. 将9中编译成功的gradle-platform-native-4.8.1.jar包，替换到本地仓库目录下。
  1 cp /home/gradle/subprojects/platform-native/build/libs/gradle-platform-native-4.8.1.jar /root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2/gradle-4.8.1/lib/plugins

6. 重启服务器。Gradle编译完成后，使用的依然是旧的Gradle，重启服务器后，才能使编译后的Gradle生效。
  1 reboot

7. 定位到“conscrypt”目录并删除子模块openjdk-integ-tests。
  1 2 cd /home/conscrypt rm -rf openjdk-integ-tests

8. 定位到“openjdk”目录。
  1 cd openjdk

9. 修改“openjdk”目录下的build.gradle文件。

  a. 打开build.gradle文件。
    1 vim build.gradle

  b. 按“i”进入编辑模式，将原有编译64位文件后缀增加“aarch64”。

    - 在第12行添加代码。

```
arm64 = 'aarch64'
```


    - 修改第21行。

```
nativeClassifier64Bit = classifierFor(osName, arm64)
```


  c. 在第291行增加platform配置。

```
linux_aarch64 {
architecture "aarch64"
operatingSystem "linux"
}
```


  d. 将构建jni-library时64位架构改为linux_aarch64。

    - 注释第304行，修改第305行arch64Name为"linux_aarch64"。

```
//if (build32Bit) { targetPlatform arch32Name }
if (build64Bit) { targetPlatform "linux_aarch64" }
```


    - 修改第326行为"aarch64"。
  e. Clang或GCC编译时args增加指定头文件地址。
    修改第339和342行，与系统GCC路径一致。

    CentOS修改如下：

```
"-I$jniSourceDir/main/include",
"-I$jniSourceDir/unbundled/include",
"-I/usr/include/c++/4.8.2",
"-I/usr/include/c++/4.8.2/aarch64-redhat-linux",
```


    openEuler修改如下：

```
"-I$jniSourceDir/main/include",
"-I$jniSourceDir/unbundled/include",
"-I/usr/include/c++/7.3.0",
"-I/usr/include/c++/7.3.0/aarch64-linux-gnu",
```


  f. 修改生成库信息代码。

    - 修改第419行到第428行。

```
def archName = binary.targetPlatform.architecture.name
def archNameR = archName
if(archName == 'aarch64'){
archNameR = 'aarch_64'
}
archName = archName.replaceAll('-','_')
def classifier = classifierFor(osName, archName)
def classifierR = classifierFor(osName,archNameR)
def sourceSetName = sourceSetName("$classifier")
def source = binary.sharedLibraryFile
```


    - 修改第435行和第437行内容为classifierR。
  g. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
10. 返回到上一级目录，修改“conscrypt”目录下的build.gradle文件。

  a. 打开build.gradle文件。
    1 vim build.gradle

  b. 按“i”进入编辑模式，修改第39行，并增加40行～43行。

```
gcc(Gcc){
target("linux_aarch64") {
cppCompiler.executable = "/usr/bin/gcc"
}
}
```


  c. 在第160～162行增加代码。

```
dependencies {
errorprone("com.google.errorprone:error_prone_core:2.3.3")
}
```


  d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
11. 配置Gradle网络代理。

  a. 创建gradle.properties文件。
    1 touch gradle.properties

  b. 添加如下内容后，保存并退出文件。请根据实际的代理环境配置代理的主机名、端口号、用户名和密码。

```
org.gradle.jvmargs=-Xmx2500m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
systemProp.http.auth.ntlm.domain=CHINA
systemProp.http.proxyHost=
proxysg.huawei.com
systemProp.http.proxyUser=
实际代理用户名
systemProp.http.proxyPassword=
实际代理用户密码
systemProp.http.proxyPort=
8080
systemProp.http.nonProxyHosts=*.huawei.com|localhost|127.0.0.1
systemProp.https.proxyHost=
proxysg.huawei.com
systemProp.https.proxyUser=
实际代理用户名
systemProp.https.proxyPassword=
实际代理用户密码
systemProp.https.proxyPort=
8080
systemProp.https.nonProxyHosts=*.huawei.com|localhost|127.0.0.1
systemProp.javax.net.ssl.trustStore=
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64/jre/lib/security/cacerts
systemProp.javax.net.ssl.trustStorePassword=changeit
```


12. 构建Conscrypt。
  1 2 cd /home/conscrypt ./gradlew clean build --stacktrace -x :conscrypt-openjdk:linux_aarch64Test -Dorg.conscrypt.openjdk.buildUberJar=true

13. 进入“openjdk-uber/build/libs”目录。
  1 cd openjdk-uber/build/libs

14. 解压conscrypt-openjdk-uber-2.1.0.jar包。
  1 jar xvf conscrypt-openjdk-uber-2.1.0.jar

15. 将“/home/conscrypt/openjdk/build/linux_aarch_64/native-resources/META-INF/native\”目录下的libconscrypt_openjdk_jni-linux-aarch_64.so文件放入conscrypt-open-uber-2.1.0.jar包中的“META-INF/native”目录下。
  1 cp /home/conscrypt/openjdk/build/linux_aarch_64/native-resources/META-INF/native/libconscrypt_openjdk_jni-linux-aarch_64.so META-INF/native

16. 打包JAR，移植结束。
  1 jar cvf conscrypt-openjdk-uber-2.1.0.jar META-INF/ org
