androidjava系统调用(如何在Unity中调用Android的JAVA代码)

本文目录
- 如何在Unity中调用Android的JAVA代码
- 如何在Android中启动JAVA程序
- Android-java怎么调用命令行的命令
- android系统如何使用Java
- 如何在Android平台上使用JS直接调用Java方法
- 如何在Android平台上使用JS直接调用Java方法
- 如何在Android平台上使用JS直接调用Java方法
- Android平台,怎么调用javascript操作网页和js调用系统功能
- Android 中如何在java类中调用activity 中的一个方法
- 安卓系统怎么运行java
如何在Unity中调用Android的JAVA代码
unity 是一个多平台的游戏引擎。由于他的多平台,可视化的特点,受到了程序员们的关注。但是,unity也有缺陷。在发布android平台应用时,unity不能方便的调用android的接口。这样我们就只能通过android编程调用android接口。所以我们需要在Unity中调用Android的JAVA代码。接下来我将教大家,如何在unity中调用Android的JAVA代码。
工具/原料
unity引擎
eclipse环境
方法/步骤
首先我们要创建一个android项目
因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中。接口包的所在地,打开Finder-》应用程序-》Unity-》点击Unity图标,鼠标右键选择“显示包内容”-》Contents-》PlaybackEngines-》AndroidPlayer-》bin-》classes.jar 。接口包引入工程后,开始编写JAVA代码。
UnityTestActivity是主Activity,Unity程序一起动就会调用这个Activity,它是在AndroidManifest.xml中配置的。它需要继承UnityPlayerActivity,然而它就是刚刚我们引入的classes.jar包中提供的接口类。UnityTestActivity对外提供了两个方法接口,StartActivity0(String name) 方法与StartActivity1(String name)方法,这两个方法是在Unity中使用C#脚本调用的,意思是调用后程序将打开一个新的Activity,参数name也是由C#脚本传递过来的,接着将传递的String参数继续传递给新打开的Activity。
接下来就是设置xml文件和布局文件了。对于会android编程的同学就很熟悉了。
把写好的java代码发布成jar包。接下来就创建unity工程,Unity工程中文件夹的结构如下,Plugins-》Android的名称不能修改,必需保持一致。接着把Eclipse中Android的工程文件拷贝至这里,除了Android工程中的src文件夹,将其它文件夹全部拷贝至Plugins-》Android文件夹中。最后在Plugins-》Android文件夹中创建bin文件夹,然后将刚刚生成的.jar文件拷贝进来,jar的名称可以随便修改,但是jar包里面必须是com-》xys-》你的class文件,否则运行程序后提示找不到类文件。
接下来就是如何在C#中调用android的方法的代码了。
加入如下代码。
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic《AndroidJavaObject》("currentActivity");
jo.Call("StartActivity0","第一个Activity");
先得到AndroidJavaClass,然后得到AndroidjavaObject就是当前Activity的对象,也就是我们在上面创建的主UnityTestActivity.JAVA。拿到它的对象后调用jo.Call()参数1表示调用UnityTestActivity.JAVA类中的方法名称,参数2表示该方法传递过去的参数。如下图所示:“第一个Activity”与“第二个Activit”就是我在C#中传递过去的字符串。
发布成android平台apk
***隐藏网址***
如何在Android中启动JAVA程序
在Android中启动JAVA程序其实有很多种方式,现总结如下
一、在Android应用程序中发送Intent启动Android应用程序
这个方式最简单,最常用。在此不在累述。关于Intent的更多内容请阅读《Intent技术简介》
二、在shell控制台通过am命令发送Intent来启动Android应用程序
在Android的shell控制台通过am命令发送Intent来启动Android应用程序
关于此的详细内容请参考《Android命令am详解》
三、在shell控制台直接通过davlikvm命令启动一个JAVA程序。
该方式有个天生的缺点,即在其中,很多Android的JNI无法调用。因为Android的很多JNI其实是需要手动注册的。
关于请参考《基本Dalvik VM调用》
四、在shell控制台直接通过运行app_process程序启动一个JAVA程序
在app_process程序中,他会对Android的JNI进行手动注册的,能很好的使用Android的API,因此通过运行app_process程序启动一个JAVA程序,是一个比较完美的方式。app_process程序是一个C程序,它的源码位于frameworks\base\cmds\app_process。
关于它的使用请参考《Android命令am详解》以及shell脚本frameworks\base\cmds\am\am和frameworks\base\cmds\pm\pm
am脚本文件如下:
# Script to start "am" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/am.jarexec app_process $base/bin com.android.commands.am.Am "$@"pm脚本文件如下:
# Script to start "pm" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/pm.jarexec app_process $base/bin com.android.commands.pm.Pm "$@"CLASSPATH指定了你的程序的位置,com.android.commands.pm.Pm则说明了程序的入口为com.android.commands.pm.Pm,即入口函数main()所在的类,"$@"就是传递给main()函数的参数,只是这里"$@"本身又是个shell传入的参数而已
需要注意的是CLASSPATH中的文件必须是dalvik文件格式的,关于此的转换请参考《基本Dalvik VM调用》当然CLASSPATH中的文件可以是apk文件,只是你的apk中至少应该有个拥有main()入口函数的类。
转载
Android-java怎么调用命令行的命令
Android-java调用命令行的命令可以使用Runtime类实现。
比如定义执行命令的方法:
public void execCommand(String command) throws IOException {
Runtime runtime = Runtime.getRuntime(); //申明runtime
Process proc = runtime.exec(command); //开始执行命令
try {
if (proc.waitFor() != 0) { //执行完成
System.err.println("exit value = " + proc.exitValue());
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+"-");
}
//打印缓冲区
System.out.println(stringBuffer.toString());
} catch (InterruptedException e) {
System.err.println(e);
}
}
调用方法:
// 按钮点击事件
public void execute(View v) {
try {
execCommand("ls");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
android系统如何使用Java
下载一个JAVA虚拟机,安装完后用91手机助手的文件管理功能,把想要用的JAVA文件复制到手机的SDCARD这个文件夹下。运行桌面上的Java虚拟机,按MENU键调出菜单,选择存储卡,软件会搜索到你刚刚放到手机里的JAVA文件,点击进行安装。进度条跑完后进入sdcard文件夹就会看到JAVA软件了,点击运行。
这些都是从 91手机站 学来的,可以去看看,教程都挺实用的。
如何在Android平台上使用JS直接调用Java方法
Android平台上使用js调用java方法,主要是通过webview控件提供的 webview.addJavascriptInterface(new Person(this), "per"); 这个方法将java对象注入到js中,然后可以在js中通过调用该java对象的方法来实现回调,如下代码:
1.html文件,demo.html
《html》
《head》
《script type="text/javascript" 》
function updateHtml(type,type2){
document.getElementById("content").innerHTML =
"弹出对话框,测试"+type+type2;
alert("dialog");
}
《/script》
《/head》
《body》
这是一个js与android的例子 《a onClick="window.ceshi.startFunction()" href=""》弹出对话框《/a》
调用对象方法 《a onClick="per.print()" href=""》调用对象方法《/a》
《span id="content"》《/span》
《/body》
《/html》
2.android端控制代码:
package com.ccb.javascript;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
int priceMenu1 = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取webView 控件
final WebView webview = (WebView) findViewById(R.id.webview);
// 加上这句话才能使用javascript方法
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/demo.html");
webview.addJavascriptInterface(new Person(this), "per");
Button button = (Button) findViewById(R.id.button); // 获取button控件
// 即"调用html中的js方法"
// 按钮
// 给button添加事件响应,执行JavaScript的fillContent()方法
button.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
webview.loadUrl("javascript:updateHtml(’str11’,’bar22’)");//多个参数拼接
}
});
Button button1 = (Button) findViewById(R.id.button1);// 获取button1控件
// 即"重新加载html "按钮
// 给button添加事件响应,执行JavaScript的fillContent()方法
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MainActivity", "button1 OnClick");
webview.loadUrl("file:///android_asset/demo.html");
// return
}
});
// 增加接口方法,让html页面调用
webview.addJavascriptInterface(this, "ceshi");
Button buttonceshi = (Button) findViewById(R.id.buttonceshi);
buttonceshi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public void startFunction() {
AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this);
ab.setTitle("提示");
ab.setMessage("通过js 调用了 java 中的方法");
ab.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ab.create().show();
}
class Person {
Context mContext;
Person(Context c) {
mContext = c;
}
String name = "我的名字是对象";
int age;
public String getName() {//js里面无法直接使用对象加属性的方式访问,暂时没找到方法,只能用对象加getName
《span style="white-space:pre"》 《/span》return name;
《span style="white-space:pre"》 《/span》}
public void print() {
Toast.makeText(mContext, "你好", Toast.LENGTH_LONG).show();
System.out.println("我成功的调用了对象");
}
}
}
运行结果如下:
如何在Android平台上使用JS直接调用Java方法
好了上代码
/*JsInterface.java*/
/*该类是JS调用JAVA端的,JAVA端调用webview中的JS很简单,后面代码将给出*/
view plaincopy
public class JsInterface {
/*interface for javascript to invokes*/
public interface wvClientClickListener {
public void wvHasClickEnvent();
}
private wvClientClickListener wvEnventPro = null;
public void setWvClientClickListener(wvClientClickListener listener) {
wvEnventPro = listener;
}
public void javaFunction() {
if(wvEnventPro != null)
wvEnventPro.wvHasClickEnvent();
}
}
/*Js2JavaActivity.JAVA*/
/*程序入口*/
view plaincopy
public class Js2JavaActivity extends Activity{
private Button btn_show,btn_hide;
private WebView wv;
private JsInterface JSInterface2 = new JsInterface();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.js2java);
btn_show = (Button)findViewById(R.id.btn_java2js_show);
btn_hide = (Button)findViewById(R.id.btn_java2js_hide);
wv = (WebView)findViewById(R.id.wv_js2java);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(JSInterface2,"JSInterface2");
wv.setWebViewClient(new webviewClient());
wv.loadUrl("file:///android_asset/index.html");
}
class webviewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
btn_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "You click show button", 1000).show();
wv.loadUrl(String.format("javascript:java2js(0)"));//这里是java端调用webview的JS
}
});
btn_hide.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "You click hide button", 1000).show();
wv.loadUrl(String.format("javascript:java2js(1)"));//这里是java端调用webview的JS
}
});
JSInterface2.setWvClientClickListener(new webviewClick());//这里就是js调用java端的具体实现
}
}
class webviewClick implements wvClientClickListener {
@Override
public void wvHasClickEnvent() {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "link be on click", 1000).show();
}
}
}
/*好吧,照顾码农需要,将布局的也贴上*/
view plaincopy
《?xml version="1.0" encoding="utf-8"?》
***隐藏网址***
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 》
《LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"》
《Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_java2js_show"
android:text="click_show"/》
《Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_java2js_hide"
android:text="click_hide"/》
《/LinearLayout》
《LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"》
《WebView
android:id="@+id/wv_js2java"
android:layout_width="match_parent"
android:layout_height="match_parent"/》
《/LinearLayout》
《/LinearLayout》
/*最后是HTML文件*/
view plaincopy
《html》
《body》
《script language="javascript"》
function java2js(isHide) {
var x = document.getElementById(’div’);
if(isHide==0)
x.className = "";
else
x.className = "hide";
}
function js2java() {
JSInterface2.javaFunction();
}
《/script》
《style type="text/css"》
.hide {
display:none;
}
《/style》
《a href="#" onClick="js2java()"》js2java《/a》
《div class="hide" id="div"》
《font color="#FF0000"》this is a hide div~~~~《/font》
《/div》
《/body》
如何在Android平台上使用JS直接调用Java方法
在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。
类名
参数中的类名必须是包含Java包路径的完整类名,例如我们在org.cocos2dx.javascript这个包下面写了一个Test类:
package org.cocos2dx.javascript;
public class Test {
public static void hello(String msg){
System.out.println(msg);
}
public static int sum(int a, int b){
return a + b;
}
public static int sum(int a){
return a + 2;
}
}
那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中我们习惯的点.。
方法名
方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。
方法签名
方法签名稍微有一点复杂,最简单的方法签名是()V,它表示一个没有参数没有返回值的方法。其他一些例子:
(I)V表示参数为一个int,没有返回值的方法
(I)I表示参数为一个int,返回值为int的方法
(IF)Z表示参数为一个int和一个float,返回值为boolean的方法
现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。
目前Cocos2d-js中支持的Java类型签名有下面4种:
Java类型
签名
int I
float F
boolean Z
String Ljava/lang/String;
参数
参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。
使用示例
我们将会调用上面的Test类中的静态方法:
//调用hello方法
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String;)V", "this is a message from js");
//调用第一个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);
cc.log(result); //10
//调用第二个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);
cc.log(result); //5
在你的控制台会有正确的输出的,这很简单吧。
注意
另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果我们在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。
例如,在下面的例子中我们会调用一个Java方法,它弹出一个android的Alert对话框。
//给我们熟悉的AppActivity类稍微加点东西
public class AppActivity extends Cocos2dxActivity {
private static AppActivity app = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = this;
}
public static void showAlertDialog(final String title,final String message) {
//这里一定要使用runOnUiThread
app.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.Builder(app).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
});
}
}
然后我们在js中调用
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");
这样调用你就可以看到一个android原生的Alert对话框了。
再加点料
现在我们可以从js调用Java了,那么能不能反过来?当然可以!
在你的项目中包含Cocos2dxJavascriptJavaBridge,这个类有一个evalString方法可以执行js代码,它位于frameworks\js-bindings\bindings\manual\platform\android\java\src\org\cocos2dx\lib文件夹下。我们将会给刚才的Alert对话框增加一个按钮,并在它的响应中执行js。和上面的情况相反,这次执行js代码必须在gl线程中进行。
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//一定要在GL线程中执行
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.log(\"Javascript Java bridge!\")");
}
});
}
});
这样在点击OK按钮后,你应该可以在控制台看到正确的输出。evalString可以执行任何js代码,并且它可以访问到你在js代码中的对象。
Android平台,怎么调用javascript操作网页和js调用系统功能
预期效果:1、java编程实现显示一个网页显示(list,list中有电话号码),网页中的数据内容由程序传过去。
2、点击网页中的电话号码部分,调用手机的打电话界面。
具体实现:
1、在assets中定义index.html文件,这个文件中table中的数据由javascript生成
ps:
(1)contactlist(jsons)将由java程序调用
(2)onload="javascript:myjavascript.show():javascript调用java程序,详情见下文
2、下面是java程序代码,首先是布局文件,很简单,就是一个webview
4、MyJavaScript负责提供数据并显示html
至此,java程序与javascript之间的双向调用已经完成了。至于我们预期目标的第2项,只需要:
(1)、在MyJavaScript类中添加方法
Java代码
/*
* 拨打电话方法
*/
ublic void call(final String phone){
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));
text.startActivity(intent);
}
/*
* 拨打电话方法
*/
public void call(final String phone){
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));
context.startActivity(intent);
}
(2)、在index.html中将
Java代码
td3.innerHTML = jsonObj.phone;
td3.innerHTML = jsonObj.phone;
修改为:
Java代码
td3.innerHTML = "《a href=\"javascript:myjavascript.call(’"+jsonObj.phone + "’)\"》" + jsonObj.phone + "《/a》";
td3.innerHTML = "《a href=\"javascript:myjavascript.call(’"+jsonObj.phone + "’)\"》" + jsonObj.phone + "《/a》";
最后记得加上打电话的权限:
Java代码
《uses-permission android:name="android.permission.CALL_PHONE"》《/uses-permission》
Android 中如何在java类中调用activity 中的一个方法
通常,您不应该以这种方式创建新的 MainActivity 实例。要打开一个新的 MainActivity,请使用 Intent。在您的情况下,您应该引用原始 MainActivity 实例,并在那里调用此方法。不要以任何方式创建新的,因为您已经在运行它。
一个简单的解决方法:
MainActivity.this.myMethod("Hello there")
您不必存储mContext. 你已经在 MainActivity 里面了。
因此,完整的代码将是:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = findViewById(R.id.webview);
***隐藏网址***
myWebView.addJavascriptInterface(new WebAppInterface(), "Android");
}
public void myMethod(String test){
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
}
public class WebAppInterface {
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
MainActivity.this.myMethod("Hello there");
}
}
}
实际上,我认为您甚至可以避免使用MainActivity.this., 并myMethod直接调用。
安卓系统怎么运行java
需要安装java才能运行的
安装JAVA程序方法:
1、在网站上搜索一个APK格式的JAVA虚拟机,下载安装程序后安装在手机上,
安装后手机上“所有程序”中增加此程序的图标,如下图(安装方法与安装
其他程序一样,通过手机浏览器下载安装或通过电脑下载安装包)
2、先下载好自己需要的JAVA安装包放在储存卡上,进入手机已安装好的“JAVA“,
再点击菜单键(手机下方三条横线的图标),点击储存卡选项
3、手机上会自动识别到储存卡上的JAVA软件,点击需要安装的一个软件,我们以安
装QQ软件为列(注意:并不是保存的所有的JAVA软件都会被识别),选择后点击确定
4、手机会提示选择文件夹,在点击空白处会自动跳转到下一个安装界面
5、界面直接切换到下一步操作界面时,会提示:应用程序手机QQ不受信任,
确定继续吗?请点击“确定”
6、点击“确定“后,手机将开始安装JAVA软件
7、安装完成后,手机会直接提示:想要启动应用程序吗?如需要启动就点击“确定“,
如不需要就点击”取消“,QQ软件就已安装完毕,如果需要使用QQ软件,就进入手机上
安装的“JAVA”程序,安装的JAVA软件都会在此程序打开后的页面显示,点击“手机QQ”即可运行

更多文章:
查看linux服务器用户(linux查看哪些用户登录linux查看哪些用户)
2026年9月7日 15:30
ps5港服公认最快的dns设置(ps5港版账号游戏没有网络)
2026年9月7日 13:30
云计算的基本原理是什么(什么是云计算 云计算的技术原理介绍【详解】)
2026年9月7日 12:00
1000个监控需要几台服务器(我要用电脑做监控主机,要安装30个监控射像头,电脑需要什么配置)
2026年9月7日 08:30
sip服务器处理register消息(请问什么是SIP协议)
2026年9月7日 06:30





