IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 安卓打包AAR 给unity -> 正文阅读

[游戏开发]安卓打包AAR 给unity

说明:本文使用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就好了

一.依赖文件导入

  1. 导入unity的 classes.jar文件到 安卓studio的libs文件夹.
    地址:Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
    !!!高版本 classes.jar里面没有unityPlayerActivity,需要自己去这个地址导入 该脚本文件

  2. 导入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' //library 是打包库文件 
//一. apply plugin: 'com.android.application' //application 是打包apk包

android {
    //二 .如果打包apk包的话,这里会有一个 打包的apk 包名 , 打包库文件则必须删除掉这个包名.
    //applicationId "com.sanhe.DOUYU"
    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);
        //不需要显示UI 所以删除掉
    }
    //这个方法是测试函数
    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 文件夹下+

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:07:54  更:2021-10-07 14:08:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:33:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码