私はQtの5を使用してAPKを構築するためにadd_qt_android_apkを使用します。QTAV_LIBRARIESが前に定義されてadd_qt_android_apkストリップ共有ライブラリのデバッグシンボル
add_qt_android_apk(my_app_apk gustavsfairyland NAME "@string/ApplicationName"
DEPENDS
${QTAV_LIBRARIES}
)
:
set(QTAV_LIBRARIES
"${QTAV_FFMPEG_LIB_DIR}/libavcodec.so"
"${QTAV_FFMPEG_LIB_DIR}/libavfilter.so"
"${QTAV_FFMPEG_LIB_DIR}/libavformat.so"
"${QTAV_FFMPEG_LIB_DIR}/libavresample.so"
"${QTAV_FFMPEG_LIB_DIR}/libavutil.so"
"${QTAV_FFMPEG_LIB_DIR}/libswresample.so"
"${QTAV_FFMPEG_LIB_DIR}/libswscale.so"
"${CMAKE_BINARY_DIR}/buildqtav/${QTAV_LIB_DIR}/libQtAV.so"
"${CMAKE_BINARY_DIR}/buildqtav/${QTAV_LIB_DIR}/libQtAVWidgets.so"
)
私は(デバッグモードを使用してlibQtAV.soを構築user.conf):
nmを使用してシンボルを確認すると、多くの記号が表示されます。
nm ../buildqtav/lib_android_arm/libQtAV.so
00062884 t $a
00061d88 t $a
0005f9d0 t $a
...
しかし、私はlibsディレクトリにコピーされたライブラリにNMを使用するとき、私は何を取得:
bash-4.3$ nm armeabi-v7a/libQtAV.so
nm: armeabi-v7a/libQtAV.so: no symbols
はデバッグシンボルを削除add_qt_android_apkていますか?
if(EXTRA_LIBS)
set(EXTRA_LIBS "${EXTRA_LIBS},${LIB}")
else()
set(EXTRA_LIBS "${LIB}")
endif()
endforeach()
set(QT_ANDROID_APP_EXTRA_LIBS "\"android-extra-libs\": \"${EXTRA_LIBS}\",")
ので、それは指定された外部.soのパスを使用しています。
はQtのAPKのためのcmakeのモジュールでは、私はこれが見つかりました。それはCMake変数QT_ANDROID_APP_EXTRA_LIBSのqtdeploy.jsonに追加されます。どのエントリ「アンドロイド補足LIBS」でbuildandroidarmeabi-v7a/buildqtav/lib_android_arm/libQtAV.so
ありますので、それは実際に正しいエントリを持っていますが、何とかデバッグシンボルを取り除き を。 "libs"フォルダ内のライブラリは1.1MBのサイズを持ち、 "lib_android_arm"内の元のライブラリは1.6MBのサイズです。
私は、現時点で印刷しNDK-スタックを使用してルーチンを見てみたいと思います:
Stack frame #05 pc 000b714f /data/app/org.qtproject.gustavsfairyland-1/lib/arm/libQtAV.so: Routine ??
編集: 私は、次のCMakeのモジュールを使用します。https://github.com/LaurentGomila/qt-android-cmake
EDIT2: それがどのように見えますandroiddeployqtは常にライブラリのシンボルを削除します。 http://code.qt.io/cgit/qt/qttools.git/tree/src/androiddeployqt/main.cpp
stripLibraries()は、アプリケーションをビルドするときに常に呼び出されます。