说明:本文使用unity2019.4.24f1c1 ,
安卓studio 为:
Android Studio Arctic Fox | 2020.3.1 Patch 2 Build #AI-203.7717.56.2031.7678000, built on August 27, 2021
sdk 使用: 30
建议尽量一致
新建一个项目.空白activity就行.包名com.xxx.xxx格式
如果找不到文件夹,把android 改成 project就好了
一.依赖文件导入
-
导入unity的 classes.jar文件到 安卓studio的libs文件夹. 地址:Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar !!!高版本 classes.jar里面没有unityPlayerActivity,需要自己去这个地址导入 该脚本文件 -
导入unityPlayerActivity.java文件. 地址:Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player 直接放着main下的java文件夹下.报错是因为没有导入包.导入一下即可
!!!注意:打包完成后,aar包体内的libs文件夹下的classes.jar必须删除掉,不然会冲突使unity无法正常打包
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.IUnityPlayerLifecycleEvents;
二.修改app文件夹下的build.gradle 文件
apply plugin: 'com.android.library'
android {
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/classes.jar')
}
新建的工程如果做完了 上面的一和二,可以点击小锤子或者菜单 BUILD->make moudle"你的应用" 试试打包一次,如果没有出错应该是可以在 aap->build->outputs->aar 文件夹下面看到你打包的 aar文件.
三.修改Main主函数代码
package com.sanhe.DOUYU;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
import java.text.SimpleDateFormat;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void ShowDate(){
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date = sDateFormat.format(new java.util.Date());
UnityPlayer.UnitySendMessage("Main Camera","GetDate",date);
}
public void ShowToast(String str){
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
将不需要的layout也删除掉,不需要的xml也删除掉.
四.修改 清单文件 androidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sanhe.DOUYU">
<!--不要保留不需要使用的各种数据,如图标,appname,还有主题,大体按这个复制就好了,后续会涉及一个清单合并的问题.暂时不考虑 -->
<!-- android:name使用你的包名和主函数 -->
<!-- android:theme使用安卓默认的无标题主题-->
<!-- meta-data android:name 保证unity可以正常执行-->
<application
android:allowBackup="true"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar">
<activity
android:name="com.sanhe.DOUYU.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"></meta-data>
</activity>
</application>
</manifest>
重新打包即可.在outputs文件下的aar文件夹里面,右键鼠标找到open in,然后点击explorer,在资源管理器中打开, 打开该压缩包,如rar或7z都可以,然后找到里面的libs文件夹,将里面的classes.jar删除,unity在打包的时候会有一个,如果不删除会重复冲突. 然后将aar 包和androidManifest 导入unity.
UNITY调用方法
//com.unity3d.player.UnityPlayer 不要动
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//这个代码必须是在安卓平台才能使用,使用unity编辑器 无法使用的!
AndroidJavaObject mainActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
//call 方法名和参数..多个参数以数值形式传递?
mainActivity.Call("ShowToast", "Unity调用安卓Toast了");
unity打包后清单文件异常处理.多个桌面图标
public void loadApp(String APP_id){
PackageManager packageManager= this.getApplicationContext().getPackageManager();
String url = "taptap://taptap.com/app?app_id="+APP_id+"&source=outer|update";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
由于unity 会自动合并清单文件.造成安装之后出现两个或多个图标.
<category
android:name="android.intent.category.LAUNCHER" />
该代码会生成一个桌面图标或启动器.如果同时存在多个则会生成多个图标.
可以通过将打包的的apk包. 直接拖到 androidStudio 里面查看 生成后的androidManifest文件.
建议多jar或aar引用的时候,使用不自动合并的androidManifest.
将使用的androidManifest文件放到:Assets\Plugins\Android 文件夹下+
|