2016-11-01 2 views
8

ネイティブコードでsigsegv 11を取得していますが、何が間違っているかを理解するためにストライピングを避ける必要があります。アプリはライブラリ(aar)を使用しています。私は 'cmd-strip'でaarを取り除くのを避けることができましたhackしかし、apkでは、.soの版はとにかく使用されているので、アプリはシンボルを取り除くので、おそらくtransformNative_libsWithStripDebugSymbolForDebugのgradleタスクです。それを避けるための変更?アンドロイドアプリのネイティブコードシンボルの剥奪を避ける方法

PS。だから、similar questionが見つかりましたが、少し違っています。

+0

IMOの場合、APKを使用して剥奪されていないバイナリを実際に配送する必要がある場合は、2度考える必要があります。短所は、共有ライブラリのサイズが非常に大きくなり、リバースエンジニアリング保護が不十分である'obj/local /'の下を見てください。詳細は、[here](http://stackoverflow.com/a/40278937/2878070)を参照してください。 – Sergio

+0

配布するのではなく、問題を修正するだけです – 4ntoine

+0

もしそうなら、 'ndk-build'は、取り除かれていないファイルを、すでに取り除かれたファイルとともに作成します。私の前のコメントを見てください。 – Sergio

答えて

12

は、ちょうどあなたのbuild.gradle

に以下の行を追加します。
packagingOptions{ 
    doNotStrip "*/armeabi/*.so" 
    doNotStrip "*/armeabi-v7a/*.so" 
    doNotStrip "*/x86/*.so" 
} 
+1

あなたはこれを行うべきではありません。それはあなたのAPKを巨大にし、それは不要です。あなたのスタックトレースを象徴する方法について私の答えを見てください。 –

+0

これは必要なのは、一部の.soファイルが暗号化されていて、取り除かれた場合に破損するためです。 –

+0

fwiw、私はAndroid Studio 3.1/3.2とgradle 4.4とまったく同じ問題を抱えています。それはもはやデバッグシンボルを取り除くことはなく、強制的にストリッピングする方法を見つけることはできません! LOLではない。 – 3c71

5

幸運なことに、実際にシンボルをアプリに保存する必要はありません。 NDK船はツールと呼ばれるndk-stackあなたのためのスタックトレースを象徴することができます(それはNDKのルートにあります):https://developer.android.com/ndk/guides/ndk-stack.html packagingOptionsで文書化されていない方法「doNotStrip」はあります

関連する問題