0

我是安卓初学者。我想编写一些利用现有 Android 本机方法的 java 类。作为一个简单的示例,我尝试从 FloatMath 类中公开 floor 方法。但是,这会强制关闭应用程序。我在下面复制了我的代码。它非常简单,针对 v1.6。那么我可以问一下我是否缺少明显的东西吗?我需要导入任何特殊的库或编译器吗?

public class MainActivity extends Activity {

    public static native float floor(float value);  

    float inputFloat = (float) 2.3;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        float outputFloat = floor(inputFloat);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
4

2 回答 2

4

你不能用这种方式做你想做的事情。

在 JNI(Java 本地接口)中,本地方法通过其名称链接到特定类。

在您的情况下,您需要定义一个本机库,例如libfoo.so,它具有一个名为Java_com_example_app_MainActivity_floor(com.example.app 是包名称)的导出函数。然后,您通过加载库System.loadLibrary("foo"),只有这样该方法才可用。

从其他本机库调用函数的一种方法(除了在其相应 Java 类上的 Java 反射)是从 C/C++ 加载库并包装其函数(通过dlopendlsym)。

在不了解您要做什么的情况下,我无法更具体。

在此处阅读有关 JNI 和本机开发的更多信息:https ://code.google.com/p/awesomeguy/wiki/JNITutorial (有点过时,但 JNI 部分仍然有效)

于 2013-07-27T15:08:43.800 回答
0

尝试添加字母f

float inputFloat = (float) 2.3f;
于 2013-07-27T14:58:10.257 回答