如何在 Android 上隐藏 GLSL 实现细节

Jam*_*hao 2 android opengl-es glsl

在 Android 上使用 GLSL 实现图像处理算法很简单。但算法的细节很容易在反编译的Java文件中作为字符串或资源文件中找到。我想知道是否存在一种隐藏 GLSL 细节的方法,例如使用编译的 GLSL 源或其他一些技术。

顺便说一句,我更喜欢使用 GLSurfaceView。

谢谢。

Nic*_*las 5

加密确实是您最好的选择。因为这是你唯一的赌注;任何愿意反编译 Java 应用程序的人都可能知道如何反编译二进制着色器。

话又说回来,由于 OpenGL 需要二进制着色器或文本,这意味着在某些时候,解密的着色器将存在于内存中。这意味着用户将能够抢夺它。确实没有办法解决这个问题,而且你的应用程序越出名,它的目标就越大。

只需在着色器文件上使用合适的加密算法即可。如果您想让它们更加努力地工作,请对二进制着色器进行加密。

不过,加密有助于实现着色器的特定于平台的性质。为了确保您的应用程序实际上可以在所有可能的 Android 设备上运行,您不能真正依赖于交付的二进制着色器。您可以为特定硬件提供一些二进制着色器,但 Android 设备有很多。您只能传送这么多的二进制格式。

对于主要的,您的二进制文件将加载。这就是加密发挥作用的地方。您仍然需要发送文本着色器,但如果您对它们进行加密,那么用户将无法解密它们,除非阅读您的加密算法或将它们从内存中取出解密。如果您的二进制着色器适合硬件,那么他们就无法执行后者,因为那时您根本不需要加载和解密文本着色器。

所以你可以让某人付出相当大的努力。但你无法阻止他们。