Ale*_*Wih 12 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");
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试从以下pathes 启动javah:
$(PROJECT_DIRECTORY)/bin$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)/jni$ javah -jni bt.nativeclient.BtnativeActivity
$(PROJECT_DIRECTORY)$ javah -jni bt.nativeclient.BtnativeActivity
Run Code Online (Sandbox Code Playgroud)
我试着指定-classpath pathes:
$PROJECT_DIRECTORY/src$ javah -classpath :. bt.nativeclient.BtnativeActivity
Run Code Online (Sandbox Code Playgroud)
我试着在那里提到指定android.jar:
$PROJECT_DIRECTORY/bin$ javah -classpath :/home/l/android-sdks/platforms/android-10/android.jar:. bt.nativeclient.BtnativeActivity
Run Code Online (Sandbox Code Playgroud)
但总是我得到一个结果:
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.
Run Code Online (Sandbox Code Playgroud)
而且,使用-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.
Run Code Online (Sandbox Code Playgroud)
我想我已经失去了一些重要的东西,但我仍然找不到解决方案.
请问有人帮帮我吗?
ric*_*chq 25
Android构建系统的ant部分实际上放置了类文件bin/classes.所以你需要$PROJECT_DIRECTORY/bin/classes在javah类路径上.例如,从src目录中可以运行:
$PROJECT_DIRECTORY/src$ javah -classpath ../bin/classes bt.nativeclient.BtnativeActivity
Run Code Online (Sandbox Code Playgroud)
这假设您已首先将Java代码编译为相应的类文件.您可以通过查看bin/classes目录中的内容进行检查 - 它应该包含bt目录,该目录是程序包名称的顶部.