2014-02-17 91 views
3

我正在構建一個Renderscript處理過程,對於我來說,我無法通過Gradle使它在薑餅上工作。Android Renderscript與Gradle

該處理使用Intrinsics和定製的內核。

使用renderscriptTargetApi 18renderscriptSupportMode true與最新版本的工具buildToolsVersion "19.0.1"classpath 'com.android.tools.build:gradle:0.8.+'和gradle這個1.10它編譯罰款,並在其上運行ICS +設備很好,但它崩潰的薑餅以下堆棧跟蹤:

Caused by: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null 
     at android.support.v8.renderscript.RenderScript.create(RenderScript.java:945) 
     at android.support.v8.renderscript.RenderScript.create(RenderScript.java:982) 
     at android.support.v8.renderscript.RenderScript.create(RenderScript.java:968) 

我以前也嘗試過用各種以下版本:

buildToolsVersion:18.1.1,18.1

classpath:0.7。+,0.7.1

其中一些需要gradle 1.9來運行,我改變並運行並崩潰。

我也試過,包括我build.gradle

dependencies { 
    compile files('libs/renderscript-v8.jar') 
} 

android { 

    tasks.withType(com.android.build.gradle.tasks.PackageApplication) { 
     pkgTask -> pkgTask.jniFolders = new HashSet<File>(); 
      pkgTask.jniFolders.add(new File(projectDir, 'libs')); 
    } 
} 

,並添加所有相關的二進制文件以下行按這個問題How to use the Renderscript Support Library with Gradle有時(取決於哪個版本我想)彙編和崩潰用同樣的錯誤,或者不因爲對的renderScript V8包(multiple dex files define android/support/v8/renderscript/Allocations

方法名稱重複申報只是參考的編譯是我模塊的build.gradle:

apply plugin: 'android' 

android { 
    compileSdkVersion 18 
    buildToolsVersion "19.0.1" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 18 
     versionCode 1 
     versionName "1.0" 
     renderscriptTargetApi 18 
     renderscriptSupportMode true 
    } 

    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
} 

,這就是頂級的build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.8.+' 
    } 
} 

allprojects { 
    repositories { 
     mavenCentral() 
    } 
} 

這樣的問題:

什麼是正確的組合,使其成功地編譯和兩個ICS +和薑餅運行?

回答

2

我不認爲這是一個Gradle錯誤 - 我認爲這是一個已知的薑餅和下面的動態鏈接問題。嘗試將以下內容添加到您的活動中:

static { 
    System.loadLibrary("RSSupport"); 
    System.loadLibrary("rsjni"); 
} 

您可能需要重新排序這些,我忘記了鏈接問題的確切性質。

+0

我想你必須先加載rsjni,然後加載RSSupport。我們可以將它們壓縮到單個庫中,以簡化在GB上的構建/運行。 –

+0

感謝球員,但仍然無法正常工作。獲取'UnsatisfiedLinkError:無法加載rsjni:findLibrary返回null或'RSSupport',具體取決於我先放哪個。額外信息:我在Nexus 5上試了一下,它運行良好,這意味着它找到了庫,沒有問題。我也確保解壓縮.apk和雙重檢查,* .so肯定在那裏。還有什麼想法? – Budius

+0

我仍在調查用戶,只是發現我在這裏的GB設備是Qualcomm MSM7227,它是ARMv6處理器,正如您當然知道的那樣,我們只有armeabi-v7a,mips或x86庫。任何機會ARMv6將被支持? – Budius

1

我在使用Build-tools 21.1.0時遇到了Android-Studio和Renderscript支持的相同問題。 這是我在構建系統發現changelog線26-32:

  • Renamed a few properties to make things more consistent.
    • BuildType.runProguard -> minifyEnabled
    • BuildType.zipAlign -> zipAlignEnabled
    • BuildType.jniDebugBuild -> jniDebuggable
    • BuildType.renderscriptDebug -> renderscriptDebuggable
    • ProductFlavor.renderscriptSupportMode -> renderscriptSupportModeEnabled
    • ProductFlavor.renderscriptNdkMode -> renderscriptNdkModeEnabled

所以你看,他們已經改變屬性的名稱。 我剛剛更新的build.gradle使用:

renderscriptSupportModeEnabled true

現在庫添加到項目中,你並不需要手動將其添加到您的lib文件夾。

希望這可以幫助某人並節省一些時間。