我在这里查了一下,似乎没有回答我的具体问题。我知道我可以使用C .so库并通过稍微重写下面的库本机方法来引用其中的方法:
@SuppressWarnings("JniMissingFunction")
public class MyNativeMethods {
static {
System.loadLibrary("libraryWithSoExtension");
}
public native boolean init();
}
我的问题是,我想在这个lib中调用构造函数。 lib只包含几个类,每个类包含1或2个方法。我从这里看到:
How to call methods on .so library in Android studio
我不需要任何h,c或jni(我真的吗?)。
问题:
提前谢谢。
答案 0 :(得分:2)
如果您有一个预先构建的 .so 文件,该文件实现了一些原生方法,那么您不需要其源代码来在Android Studio中构建项目。
问题是,包含这些方法的本机方法和类的名称是硬编码的,例如共享库中的Java_com_example_test_MainActivity_stringFromJNI
导出函数 libmy.so 适合
package com.example.test;
public class MainActivity extends Activity {
static {
System.loadLibrary("my");
}
public native String stringFromJNI();
}
而不是其他一些Java类或方法(有些工具可以使这种逆向工程更难)。
您可以使用javah命令为本机方法生成C声明,但它无法对适合给定库的Java类进行反向工程。但它会让你声明一个本机构造函数,如果你真的想要一个。
Android Studio的Gradle插件会将src/main/jniLibs
中的所以文件打包到您的APK中,除非您在 jniLibs.srcDir 目录>的build.gradle 强>
答案 1 :(得分:0)
我不确定这是否是您要找的,但请看一下:
https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo025
你会发现有超级简单的代码,C ++是通过Java的JNI包装器调用的。