编译renderscript源代码

时间:2014-03-27 10:43:13

标签: java android git renderscript

正如我在上一篇文章(Compiling renderscript code at runtime)中提到的,我尝试在运行时编译renderscript代码。 正如Kietz所建议的,我需要改变所有生成的java类派生的ScriptC类。 使我自己的扩展脚本的类失败,因为我无法调用此超类的构造函数。

这段代码

public class RuntimeScriptC extends Script {
       private static final String TAG = "RuntimeScriptC";

   protected RuntimeScriptC(int id, RenderScript rs) {            
       super(id, rs);       

   }

给了我这个错误:

The constructor Script(int, RenderScript) is undefined

我的下一个想法是将我自己的类添加到renderscript源代码并将其编译为create 一个新的.jar。我在git上找到了源代码,但不知道如何只构建renderscript包。

编辑: 我刚刚发现Script.java的构造函数是包私有的。这就是为什么我无法访问自己班级中的构造函数的原因。如果我可以自己编译renderscript源代码,我可以将自己的类放入包中并访问它。

新问题:我在哪里可以找到renderscript来源以及如何编译它们?

1 个答案:

答案 0 :(得分:3)

RenderScript的源代码可以在android.googlesource.com找到,也可以在Android的其他部分找到。如果您想重建Android或其中的一部分,here可能是一个很好的起点。

但是,这太过分了。如果您无法直接修改ScriptC,只需继承它即可。这是可能的,因为ScriptC所需的唯一方法是其受保护的构造函数。例如,我写了HackedScriptC,除了将其参数转发给ScriptC()

之外什么也没做
package com.example.android.rs.extremehax;

import android.content.res.Resources;
import android.renderscript.RenderScript;
import android.renderscript.ScriptC;

public class HackedScriptC extends ScriptC {

    public HackedScriptC(RenderScript rs, Resources resources, int id) {
        // simple passthru to the only constructor that ScriptC_mono uses
        super(rs, resources, id);
    }

}

现在可以在胶水类中替换ScriptC

package com.example.android.rs.extremehax;
// ...     
public class ScriptC_mono extends HackedScriptC { 
    // otherwise identical glue class...

在您的情况下,您不会调用超级构造函数ScriptC(RenderScript,Resources,int),因为它会调用您要覆盖的internalCreate。相反,请调用ScriptC(int,RenderScript)