【问题标题】:JAVAH can't find class( android ndk)JAVAH 找不到类(android ndk)
【发布时间】:2012-04-16 15:20:21
【问题描述】:

我需要 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 表示该命令正在搜索我的类它的有效位置:

$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.

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

有人可以帮帮我吗?

【问题讨论】:

    标签: java android android-ndk javah


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在我的情况下,问题是 Windows Java 在 Android java 之前的路径中。 所以检查(在cygwin中)你正在使用哪个javah(哪个javah),如果路径看起来不正确,修复路径。

      【讨论】:

        【解决方案3】:

        在我的情况下,我不得不将我的包从“com.examples.cam”重命名为其他名称。然后javah正常工作。在我遇到相同的“找不到类”错误之前。

        【讨论】:

          【解决方案4】:

          @richq 是绝对正确的。但我还想补充一件事。 (这占用了我早上的大部分时间来解决这个问题)

          在指定类路径时 = 避免使用 ./bin/classes:~/ProjectFolder/bin/classes ( the tilde representing the Home directory)

          但是使用“../../”来切换目录。由于某种原因,javah 无法识别主目录的波浪号运算符。

          另外一件事,如果该类依赖于其他项目,那么您在类路径中也需要它

          user@laptop:~/SomeProject javah -classpath ./bin/classes:../<Whereever the path is>/SomeOtherDependentProject:../<Path to android-sdk>/android.jar <Qualified class path>
          

          【讨论】:

            【解决方案5】:

            即使我也被这个问题困扰了一段时间,并回答说richq 就像一个魅力。 我想在类路径中补充一点,你应该只提供直到你的包开始的路径(大多数项目都是在 com 之前的一个级别)。对于下一个参数,给出包内的类文件路径(即从 com.mypackage.myclass 开始) 另外,不要在类名后面附加“.java”扩展名。

            来自您包裹的“src”

            javah -classpath ../package1/package2/.. com.mypackage.myclassname

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-11
              • 2014-05-30
              • 2021-11-26
              相关资源
              最近更新 更多