编译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
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 同样是一个静态库
那么我们就可以进行简化,从一个一个的静态库开始进行分析