웹rtc AppRTCMobie 프로젝트의 libjingle 분석peerconnection_so.so 동적 링크 라이브러리의 컴파일 프로세스 - 제1편

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 파일의 libjinglepeerconnection_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 역시 정적 라이브러리
그러면 우리는 하나하나의 정적 라이브러리로부터 분석을 간소화할 수 있다

좋은 웹페이지 즐겨찾기