6

私は解決できないと思われるこの問題に直面しています。シナリオは次のとおりです。

gradle依存関係を使用するapkを構築していますが、この依存関係はアーキテクチャ固有であるため、x86のapkには異なる依存関係が必要であり、armにも異なる依存関係が必要です。

製品のフレーバーで解決しました:

productFlavors {

   dev { ... }
   develx86 { ... }
   production { ... }
   productionx86 { ... }

}

それで、私は次のように依存関係を定義しました:

develCompile 'dependency_for_arm'
develx86Compile 'dependency_for_x86'

これはうまくいきます。しかし最近、アプリケーションに renderscript の使用法を追加する必要がありました。私はこのようにしました:

renderscriptTargetApi 22
renderscriptSupportModeEnabled true

この後、Google Play に apk をアップロードすると、apk は x86 のアームに適していると表示されます。これがどのように可能かわかりません。ご想像のとおり、異なる CPU を搭載したデバイスでクラッシュすると考えられます (arm 用の apk を生成し、ユーザーが x86 アプリでそれを実行すると、クラッシュします)。

だから私はABI分割を使用することに決めました:

splits {
        abi {
            enable true
            reset()
            include 'armeabi', 'x86'
            universalApk false
        }
    }

//Ensures architecture specific APKs have a higher version code
//(otherwise an x86 build would end up using the arm build, which x86 devices can run)
ext.versionCodes = [armeabi:0, x86:1]

import com.android.build.OutputFile

android.applicationVariants.all { variant ->
    // assign different version code for each output
    variant.outputs.each { output ->
        int abiVersionCode = project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) ?: 0
        output.versionCodeOverride = android.defaultConfig.versionCode + abiVersionCode
    }

しかし、生成されたapkファイルを見ると、フレーバー固有の依存関係がapkに含まれておらず、この依​​存関係からAPIを使用するセクションを開くとapkがクラッシュします。

誰かがこの問題を解決する方法を知っていますか? または、レンダースクリプトを含めたときにGoogle Playがapkが両方のアーキテクチャ用であると言う理由を誰かが知っていますか? (それがなくても正しく動作しますが、renderscript が必要です)。

お時間をいただきありがとうございます。どんな助けにも感謝します。

4

2 に答える 2