JAVAH 找不到类(android ndk)

标签 java android android-ndk javah

我需要 javah 和 android-ndk 方面的帮助。

我尝试为我的本地方法生成 H 文件,但是 javah找不到类文件

我的目标类具有绝对名称 $PROJECT_DIRECTORY/src/bt/nativeclient/BtnativeActivity.java 并包含以下代码:

package bt.nativeclient;

import android.app.Activity; import android.os.Bundle; import android.widget.TextView;

public class BtnativeActivity extends Activity  {
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }
    
    public native String stringFromJNI();
    
    static 
    {
        System.loadLibrary("hello-jni");
    } 
 }

我尝试从以下路径启动 javah:

$(PROJECT_DIRECTORY)/bin$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)/jni$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)$ javah -jni bt.nativeclient.BtnativeActivity

我尝试指定-classpath路径:

$PROJECT_DIRECTORY/src$ javah -classpath :. bt.nativeclient.BtnativeActivity

我尝试指定android.jar,如前所述there :

$PROJECT_DIRECTORY/bin$ javah -classpath :/home/l/android-sdks/platforms/android-10/android.jar:. bt.nativeclient.BtnativeActivity

但我总是只得到一个结果:

error: cannot access bt.nativeclient.BtnativeActivity
class file for bt.nativeclient.BtnativeActivity not found
javadoc: error - Class bt.nativeclient.BtnativeActivity not found.
Error: No classes were specified on the command line.  Try -help.

此外,使用 -verbose 选项命令 javah 表示此命令正在搜索我的类(class)的有效位置:

$PROJECT_DIRECTORY/src$ javah **-verbose** -classpath :/home/l/android-sdks/platforms/android-10/android.jar:. bt.nativeclient.BtnativeActivity
error: cannot access bt.nativeclient.BtnativeActivity
class file for bt.nativeclient.BtnativeActivity not found
javadoc: error - Class bt.nativeclient.BtnativeActivity not found.
[ Search Path: /usr/lib/jvm/java-6-openjdk/jre/lib/resources.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/jsse.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/jce.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/charsets.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/netx.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/plugin.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/modules/jdk.boot.jar:/usr/lib/jvm/java-6-openjdk/jre/classes/:/home/l/android-sdks/platforms/android-10/android.jar:. ]
Error: No classes were specified on the command line.  Try -help.

我想我失去了一些重要的东西,但我仍然找不到解决办法。

有人能帮帮我吗?

最佳答案

Android 构建系统的 Ant 部分实际上将类文件放在 bin/classes 中。所以你需要在 javah 类路径上有 $PROJECT_DIRECTORY/bin/classes。例如,您可以从 src 目录运行:

$PROJECT_DIRECTORY/src$ javah -classpath ../bin/classes bt.nativeclient.BtnativeActivity

这假定您已经首先将 Java 代码编译为相应的类文件。您可以通过查看 bin/classes 目录中的内容来检查 - 它应该包含 bt 目录,这是您的包名称的顶部。

关于JAVAH 找不到类(android ndk),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985336/

相关文章:

java - 在 EC2 实例上运行和监控 Java

java - 实体未在 Hibernate 中更新

java - 关于整数值

C++ NDK 库针对 jobjectarray 返回方法的内存管理

android - Android 上的 OpenSL ES 播放速率

java - 是否有用于提取 MP4 元数据的 Java API?

java - 通过TCP将Opencv图像从Android发送到PC

android - Discord bot 在 ios 与 android 和桌面上的功能不同

Android float 学性能

java - 幽灵异常 : Java exceptions on empty lines