0

问题(形如“V”):

我们有一个 Java 函数 a() - 在 a.java 中(V 的左上角)

a() 调用另一个通过 JNI 实现的本地函数 b() - b.cpp(V 的底部)

b() 通过 JNI 创建 java 类 C 的实例 - 在 c.java 中定义(V 的右上角)

a.java 中没有任何内容直接引用 c.java。


a.java 以 a.class 结尾(.apk 项目)

b.cpp 以 libB.so 结尾(.aar 项目)

c.java 以 classes.jar 结束(.aar 项目)


问题:

这是如何使用 Android 的“d8”工具运行并定位在 .apk 文件中的?


解决方案要求:

命令行(不是 Android Studio)

4

1 回答 1

0

调用 d8 时只使用了 classes.jar 和 a.class 作为源。似乎 d8 只是将它获得的所有内容放入生成的 classes.dex 文件中 - 没有参考或使用检查。libB.so 位于 lib/ ABI /libB.so 中,一切正常。

哦,永远不要忘记在 C/C++ 函数前面使用 extern "C",否则名称修改会阻止 JNI 在库中找到任何内容。;)

于 2022-02-20T17:12:43.763 回答