6

Im Angesichts dieses Problems, das scheint nicht imstande zu lösen. Hier ist ein Szenario:Gradle Abhängigkeit für bestimmte Architektur mit ABI Splits

Im Gebäude apk, die Gradle Abhängigkeit verwendet und diese Abhängigkeit ist Architektur spezifische so für apk für x86 brauche ich andere Abhängigkeit und für Arm anders als.

Ich löste es mit Produkt-Varianten:

productFlavors { 

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

} 

So dann definiert i Abhängigkeit wie folgt aus:

develCompile 'dependency_for_arm' 
develx86Compile 'dependency_for_x86' 

Das funktioniert gut. Aber vor kurzem musste ich meiner Anwendung eine Verwendung von rendscript hinzufügen. Ich habe es auf diese Weise:

renderscriptTargetApi 22 
renderscriptSupportModeEnabled true 

Und danach, wenn ich apk auf Google hochgeladen Spielen Sie es sagt, es ist apk mit Arm geeignet ist, x86. Ich weiß nicht, wie das möglich ist. Wie Sie denken können, wird es auf dem Gerät mit unterschiedlicher CPU abstürzen (wenn ich apk für Arm erzeugt habe und Benutzer es auf x86-App ausführen wird, stürzt ab).

So decited i ABI verwenden spaltet:

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 
    } 

Aber jetzt, wenn ich erzeugt apk-Dateien zu sehen, meine Abhängigkeit, die ist Geschmack spezifische nicht in apk und apk enthalten wird abstürzen, wenn ich Abschnitt öffnen welches API von dieser Abhängigkeit verwendet.

Weiß jemand, wie man dieses Problem löst? Oder jemand weiß, warum Google Play sagt, dass apk für beide Architekturen ist, wenn ich rigscript einschließe? (Ohne es funktioniert es richtig, aber ich brauche pigscript).

Vielen Dank für Ihre Zeit. Ich werde jede Hilfe schätzen.

+0

Glück gehabt? Bitte senden Sie die Antwort, wenn Sie es gefunden haben –

Antwort

0

Leider kann ich inline noch nicht kommentieren.

Was ist in der apk, vor allem in res/root/und lib /? Verwenden Sie auch Gradle-Plugin 2.1.0? (da Sie renderscriptTargetApi 22 verwenden), haben Sie Build-Tools 23.0.3 ausprobiert?

2

Wenn Sie in Ihrem APK unter lib Ordner schauen, sollten Sie sehen, dass der pigscript-Unterstützungsmodus libs für andere Architekturen als die, die Sie unterstützen, hinzugefügt hat.

Sie können Ihre frühere Konfiguration mit ABI-spezifischen Aromen beibehalten. Aber um zu gewährleisten, dass keine Libs für andere Architekturen enthalten sind, versuchen abiFilters auf Ihre Aromen hinzufügen:

productFlavors { 

    dev { ... ndk.abiFilters 'armeabi-v7a' } 
    develx86 { ... ndk.abiFilters 'x86' } 
    production { ... ndk.abiFilters 'armeabi-v7a' } 
    productionx86 { ... ndk.abiFilters 'x86' } 

} 
+0

Danke Mann, ich werde versuchen, Sie wissen zu lassen. – Sajmon

Verwandte Themen