首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVAH找不到类( android )

JAVAH找不到类( android )
EN

Stack Overflow用户
提问于 2012-04-02 23:45:43
回答 5查看 15.5K关注 0票数 13

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

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
$(PROJECT_DIRECTORY)/bin$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)/jni$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)$ javah -jni bt.nativeclient.BtnativeActivity

我尝试指定-classpath路径:

代码语言:javascript
复制
$PROJECT_DIRECTORY/src$ javah -classpath :. bt.nativeclient.BtnativeActivity

我尝试将android.jar指定为there

代码语言:javascript
复制
$PROJECT_DIRECTORY/bin$ javah -classpath :/home/l/android-sdks/platforms/android-10/android.jar:. bt.nativeclient.BtnativeActivity

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

代码语言:javascript
复制
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表示,该命令将我的类检索为有效位置:

代码语言:javascript
复制
$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.

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

有人能帮我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-03 14:29:50

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

代码语言:javascript
复制
$PROJECT_DIRECTORY/src$ javah -classpath ../bin/classes bt.nativeclient.BtnativeActivity

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

票数 25
EN

Stack Overflow用户

发布于 2012-10-30 18:11:57

在我的例子中,问题是Windows在Android之前就已经走上了正轨。所以(在cygwin中)检查您使用的是哪个javah (哪个javah),如果路径看上去不对,就修复路径。

票数 2
EN

Stack Overflow用户

发布于 2014-04-15 07:14:06

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

同时指定classpath =不要使用./bin/classes:~/ProjectFolder/bin/classes ( the tilde representing the Home directory)

但是使用“./../”来切换目录。出于某种原因,javah不识别主目录的tilde操作符。

还有一件事,如果类依赖于其他项目,那么在类路径中也需要它。

代码语言:javascript
复制
user@laptop:~/SomeProject javah -classpath ./bin/classes:../<Whereever the path is>/SomeOtherDependentProject:../<Path to android-sdk>/android.jar <Qualified class path>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9985336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档