64-битное требование RenderScript и PlayStore - PullRequest
6 голосов
/ 29 мая 2019

ОБНОВЛЕНИЕ: ОК, так что я рассмотрел это немного дальше.Удалось использовать bundletool, чтобы попробовать и протестировать различные apks, и обнаружил следующее:

"Пакет приложений содержит 32-битный файл битового кода RenderScript (.bc), который отключает 64-битную поддержку в Android."

Кто-нибудь знает, как я могу это исправить?Renderscript является довольно важной частью проекта.

Я пытаюсь сделать мое приложение 64-битным совместимым с новым требованием PlayStore.Мы используем RenderScript в приложении, поэтому мне было интересно, не вызовет ли это проблемы?И как можно решить эти проблемы?Renderscript - это очень крошечный скрипт, который просто выводит растровое изображение с зелеными или красными участками в зависимости от ввода.

#pragma version(1)
#pragma rs java_package_name(za.co.overtake)

int*reds;
int*greens;
int*blues;
int imgWidth;

uchar4 RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) {
   bool colourme = false;

   for(int col = 0; col < imgWidth; col++){

      const int red = reds[col];
      const int green = greens[col];
      const int blue = blues[col];

      if (in.r == red && in.g == green && in.b == blue){
        colourme = true;
       }
   }
   if (colourme) {
      // Cannot increase red amount much as it will cause issues when capturing the image in 565
      // format.
      in.r = 100;
      in.g = 10;
      in.b = 10;
      in.a = 100;
   } else if (in.a > 200) {
       in.r = 21;
       in.g = 63;
       in.b = 81;
       in.a = 100;
   } else {
      in.r = 0;
      in.g = 0;
      in.b = 0;
      in.a = 0;
   }
return in;
}

мы называем этот скрипт в java следующим образом:

  final RenderScript rs = RenderScript.create(this);

    final Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE,
            Allocation.USAGE_SCRIPT | Allocation.USAGE_SHARED);
    final Allocation output = Allocation.createTyped(rs, input.getType());
    final ScriptC_singlesource script = new ScriptC_singlesource(rs);

    Allocation red = Allocation.createSized(rs, Element.I32(rs), reds.length);
    red.copyFrom(reds);
    script.bind_reds(red);

    Allocation green = Allocation.createSized(rs, Element.I32(rs), greens.length);
    green.copyFrom(greens);
    script.bind_greens(green);

    Allocation blue = Allocation.createSized(rs, Element.I32(rs), blues.length);
    blue.copyFrom(blues);
    script.bind_blues(blue);

    script.set_imgWidth(noOfColours);
    script.forEach_root(input, output);
    output.copyTo(bitmap);

    RenderScript blur = RenderScript.create(this);
    ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(blur, Element.U8_4(blur));
    Allocation tmpIn = Allocation.createFromBitmap(blur, bitmap);
    Allocation tmpOut = Allocation.createFromBitmap(blur, bitmap);
    theIntrinsic.setRadius(4.0f);
    theIntrinsic.setInput(tmpIn);
    theIntrinsic.forEach(tmpOut);
    tmpOut.copyTo(bitmap);

В документации Android Developer говорится, что использование любого кода C или C ++ может сделать ваше приложение несовместимым.Но я не смог найти решение специально для RenderScript.

1 Ответ

3 голосов
/ 06 июня 2019

ОК, получается, что мне пришлось сделать две вещи:

  1. Использовать более свежую версию Renderscript.Я выбрал таргетинг на 22 и установил для renderscriptSupportModeEnabled значение true.ТАКЖЕ, должен был убедиться, что я использовал android.support.v8.renderscript.RenderScript, а не android.Renderscript.

  2. Вернуть AndroidX.Это была миссия!Пришлось вывезти androidX, так как по какой-то причине он просто отказался играть с Renderscript.Например, он завис бы на Android5 и просто отказывался быть 64-битным совместимым.

Надеюсь, это кому-нибудь поможет!

O, и как последний лакомый кусочек: вы можете проверить, совместим ли ваш пакет с 64-битной совместимостью, используя bundletool.Я нашел этот сайт чрезвычайно полезным: https://www.raywenderlich.com/9043-android-app-bundles-getting-started

- он скажет вам, если он не может построить 64-битные apks.

...