2016-11-30 15 views
0

現在、SDKを構築しており、SDKのユーザーに.aarアーカイブを提供しています。RenderScript:aarに.soを提供しない

私は基本的にイメージをぼかす私のSDKのオプションの機能を持っています。 しかし、この機能では、共有ライブラリがあるために.aarアーカイブを大きくするためにrenderScriptを使用する必要があります。

./jni/armeabi-v7a: 
total 3752 
rw-rr- 1 cylix wheel 1,1M 29 nov 16:16 libblasV8.so 
rw-rr- 1 cylix wheel 746K 29 nov 16:16 libRSSupport.so 
rw-rr- 1 cylix wheel 46K 29 nov 16:16 librsjni.so 
./jni/mips: 
total 5224 
rw-rr- 1 cylix wheel 1,5M 29 nov 16:16 libblasV8.so 
rw-rr- 1 cylix wheel 1,0M 29 nov 16:16 libRSSupport.so 
rw-rr- 1 cylix wheel 70K 29 nov 16:16 librsjni.so 
./jni/x86: 
total 5344 
rw-rr- 1 cylix wheel 1,6M 29 nov 16:16 libblasV8.so 
rw-rr- 1 cylix wheel 958K 29 nov 16:16 libRSSupport.so 
rw-rr- 1 cylix wheel 54K 29 nov 16:16 librsjni.so 
./jni/arm64-v8a: 
total 1808 
rw-rr- 1 cylix wheel 843K 29 nov 16:16 libRSSupport.so 
rw-rr- 1 cylix wheel 60K 29 nov 16:16 librsjni.so 

しかし、私は、私はライブラリを削除し、.aarでそれらを提供しない場合は、ライブラリのクライアントはまだその側でのrenderScriptを有効にし、問題なく機能にアクセスできることに気づきました。 renderScriptが利用可能な場合

その後、私はちょうど私のコードをチェックインする必要があります。

try { 
     Class.forName("android.support.v8.renderscript.RenderScript"); 
    } catch (ClassNotFoundException e) { 
     //! renderScript not available 
    } 

しかし、ここでは私の問題です。私はまだ私のGradleファイルに置く必要がある :

renderscriptTargetApi 23 
renderscriptSupportModeEnabled true 

そうでない場合、プロジェクトはコンパイルできません。 しかし、これにより上記の.soファイルが自動的にインクルードされます。

これに対処する方法はありますか。レンダリング機能をコンパイルできますが、.soファイルをフィルタリングして.aarアーカイブ?

答えて

2

私はもっと良い解決策があると信じています。しかし、ここでは低い果物はcom.android.tools.build:gradle:2.2.0以上を使用することです。

dependencies { 
    classpath 'com.android.tools.build:gradle:2.2.1' 
    // ... 
} 

のGradleプラグインあなたがrenderscriptSupportModeBlasEnabled trueを指定しない限り、2.2.0+ libblasV8.soをバンドルしません。この方法で、あなたのAARファイルはおそらく50%の体重を減らします。

0

私は解決策を見つけました。おそらくクリーンなものではないかもしれないが、少なくともそれは機能する。

私は単純にレンダスクリプト-v8.jarを自分のコンピュータのアンドロイドSDKライブラリからコピーして、依存関係としてプロジェクトに入れました。

その後、私は

renderscriptTargetApi 23 
renderscriptSupportModeEnabled true 

その方法は、私がの.jarへの感謝をコンパイルすることができますし、私はGradleのビルドをしないので、私の.aarに重いの.soを持っていけないのrenderScriptのGradleのファイル構成を削除しましたそれらのいずれかが自動的に自動的に削除されます。

次に、私のSDKのユーザーは、レンダスクリプトを有効にするかどうかを選択できます。

+0

サポートライブラリフォールバックを必要としないデバイスでテストしているため、これは機能します。しかしこれは良い答えではありません。古いデバイスで実行すると、共有オブジェクトを探すときにコードがクラッシュするためです。 –

1

ミャオさんの答えは私のために働いたが、私はいくつかのアイデアを持っていた。

ぼかしが必要な場合は、support.v8をすべて避けて、ネイティブのRenderScript sdkを使用することができます。

あなたのminSdkVerisonとニーズによって異なります。 ScriptIntrinsicBlurが17で追加されました。またカスタム.rsカーネルを使用することもできます。それはScriptIntrinsicよりもパフォーマンスが劣りますが、古いバージョンをサポートできるようになります。