Ubuntu 1804 編譯 Android Cronet 時安裝依賴項

Android Cronet 需要在 linux 平臺下編譯,因爲部分工具只能在 Ubuntu 上執行(Chromium 項目大部分開發工作是在 Ubuntu 上完成的),因此優先選擇 Ubuntu 系統。

編譯 Cronet 庫需要安裝系統依賴以及安卓的特殊依賴,在 chromium 項目中都有專門的腳本去執行依賴的安裝,進入已下載好源碼的 chromium/src 目錄,執行如下腳本:

./build/install-build-deps.sh   // 安裝系統依賴

sudo update-java-alternatives -s java-1.8.0-openjdk-amd64  // 升級 java-jdk 到 1.8.0,如果未安裝 java-jdk,則需單獨安裝好

./build/install-build-deps-android.sh     // 安裝特殊的安卓依賴

沒有安裝安卓特殊依賴會出現如下錯誤, No such file or directory:

ninja: Entering directory `out/test-Cronet/'
[99/6835] ACTION //base:android_runtime_jni_headers__jni_Runnable(//build/toolchain/android:android_clang_arm)
FAILED: gen/base/android_runtime_jni_headers/base/jni/Runnable_jni.h 
python ../../base/android/jni_generator/jni_generator.py --jar_file ../../third_party/android_sdk/public/platforms/android-28/android.jar --input_file java/lang/Runnable.class --ptr_type=long --output_dir gen/base/android_runtime_jni_headers/base/jni --includes ../../../../../../../base/android/jni_generator/jni_generator_helper.h
Traceback (most recent call last):
  File "../../base/android/jni_generator/jni_generator.py", line 1628, in <module>
    sys.exit(main(sys.argv))
  File "../../base/android/jni_generator/jni_generator.py", line 1624, in main
    GenerateJNIHeader(input_file, output_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 1532, in GenerateJNIHeader
    jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 847, in CreateFromClass
    stderr=subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
[101/6835] CC obj/third_party/apache-portable-runtime/apr/rand.o
ninja: build stopped: subcommand failed.

其他錯誤

  • src/third_party/android_ndk/sources/cxx-stl/llvm-libc++/ 目錄被刪除
    問題發現:在精簡 chromium 倉庫源碼時,我刪除了該目錄,從下面的錯誤可以看到,
    有目標文件依賴該目下的庫,即 libandroid_support.a 和 libunwind.a 。
    解決辦法:從完整且版本匹配的 chromium 倉庫拷貝該目錄到對應位置。
python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="../../third_party/android_ndk/toolchains/arm-
linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf" --
nm="../../third_party/android_ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-
androideabi-nm" --strip=../../buildtools/third_party/eu-strip/bin/eu-strip --sofile="./lib.unstripped/libnetty-
tcnative.so" --tocfile="./libnetty-tcnative.so.TOC" --output="./libnetty-tcnative.so" -- ../../third_party/llvm-
build/Release+Asserts/bin/clang++ -shared -Wl,--fatal-warnings -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-
z,now -Wl,-z,defs -Wl,--as-needed --gcc-toolchain=../../third_party/android_ndk/toolchains/arm-linux-
androideabi-4.9/prebuilt/linux-x86_64 -fuse-ld=lld -Wl,--color-diagnostics -Wl,--no-rosegment -Wl,--exclude-
libs=libgcc.a -Wl,--exclude-libs=libvpx_assembly_arm.a --target=arm-linux-androideabi -Werror --
sysroot=../../third_party/android_ndk/platforms/android-16/arch-arm -nostdlib -Wl,--warn-shared-textrel -
L../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a -o "./lib.unstripped/libnetty-
tcnative.so" -Wl,-soname="libnetty-tcnative.so" @"./libnetty-tcnative.so.rsp"
ld.lld: error: unable to find library -landroid_support
ld.lld: error: unable to find library -lunwind

FAILED: android_clang_x64/gen/base/android_runtime_jni_headers/base/jni/Runnable_jni.h

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章