gpt4 book ai didi

java - 编译渲染脚本源代码

转载 作者:行者123 更新时间:2023-11-29 05:25:55 24 4
gpt4 key购买 nike

正如我在上一篇文章 ( Compiling renderscript code at runtime) 中提到的,我尝试在运行时编译 renderscript 代码。正如 Kietz 所建议的,我需要更改所有生成的 Java 类派生自的 ScriptC 类。制作我自己的扩展 Script 的类失败,因为我无法调用这个父类(super class)的构造函数。

这段代码

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 源代码中并编译它以创建一个新的 .jar。我在 git 上找到了源代码但不知道如何只构建 renderscript 包。

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

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

最佳答案

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

然而,这太过分了。如果不能直接修改ScriptC,那就继承吧。这是可能的,因为您需要从 ScriptC 获得的唯一方法是其 protected 构造函数。例如,我编写了 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...

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

关于java - 编译渲染脚本源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22685162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com