分析webrtc AppRTCMobie 工程中的libjingle_peerconnection_so.so动态链接库的编译流程 --- 第一篇

编译AppRTCMobile的ninja 命令如

ninja -C out/Debug AppRTCMobile

首先是src目录下的BUILD.gn是整个工程的编译根目录.

    if (rtc_build_examples) {
      deps += [ "examples" ]
    }

上面的代码告诉我们需要去examples目录下的target.

if (is_android) {
  rtc_android_apk("AppRTCMobile") {
    testonly = true
    apk_name = "AppRTCMobile"`
    android_manifest = "androidapp/AndroidManifest.xml"

    deps = [
      ":AppRTCMobile_javalib",
      ":AppRTCMobile_resources",
      "../rtc_base:base_java",
      "//base:base_java",
    ]

    shared_libraries = [ "../sdk/android:libjingle_peerconnection_so" ]
  }

哈哈,看到没,现在我们找到了AppRTCMobile这个工程,由于我们主要关注的是理顺编译生成libjingle_peerconnection_so的依赖关系.

因此我们需要跟踪的是../sdk/android/BUILD.gn文件中的libjingle_peerconnection_so target.

这个target会告诉我们如何去生成libjingle_peerconnection_so.so

sdk/android/BUILD.gn

  rtc_shared_library("libjingle_peerconnection_so") {
    sources = [
      "src/jni/jni_onload.cc",
    ]

    suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
    configs += [ "//build/config/android:hide_all_but_jni" ]

    deps = [
      ":libjingle_peerconnection_jni ",
      ":libjingle_peerconnection_metrics_default_jni",
      "../../pc:libjingle_peerconnection",
      "../../rtc_base:rtc_base",
    ]
    output_extension = "so"
  }

这里我们其实可以简化命令,直接通过命令来生成so动态库:

ninja -C out/Debug sdk/android:libjingle_peerconnection_so

libjingle_peerconnection_jni 是一个静态库.

libjingle_peerconnection_metrics_default_jni 也是一个静态库

libjingle_peerconnection 是一个source set

rtc_base 同样是一个静态库

那么我们就可以进行简化,从一个一个的静态库开始进行分析

你可能感兴趣的:(webrtc代码研究,音视频开发专栏)