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工程。
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工程。
相关文章推荐
- 【Unity】关于LightMap过度曝光、NormalMap变红
- Unity动态对象优化
- Unity系列文章
- Unity全面优化
- Unity 的延时加载(defer resolve)
- Unity获取场景gameobject的路径
- Ubuntu unity 桌面正常工作在VNC上
- Unity3D 学习 控制角色运动控制
- Unity NGUI之ScrollView扩展-2
- unity 导出包后 xcode build 报错il2cpp_codegen_initialize_method
- Unity NGUI之ScrollView扩展-1
- Unity5.3 JSON的序列化
- unity 5.3 的 JSON Serialization
- unity 固定管线shader转换到顶点片段着色器
- Unity关于 "Move" can only be called on an active agent that has been placed on a NavMesh.问题的解决办法
- unity3d调用jar类中的方法和属性
- Unity for iOS 打开相册、相机及保存图片到相册
- Unity 5 中的全局光照技术详解
- Unity重复开关Collider造成的刚体Bug,以及重现
- Unity 几种比较简单的加载动画