【问题标题】:java.lang.IllegalArgumentException: Not a valid class name: ANDROID NDK javahjava.lang.IllegalArgumentException:不是有效的类名:ANDROID NDK javah
【发布时间】:2013-07-13 14:31:36
【问题描述】:

我正在学习在 WINDOWS Eclipse 上使用 NDK 编写 Android 代码......一直在关注 Sylvain Ratabouil 的教程书。所以我在运行|外部工具 |外部工具配置... 创建新的程序配置。

名称:MyProject javah

位置:${env_var:JAVA_HOME}\bin\javah.exe

工作目录:${workspace_loc:/MyProject/bin}

问题在于参数... 当我尝试 参数:-d ${workspace_loc:/MyProject/jni} com.myproject.MyActivity 正如书中所说的那样

当我点击运行时我得到了

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: –d

当我尝试 ${workspace_loc:/MyProject/jni} com.myproject.MyActivity}

我明白了

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: C:\Paul\Workspace\MyProject\jni

更新: 我把 -classpath 放在第一位,它正在运行,但找不到 com.myproject 的类文件

【问题讨论】:

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


【解决方案1】:

经过进一步研究...... 我做到了。

我将参数设置为

-d ${workspace_loc:/MyProject/jni} -classpath C:\Paul\android-sdk-windows\platforms\android-17\android.jar;${workspace_loc:/MyProject/bin/classes } com.myproject.MainActivity

【讨论】:

    【解决方案2】:

    在使用上面提到的关于 Android NDK 的书时,我也花了很长时间解决这个问题。

    请注意以下几点: java类名不是写在{ }中的,写com.myproject.MyActivity之类的就行了

    -classpath参数可以接收分号分隔的多个路径。

    在我的例子中,这个参数有效:

    地点:

    ${env_var:JAVA_HOME}\bin\javah.exe
    

    工作目录:

    ${workspace_loc:/myproject/bin}
    

    参数:

    -d ${workspace_loc:/myproject/jni} -classpath ${workspace_loc:/myproject/bin/classes};"C:\Eclipse\sdk\platforms\android-18\android.jar" com.myproject.MyActivity
    

    (顺便说一句:在 Eclipse 项目中引用了正确的 Adroid.jar 文件。)

    【讨论】:

      【解决方案3】:

      今晚我也面临同样的问题,我找到了一个不那么乏味的方法如下......

      1. 作为“位置”从您的系统中设置 javah
      2. 作为“工作目录”设置项目的 bin/classes 目录 (${workspace_loc:/HelloWorld/bin/classes})
      3. as "Argument" 将 jni 文件夹设置为输出目录,并指出要在其上运行 javah 的类 (-d "${workspace_loc:/HelloWorld/jni}" com.example.helloworld .MainActivity)

      NB :: 不要忘记第三步中输出周围的双引号 (") ("${workspace_loc:/HelloWorld/jni}")

      下面还附上全图

      【讨论】:

        【解决方案4】:

        万一……

        1->转到(cd C:\Program Files\Java\jdk1.7.0_60\bin)

        2-> C:\Program Files\Java\jdk1.7.0_60\bin>javah -jni -classpath F:\Android_OpenGLES\FibonacciNative\bin\classes -d F:\Android_OpenGLES\FibonacciNative\jni\ com.example.fibonaccinative.FibLib

        无需创建/使用环境变量...

        【讨论】:

          【解决方案5】:

          以下我尝试成功

          javah com.sense.kios.Calculation
          

          注意:包括包名。

          如果没有找到 javah 作为命令并且你得到了

          The program 'javah' can be found in the following packages:
           * gcj-4.6-jdk
           * gcj-4.7-jdk
           * openjdk-7-jdk
           * openjdk-6-jdk
          Try: sudo apt-get install <selected package>
          

          使用jdk路径的直接路径,在我的例子中是/usr/lib/jvm/jdk1.8.0/bin/javah

          【讨论】:

            【解决方案6】:

            是的,这是正确的 更抽象的是

            -d ${workspace_loc:/MyProject/jni} -classpath ${env_var:ANDROID_SDK_HOME}\platforms\android-16\android.jar;${workspace_loc:/MyProject/bin/classes} com.myproject.MyActivity
            

            【讨论】:

              猜你喜欢
              • 2012-04-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-16
              相关资源
              最近更新 更多