//-------------------------------------------------------------------
安装JDK与JRE,目录随意,不是同一个且记住就行。
安装完成后,此电脑(Win7叫计算机),右键,属性,高级系统选项,环境变量
系统变量,新建,JAVA_HOME变量
变量值选择或填写JDK的安装目录
系统变量,找到Path变量(已经存在的),编辑
在变量值最后输入JDK安装目录下的bin目录(可以直接输入也可以写成%JAVA_HOME%\bin)与JRE安装目录下的bin目录
注意:原Path变量最后若已经有分号则不用加,否则先加一个分号再输入
系统变量,新建,CLASSPATH变量
变量值填写(可直接复制下一行内容)
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
运行cmd 输入 java -version与javac -version
java或javac和 -version 之间有空格
若显示版本信息 则说明安装和配置成功
//-------------------------------------------------------------------
Unity发布Andriod注意:
Internal:
可以不签名,使用默认的
Gradle:
必须有自己的签名
1.使用cmd进入jdk\bin目录下
cd D:\Java\jdk1.8.0\bin
2.keytool(钥匙工具) -genkey(生成钥匙) -alias(别名) Liang(自己起的名字) -keyalg(加密方式RSA) RSA
-validity(有效时间,天) 36500 -keystore(密钥库文件名) liang.keystore(必须.keystore)
3.一路输入
Unity打包错误:
CommandInvokationFailure: Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.
D:/Java/jdk1.8.0\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Java/sdk\tools" -Dfile.encoding=UTF8 -jar "D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -
stderr[
Error:Invalid command android
]
stdout[
]
新版SDK中的tools工具不兼容
//----------------------------------------------------------
调试:
1.com.unity3d.genericremote.apk(UnityRemote)
2.AS
3.模拟器
1.UnityRemote使用
Editor Setting->UnityRemote->Device->Any
2.使用AndriodStudio AVD
Tools->Android-> AVD
//----------------------------------------------------------
实际正交视口 = 初始正交视口 * 初始宽高比 / 实际宽高比
//----------------------------------------------------------
Andriod与Unity互相调用
1.导出jar包 + 拓展MainActivity + Java主导
新建Activity->勾选Launcher Activeity
导入unity包 D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
放入libs中
将app->manifeste中的xml文件复制到新建的Activeity中的manifeses中,修改
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.geefish.testlibrary">
<application
android:allowBackup="true"
android:label="UnityAndriodTest"
android:supportsRtl="true">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="
android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
进入新建的MainActivity中,继承UnityPlayerActivity
在MainActivity中实现方法
选中新建的库,然后Build->Make Moudle"xxx"
切回Project build->intermediates->bundles->debug就是打包出的 将libs与res考出
使用外部的classes.jar替换libs中的文件
build->intermediates->manifeste->full->debug 中的xml文件考出
修改xml文件中的包名,改成与unity一至,全小写
文件中的android:label="UnityAndriodTest"属性会是打出包的名字
打开unity,切换成andriod平台,改包名
将三个文件放入 Plugins->Android 下
使用:
private void Start()
{
//获的位于com.unity3d.player包下UnityPlayer类
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//获得类下的对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
//调用方法,泛型表示有返回
jo.Call<int>("Add", 1, 2);
}
Andriod调用Unity:
UnityPlayer.UnitySendMessage("","",""); 1.脚本所在物体 2.方法名 3.参数
//---------------------------------------------------------------------------
Andriod与Unity互相调用
2.导出aar包 + 拓展MainActivity + Java主导
修改icon 将app->manifeste中的xml文件复制到新建的Activeity中的manifeses中,修改
增加 android:icon="@mipmap/ic_launcher"
将app->res->mipmap复制到自己的res文件中
与之前一样,导出后,找到build->outputs->arr,把里面文件考出
build->intermediates->manifeste->full->debug 中的xml文件考出进行修改
外面的xml照常修改,aar包里的xml不动包名,删除icon和lable属性
aar包里的libs下的classes.jar删除并换成aar包根目录下的文件
使用和别的一样
//---------------------------------------------------------------------------
Andriod与Unity互相调用
2.提供额外的类 + Java主导
新建Modle
导入unity包 D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
放入libs中
在 java->第一个文件夹中新建java class
选中新建的库,然后Build->Make Moudle"xxx"
切回Project build->intermediates->bundles->debug中,使用classes.jar(可改名)放入 Plugins->Android 下
不是静态方法,就是得到类的对象,如果是静态方法,需要得到类
private void Start()
{
//获得类下的对象(包名.类名)可以给构造方法传参
AndroidJavaObject jo = new AndroidJavaObject("com.example.geefish.simplelibrary.Test");
//调用方法,泛型表示有返回
jo.Call<int>("Add", 1, 2);
}
private void Start()
{
//获得类下的对象(包名.类名)可以给构造方法传参
AndroidJavaClass jc = new AndroidJavaClass("com.example.geefish.simplelibrary.Test");
//调用类下静态方法
jc.CallStatic<int>("Add", 1, 2);
}
Andriod与Unity互相调用
3.C#主导(使用C#调用SDK)主要是找到所在包名
private void Start()
{
//获得类下的对象(包名.类名)可以给构造方法传参
AndroidJavaObject jo = new AndroidJavaObject("com.example.geefish.simplelibrary.Test");
//调用方法,泛型表示有返回
jo.Call<int>("Add", 1, 2);
}
private void Start()
{
//获得类下的对象(包名.类名)可以给构造方法传参
AndroidJavaClass jc = new AndroidJavaClass("com.example.geefish.simplelibrary.Test");
//调用类下静态方法
jc.CallStatic<int>("Add", 1, 2);
}
AndroidJavaProxy的使用模拟java中的接口
class DateCallBack : AndroidJavaProxy
{
public DateCallBack() : base("包名$接口名")
{
}
//接口中的方法
}
Unity与Android相互调试,调用
最新推荐文章于 2024-07-26 15:06:36 发布