Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

JAVAH не может найти требуемый класс

#android_ndk #android #java

                    
При запуске javah -jni команда наотрез отказывается находить нужный класс:

$PROJECT_DIRECTORY/bin$
javah -jni
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

Мой класс java имеет аддрес: $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, $PROJECT_DIRECTORY/src, просто
из $PROJECT_DIRECTORY. Я пробовал специфицировать путь для поиска класса через опцию
-classpath:
$PROJECT_DIRECTORY/src javah -classpath :. bt.nativeclient.BtnativeActivity

Более того, если включить опцию -verbose команда javah говорит, что она исказала
мой класс в той директории, где этот самый класс она должна была найти:

$PROJECT_DIRECTORY
**javah -verbose -classpath :./src -jni**
**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/:**./src**
]

Я перепробовал все возможные комбинации, но не нашел решения.
Мне кажется, я упустил какую-то маленькую деталь по своей неопытности, может кто-нибуть
помочь мне, пожалуйста?    


Ответы

Ответ 1



Надо указывать пусть к .class файлу, они не в bin а в bin\classes. Класспас указывает не на ваш исходних а на дополнительные библиотеки, если их нет, то просто из папки bin\classes вызовите команду >javah <пакет>.<пакет>.<класс> Должно работать.

Комментариев нет:

Отправить комментарий