BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #20361同步于 2011/10/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

JNI&Android,将class文件编成.h时报错:无法访问android.app.A

linxiaobo
2011/10/10镜像同步8 回复
我是用eclipse写的代码,在SDK模拟器中都可以显示正常(代码没啥问题),然后在workspace的bin目录下执行java -jni com.test.layout.TestlayoutActivity,就是要包涵包名。我觉得路径也应该是对的,不然编译器不会识别到我里面包涵了activity这个类。我在想是不是SDK有问题,但是eclipse中已经能运行了,应该也没问题,网上找不到相关信息,非常苦闷 错误如下图,java代码如下, http://fmn.rrimg.com/fmn065/20111010/1015/original_gi4r_0d4700008f091269.jpg 如果图看不到:原文就是: 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件 ---------------------------------------------------------- package com.test.layout; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import android.view.View; import android.view.View.OnClickListener; import android.text.Editable; public class TestlayoutActivity extends Activity { Button okButton; Button cancelButton; OnClickListener btnClick; EditText inputtext; public native String getresult(Editable input);//声明native方法,用于提取用户输入并传到C中 //并从C中接受返回值,并使用Toast输出 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); okButton=(Button)findViewById(R.id.OK); cancelButton=(Button)findViewById(R.id.Cancel); inputtext=(EditText)findViewById(R.id.Input); btnClick = new OnClickListener() { @Override public void onClick(View v){ if (v == okButton) { Editable input = inputtext.getText(); String output = getresult(input); Toast.makeText(TestlayoutActivity.this,output, Toast.LENGTH_SHORT).show(); } else if (v == cancelButton) { inputtext.getText().clear(); } } }; okButton.setOnClickListener(btnClick); cancelButton.setOnClickListener(btnClick); } static { System.loadLibrary("inputtest"); } } -----------------------------------------------------------
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
hotcode机器人#1 · 2011/10/10
这种问题一般是classpath没有包含activity类所在的路径 当你在eclipse中运行时,eclipse已经有了默认的classpath,并且该classpath包含了activity类所在路径;但是当你在cmd中直接运行时,classpath值是系统设置的classpath环境变量值,该classpath并没有包含activity类,所以提示找不到 【 在 linxiaobo 的大作中提到: 】 : 我是用eclipse写的代码,在SDK模拟器中都可以显示正常(代码没啥问题),然后在workspace的bin目录下执行java -jni com.test.layout.TestlayoutActivity,就是要包涵包名。我觉得路径也应该是对的,不然编译器不会识别到我里面包涵了activity这个类。我在想是不是SDK有问题,但是eclipse中已经能运行了,应该也没问题,网上找不到相关信息,非常苦闷 : 错误如下图,java代码如下, : : ...................
linxiaobo机器人#2 · 2011/10/10
能稍微再具体吗,activity的类具体在哪,我现在classpath中有jdk,应该没问题。SDK貌似只需要配在path中
MDifferent机器人#3 · 2011/10/11
我都是这么用: javah -classpath (你的class文件所在目录) -d (.h文件保存的路径) -jni (完整的包名+类名)
linxiaobo机器人#4 · 2011/10/11
Activity的class在哪个目录呢,你们是用eclipse吗?
yaxing1984机器人#5 · 2012/12/10
【 在 linxiaobo 的大作中提到: 】 : Activity的class在哪个目录呢,你们是用eclipse吗? 在你的工程目录/bin/classes目录下
yaxing1984机器人#6 · 2012/12/10
【 在 MDifferent 的大作中提到: 】 : 我都是这么用: : javah -classpath (你的class文件所在目录) -d (.h文件保存的路径) -jni (完整的包名+类名) “你的class文件所在目录”---我写的是"classes" “h文件保存路径”----"jni" 命令是在工程目录/bin下执行的 额,悲剧的是,发现仍然提示“找不到***的类文件”[ema1]
MDifferent机器人#7 · 2012/12/11
是不是应该"./classes"和"../jni"? 【 在 yaxing1984 的大作中提到: 】 : : “你的class文件所在目录”---我写的是"classes" : “h文件保存路径”----"jni" : ..................
yaxing1984机器人#8 · 2012/12/11
【 在 MDifferent 的大作中提到: 】 : 是不是应该"./classes"和"../jni"? 额,还是不行啊