您的位置:首页 > 移动开发 > Unity3D

Unity3D-Android版本调用Java函数

2016-02-26 17:42 621 查看
运行环境是: 我的Unity3D版本是5.3.0 ,Window10

Java版本是 java version "1.8.0_73"

Java(TM) SE Runtime Environment (build 1.8.0_73-b02)

Java HotSpot(TM) Client VM (build 25.73-b02, mixed mode, sharing)

1,下载 http://docs.unity3d.com/Manual/PluginsForAndroid.html

http://docs.unity3d.com/uploads/Examples/AndroidJavaPlugin.zip 下载示例工程



该工程实现了两种测试例子

(1)CallNativeCode 测试Unity3D调用C++函数;

(2)JavaScriptExample在Unity3D中通过C++封装libjni.so 调用 AndroidJava.jar中提供的Java函数。 AndroidJava.jar是打包.class的包。

Android手机运行的的路径是:

/mnt/shell/emulated/0/Android/data/com.xxx.xxx

2.具体编译

(1)编译Java函数代码文件,首先注意

生成的.class 文件应该在 xxx\src 目录下的 org\example\ScriptBridge 目录中



(2)打包,我是把xxx\src\org 目录取出来放到一个Package目录中进行打包,此时进入到 E:\all-code\Package 目录下,然后执行

jar -cvf AndroidJava.jar *



命令行执行后会自动把 E:\all-code\Package 中的org文件夹进行打包生成一个AndroidJava.jar保存到 E:\all-code\Package.



C:\Users\qianwan>E:

E:\>cd E:\all-code\Package

E:\all-code\Package>jar -cvf AndroidJava.jar *

注意,打包时必须保证打包执行时命令行处于 org文件夹的所在父目录,如下图



如果不是在这个目录基本打包,在Unity3D中执行编译会出现这个错误:

Converting java.class to dex-format Unable convert classes into dex format.



(3)编译完成Java代码,生成AndroidJava.jar拷贝到 Assets\Plugins\Android\bin目录下面。

官网上说:

Note: Unity expects Java plugins to be built using JDK v1.6. If you are using v1.7, you should include “-source 1.6 -target 1.6” in the command line options to the compiler

但是我使用的Java 1.8,编译打包没有增加 -source 1.6 -target 1.6,也是可以正常编译Unity3D版本的。

3.使用NDK命令行编译C++接口库

E:\all-code\Package>cd E:\all-code\AndroidJavaPluginProject\JavaPluginSample\Assets\Plugins\Android

E:\all-code\AndroidJavaPluginProject\JavaPluginSample\Assets\Plugins\Android>ndk-build

[armeabi] Install : libjni.so => libs/armeabi/libjni.so



E:\all-code\AndroidJavaPluginProject\JavaPluginSample\Assets\Plugins\Android>

从 Assets\Plugins\Android\libs\armeabi中把生成的libjni.so库复制到 Assets\Plugins\Android 文件夹。

4.连接Android手机,编译Unity3D工程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: