2016-12-21 13 views
3

私のアンドロイドプロジェクトには多くの共有ライブラリ(*。so)があります。それらのうちのいくつかは他人によって作られたもので、私はソースコードを持っていません。NDKのバージョンをアップグレードすると、すべてのライブラリを再構築する必要がありますか?

私はNDK r10eを使用しています。NDKバージョンをr13bにアップグレードします。

メイクファイルを変更しない場合は、共有ライブラリの一部をNDK-r13bでビルドするだけで、NDK-r10eでビルドしたものは変更されません。アンドロイドプログラムの機能に問題はありますか?

NDK-r10e use clang-3.5 
NDK-r13b use clang-3.8 

次の構成は同じです:

APP_ABI := armeabi-v7a 
APP_PLATFORM := android-19 
APP_STL := gnustl_shared 
+0

一般的な経験則として、アプリケーションのすべての部分(ライブラリを含む)は、まったく同じコンパイラバージョンで構築する必要があります。 –

答えて

3

それは一般的に良いアイデアですが、必ずしも必要ではありません。依存関係のソースを持たない場合は、互換境界を越えて移動することは困難ですが、互換性を損なうことなくバグを修正することはできないため、NDKバージョン間の互換性を維持しようとします。

そうすることは、ほとんどの驚きがあるので、一般的には良いアイデアです。私たちはNDKのバージョンをそれ自身に対してテストするだけです。また、互換性ブレークのときに何がうまくいかなかったのかを判断しようと多くの時間を節約できます。

間違って行くことができ、物事のカップルの例(決して完全なリスト):NDKの公開APIの表面が時間とともに変化している

。 APIはまだデバイス上に存在しているため、従来のアプリケーションは引き続き動作しますが、APIがNDKから削除され、新しいアプリケーションで使用されないことがあります(これにはいくつかの理由があります)。これらの場合、削除されたシンボルを使用する古いライブラリは、それらのAPIを持たないNDKを使用して新しいライブラリ/実行可能ファイルとリンクすることはできません(これは実際にリンカの動作に依存します;静的ライブラリの場合、共有ライブラリの場合はarm64しかないと思います)。

特にr10からのアップグレードでは、libC++にABIブレーク(システムとの厄介なやり取りを避けるために必要)がありました。つまり、r10で構築されたライブラリとr11 +で構築されたライブラリは互換性がありません。あなたはgnustlを使用しているので、問題はあなたに影響することはありませんが、ここに着く他の人には言及する価値があります。

+0

ありがとうございました! –

関連する問題