找不到Javah错误android.app.Activity

时间:2012-05-07 14:34:58

标签: android android-ndk java-native-interface javah

我正在尝试为简单的NDK项目创建一个.h头文件。使用cygwin我浏览到myprojectDIR\jni目录,然后执行以下命令:

javah -o com_myproject_MyActivity.h -classpath  myprojectDIR\bin\classes com.myproject.MyActivity

然后会出现此错误消息:

Error: cannot access android.app.Activity
class file for android.app.Activity not found

我在MyActivity类中有一个本机方法,所以我尝试创建一个名为NativeAccess的新类(不扩展来自android SDK的任何类)并且它工作正常,.h文件在设备上创建,ndk-build和测试成功!

所以我的问题是我需要在我创建的android活动和服务中使用我的本机方法,但我不能这样做,因为Javah命令无法从android-sdk本身访问类。请注意我正在使用(Windows-7 x64),我有这些环境变量:

ANDROID_NDK : C:\Android\android-ndk-r7b
ANDROID_SDK : C:\Android\android-sdk
ANT_HOME    : C:\ANT\apache-ant-1.8.3
JAVA_HOME   : C:\Program Files\Java\jdk1.7.0_02
PATH        : %JAVA_HOME%\bin;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;%ANDROID_NDK%;%ANT_HOME%\bin; (other unrelated stuff)

提前致谢

5 个答案:

答案 0 :(得分:21)

尝试添加到您的类路径:

-classpath <android-sdk-location>/platforms/android-8.jar

答案 1 :(得分:14)

我找到了,这是怎么回事:

javah -o com_myproject_MyActivity.h -classpath <android-sdk-location>/platforms/android-8.jar;myprojectDIR\bin\classes com.myproject.MyActivity

答案 2 :(得分:4)

在Eclipse中尝试以下内容,

转到&gt;运行|外部工具|外部工具配置    在程序下,单击小图标创建新配置。

命名。

位置将是:C:\ Program Files \ Java \ jdk1.7.0_04 \ bin \ javah.exe

工作目录将是:$ {workspace_loc:/ My_First_NDK / bin / classes}和

参数将是:-classpath $ {workspace_loc:/ My_First_NDK / bin / classes} -bootclasspath&#34; C:\ adt-bundle-windows-x86-20140624 \ sdk \ platforms \ android-19 \ android.jar& #34; -v -d $ {workspace_loc:/ My_First_NDK / jni} com.mypackage.ndk.HelloNDK

enter image description here

答案 3 :(得分:0)

为了生成本地头文件javah需要:

  • 您的课程(通常在build/intermediates/classes下)
  • Android类(通常在$ANDROID_HOME/platforms/android-%ver%/android.jar下)

所以你只需在-classpath参数

中传递它们

对我来说,主要的挑战基本上是通过它们 - 你必须使用:作为分隔符,路径必须是绝对的。
Oracle docs

因此,你可能会得到这样的结果:
javah -classpath <full path to app>build/intermediates/classes/debug:<full path to sdk>/platforms/android-26/android.jar com.myproject.MyActivity

答案 4 :(得分:-1)

我找到了,这是怎么回事:

   E:\workspeaceResearch\DAMMADARJNI\src>javah -classpath "E:\Software\sdk\platform
   s\android-19/platforms/android-8.jar"; -jni com.dammadar.jni.Home_Screen