配置JNI的时候遇到了如?错误
实际上并不是Android Studio的问题,环境变量配置也没有问题,
我到我的JDK的bin目录下
发现并没有javah这个文件
脑补了一下,绝对是Java自己的问题!
果不其然,jdk版本太新了,orz
在jdk10及以上的版本中,已经删除了javah,使用"javac -h"命令替代"javah"
所以
javah -jni com.example.ndk.MainActivity
应该改为
javac -h . com\example\ndk\MainActivity.java
javac -h -jni com\example\ndk\MainActivity.java
似乎也是可以的
有两点需要注意
首先,要给后缀名,因为javac必须得...否则如?
其次,目录结构要换成用“\”来表示的形式,否则无法找到
除此之外不建议有中文...哪怕是注释...
或者手动补上编码
-encoding UTF-8
完整即
javac -encoding UTF-8 -h . com\example\ndk\MainActivity.java
或javac -encoding UTF-8 com\example\ndk\MainActivity.java -h JniH
写法挺多的....
还遇到如?错误
16 个错误全文如下:
C:\Users\lin22\AndroidStudioProjects\NDK\app\src\main\java>javac -encoding UTF-8 -h . com\example\ndk\MainActivity.java
com\example\ndk\MainActivity.java:3: 错误: 程序包android.support.v7.app不存在
import android.support.v7.app.AppCompatActivity;
^
com\example\ndk\MainActivity.java:4: 错误: 程序包android.os不存在
import android.os.Bundle;
^
com\example\ndk\MainActivity.java:5: 错误: 程序包android.view不存在
import android.view.View;
^
com\example\ndk\MainActivity.java:6: 错误: 程序包android.widget不存在
import android.widget.EditText;
^
com\example\ndk\MainActivity.java:7: 错误: 程序包android.widget不存在
import android.widget.TextView;
^
com\example\ndk\MainActivity.java:9: 错误: 找不到符号
public class MainActivity extends AppCompatActivity {
^
符号: 类 AppCompatActivity
com\example\ndk\MainActivity.java:11: 错误: 找不到符号
private EditText number1, number2;
^
符号: 类 EditText
位置: 类 MainActivity
com\example\ndk\MainActivity.java:12: 错误: 找不到符号
private TextView sum_text;
^
符号: 类 TextView
位置: 类 MainActivity
com\example\ndk\MainActivity.java:15: 错误: 找不到符号
protected void onCreate(Bundle savedInstanceState) {
^
符号: 类 Bundle
位置: 类 MainActivity
com\example\ndk\MainActivity.java:27: 错误: 找不到符号
public void sum_button(View view) {
^
符号: 类 View
位置: 类 MainActivity
com\example\ndk\MainActivity.java:14: 错误: 方法不会覆盖或实现超类型的方法
@Override
^
com\example\ndk\MainActivity.java:16: 错误: 找不到符号
super.onCreate(savedInstanceState);
^
符号: 变量 super
位置: 类 MainActivity
com\example\ndk\MainActivity.java:17: 错误: 程序包R不存在
setContentView(R.layout.activity_main);
^
com\example\ndk\MainActivity.java:18: 错误: 程序包R不存在
number1 = findViewById(R.id.number1);
^
com\example\ndk\MainActivity.java:19: 错误: 程序包R不存在
number2 = findViewById(R.id.number2);
^
com\example\ndk\MainActivity.java:20: 错误: 程序包R不存在
sum_text = findViewById(R.id.sum_text);
^
16 个错误
查了一下发现是classpath的环境变量没配好,我记得以前好像配过的?
结果看了一下真的没配....好诡异
这部分参考了:http://blog.sina.com.cn/s/blog_49b3ba190102z0ah.html
感谢一下
按照习惯
建一个ANDROID_HOME变量值为SDK的路径
修改classpath
加入错误提示中缺少的程序包,网上一般会告诉你贴三个,三个就三个吧 2333
%ANDROID_HOME%\platforms\android-22\android.jar;
(好像说不能用22以上的,但是又必须得至少22)
%ANDROID_HOME%\extras\android\support\v4\android-support-v4.jar;
%ANDROID_HOME%\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar;
果不其然,我这个路径下这个jar包也不存在...
http://blog.sina.com.cn/s/blog_49b3ba190102z0af.html
倒是有一个仓库,
一路进去,倒是可以找到类似的,
解压这个文件,有个jar就是了...
然后我寻思环境变量还得改