建议使用NDK在C中实现Android应用程序代码的敏感或面向安全的部分,因为它不能像Java代码那样容易地反编译,您可以更好地控制内存分配等。
但是现在我们还有Renderscript,其代码也是用C语言编写的,在设备上进行后台编译之后,它直接在CPU / GPU上运行。
Renderscript有类似的优势吗? 在Renderscript中实现代码的敏感部分是个好主意吗? 是否可以反编译放在`raw`文件夹中的Renderscript字节码?
答案 0 :(得分:0)
RenderScript内核可能不难反编译,因为它们被编译为LLVM中间表示,以便与应用程序(作为资源)打包。仅在运行时,该字节代码再次编译为本机。 LLVM-IR易于反编译,实际上是一个反编译器(称为CBackend),用于附带LLVM。
此外,用于与内核交互的胶水类是Java反编译将揭示(某些)函数和变量的签名,索引甚至名称。这可能会通过切换到NDK RenderScript API来阻止。
<强>更新强>
NDK Renderscript似乎将生成的胶水类中的IR嵌入为static const unsigned char __txt[]
,这可能使非常难以从二进制文件中提取字节码。但是,当字节码被缓存/传递给libbcc执行时,它仍然可以被访问。