Android 打包aar给unity3d使用 项目心得

2023-11-18

步骤

  • 制作androidproject
  • 修改build.gradle配置
  • 打包aar
  • 1.混淆打包aar
  • 2.jar包导出
  • 3.在其他的android工程引入aar
  • 导入unity项目
  • 运行unity3d输出apk包

新建一个project

打开AS,新建–>project
这里写图片描述
切换到project项目下面
找到app Moudle
找到libs,将unity3d 提供的jar包拷贝到libs下面,右键 ->open Moudle setting ,选择Moudle ,点击dependence
如图
添加lib
选择拷贝到libs下面的文件unity_class.jar
MainAvtivity extends UnityPlayerActivity
注意要将setContentView()注释掉,不加载界面
终于到设置build.gradle
打开app的build.gradle,将apply plugin: ‘com.android.application’修改为apply plugin: ‘com.android.library’,并且删除applicationId “com...*
如果需要混淆打包配置buildtypes
buildTypes {
release {
// Set minifyEnabled to true if you want to run ProGuard on your project
minifyEnabled true

        //对齐
        zipAlignEnabled true

        //移除无用的resource 文件
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'


    }
}

不需要混淆打包就设置minifyenable false;
修改完gradle 点击Sync Now,完成之后找到 gradle project窗口,找到app(本Moudle的gradle),右键 refresh external project,打开build,找到build命令,运行,生成aar文件,文件一般声称在outputs->aar里面,debug是没有混淆的,release是混淆的。
但是但是,我们不需要混淆所有的类文件,这就需要找到gradle里面的这句话
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-unity.txt’
,这里的混淆的规则文件在proguard-unity.txt 里面
-keep是不混淆
-keep class *.R
不混淆R文件
-keep class com.example.zhcase.unity3d.MainActivity{*;}
不混淆MainActivity类
-keep class com.example.zhcase.unity3d.BLEDeviceManager{*;}
-keep class com.example.zhcase.unity3d.BleDevice{*;}
-dontwarn com.unity3d.player.**
-keep class com.unity3d.player.UnityPlayerActivity{*;}
-keep class com.unity3d.player.* {;}
不混淆com.unity3d.player包下面所有的类

大概就是这样子 不明白的可以查下百度
类似的文章还是蛮多的

打成jar包

*在build.gradle 加入
//task makeJar(type: Copy) {
// delete ‘build/libs/mysdk.jar’
// from(‘build/intermediates/bundles/release/’)
// into(‘build/libs/’)
// include(‘classes.jar’)
// rename (‘classes.jar’, ‘mysdk.jar’)
//}
//
//makeJar.dependsOn(build)*
大概的意思就是新建一个task,删除旧的mysdk.jar包将jar包拷贝到libs下面,mysdk是导出的jar的包名。
还是Sync Now,在gradle project界面的other的下面找到exportjar,运行输出jar包,要是minifyEnabled还是true,输出的jar包还是混淆的。
为了测试自己导出的aar包是否可用,我自己新建了一个android project,就做一个简单的界面。
在As project中引用aar 还是需要将aar拷贝到libs文件夹,在gradle的dependencies 中加入
compile(name:’app-release’, ext:’aar’)
name后面的是aar包的包名,
rebuild project,成功的话在project会在build->intermediates下面看到explored-aar中含有这个包
然后按照普通的libs包用就可以了

导入到unity3d之前需要将原来引入的unity3d_classes.jar文件删除,因为unity3d编译时会生成自己的jar包,要是混淆打包的aar就有一个问题,需要-keep class 所有的jar文件不被混淆,然后用解压工具删除classes.jar的包含的unity3d_classes的文件。

在unity工程中Assets->plugins->android
这里写图片描述
Mainfest的文件是从As中项目拷贝过来的,unity的projectname和Mianfest的packagename一致

Unity调用android的方法

AndroidJavaClass jc = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject jo = jc.GetStatic(“currentActivity”);
jo.CallStatic(“StarScane”);

带参数

public void connect(string address)
{
#if UNITY_ANDROID
text.text += “连接设备”;
AndroidJavaClass jc = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject jo = jc.GetStatic(“currentActivity”);
jo.CallStatic(“connect”,address);
#endif
}

最后build&run,我在这一步还是遇到很多问题,配置SDK路径,显示platforms的Api is 0 ,这类错误基本是SDK路径错误,或者去AS下面的SDKManager更新下SDk版本,也可能会和build tools有关系,反正觉得有问题的你都下载吧 我就是这么解决的,JDK的路径和AS的一样就好
build&run运行到手机就可以
[TOC]
感谢http://www.cnblogs.com/xtqqkss/p/6387271.html的分享,大家可以看看,一步步做,慢慢查问题,还是可以做出来的,虽然我打个包花了我好几天
再见

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 打包aar给unity3d使用 项目心得 的相关文章

  • AI绘画指南:在CentOS7中安装Stable Diffusion WebUI

    一 安装GPU驱动 1 1 购买云服务器 在腾讯云选购一台GPU型的服务器 最好的境外的 境外的服务器后面关于镜像加速的步骤都可以跳过 购买成功之后腾讯的站内信会发送初始的密码给你 登录成功后会自动帮我们安装相关的驱动 提示整个过程大概需要
  • LeetCode-283. 移动零【数组,双指针】

    LeetCode 283 移动零 数组 双指针 题目描述 解题思路一 首先想到的是双指针 但是不行 非零元素的位置会改变 解题思路二 改进的是每次从当前0元素的位置取后面第一个非0元素替换过来 替换之和那个break非常重要 解题思路三 优
  • Future 和 Callable

    一 Runnable 缺陷 不能返回一个返回值 不能抛出 checked Execption 二 Callable接口 类似于Runnable 被其他线程执行的任务 实现call方法 有返回值 三 Future的作用 Callable和Fu
  • 【infiniband】 MAD、 uMAD、Verbs、RDMACM

    1 MAD Management Datagram MAD是InfiniBand网络中用于管理和配置的数据报文 它包含了各种类型的管理操作 如查询端口状态 配置端口参数等 MAD通常用于执行网络管理任务 2 uMAD User MAD uM
  • 模板类 通用数组的实现

    实现自定义数组 重载 lt lt 运算符 并且数组可以使用自定义类 头文件 ifndef MYARRAY H define MYARRAY H include
  • pandas datetime与时间戳互相转换,字符串转换datetime

    参考pandas to datetime的api 字符串转换为pandas datetime 通过to datetime函数可以把字符串转换为pandas datetime df pd DataFrame date 2011 04 24 0
  • python的xlrd、xlwt模块/pymsql使用

    xlrd模块 https www cnblogs com machangwei 8 p 10736528 html label0 xlwt模块https www cnblogs com machangwei 8 p 10738244 htm
  • Filter过滤器实现权限拦截

    一 要求 用户登陆之后才能进入主页 用户注销之后不能进入首页 二 思路 用户登陆之后 向session中放入用户的数据 进入主页的时候要判断用户是否已经登陆 在过滤器中实现 public void doFilter ServletReque
  • 电脑怎样连接打印机?分享4个简单操作!

    为了更方便学习 我买了一个打印机来打印需要用的资料 但是操作了半天还是没连接上 想请问一下有经验的朋友是怎么将打印机与电脑进行连接的呢 在现代人的工作和生活中 打印机是一个重要的设备 我们可以利用打印机进行资料 文件等的打印 但是也会有很多
  • SpringBoot调用PageHelper.startPage(Object params)报错:分页查询缺少必要的参数:XXX

    问题描述 项目中使用了MyBatis分页插件 调用以下方法实现分页 无论传入JavaBean还是Map都报错 分页查询缺少必要的参数 XXX Map
  • 【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生

    前言 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的Linux或Windows操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何接口 云原生
  • Python学习 第二章 数据类型

    Python学习 第二章 数据类型上 1 数字 1 1 整型 int 1 2 浮点型 float 1 3 布尔类型 bool 1 4 代码实现 1 5 复数 2 字符串 string 2 1 如果字符串内容中出现了引号 2 2 代码实现 2
  • pandas生成excel文件

    可以使用pandas中的to excel 函数将DataFrame数据写入Excel文件 例如 import pandas as pd 创建测试数据 data name Mike John Bob age 25 32 45 city New
  • STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

    目录 一 SPI简介 1 1电路模式 1 2通信原理 1 3SPI时序基本单元 1 3 1起始和终止 1 3 2交换字节 二 W25Q64 2 1W25Q64简介 2 2W25Q64硬件电路 2 3W25Q64框图 2 4Flash操作注意
  • double类型精度丢失问题以及解决方法

    double类型精度丢失问题 1 加法运算 public static void main String args double number1 1 double number2 20 2 double number3 300 03 dou
  • arcgis for android 学习 - (5) 在地图指定位置添加“标记“,并尝试选中它

    我做一个例子 1 首先显示一个地图 2 点击 添加要素 按钮后再次点击地图 将会在地图上添加 红色的位置标记 3 再次点击按钮后 这时 就可以点击刚刚添加的 红色的位置标记 就可以查看到 该标记关联到得属性值 布局
  • NO.17 浅谈共识机制(POW、POS、DPOS、PBFT、POP)

    区块链是一种去中心化的分布式账本 可以简单理解为分布在全球各个节点的分布式数据库 数据库由区块按时间顺序相连而成 区块中记录的是数笔交易 为了能支持这一套系统的运行 需要各节点矿工的参与 他们参与的主要原因是因为有奖励 奖励可以去交易所换成
  • kafka消费者客户端线程安全以及多线程实现并发读取消息

    kafka的生产者客户端Producer是线程安全的 但是消费者客户端是非线程安全的 每次操作时都会调用accqure方法用来确定当前只有一个线程操作 如果有多个线程在操作 会抛出CME异常 针对这种情况 为了能够多线程更快速的读取消息 可
  • 【Python 1-17】Python手把手教程之——文件的读写以及I/O操作

    作者 弗拉德 来源 弗拉德 公众号 fulade me 从文件中读取数据 文本文件可存储的数据量很多 每当需要分析或修改存储在文件中的信息时 读取文件都很有用 对数据分析应用程序来说尤其 如此 例如 你可以编写一个这样的程序 读取一个文本文
  • 研发人员欠缺的“不要脸”文化

    一直感觉研发人员相对市场人员确实缺少点什么 今天听到一个原华为的人说华为的文化中有一个 不要脸 文化 讲的就是研发人员要特别注意的事项 特别说明 不要脸 三个字 据说是任正非认为这样好记 才取得名字 这三点是 抬头看路 找人问路 请人带路

随机推荐

  • 由先序中序,或后序中序,可以唯一确定二叉树;完全二叉树的顺序存储,c/c++描述

    这是课本里的 两个定理 由先序 根左右 后序 左右根 可以确定根节点是哪个 由中序 左根右 可以确定左子树和右子树的范围 所以我们也找到了二叉树的左子树和右子树的先序 或后序 和中序排列 由归纳法 可得出这个构造二叉树链表的方法 对于完全二
  • loadrunner负载生成器;

    负载生成器 Load Generators 是脚本生成的负载引擎 相当于加压机 主要功能是生成虚拟用户进行负载 在默认的情况下使用本地的负载生成器来运行脚本 但是每生成一个虚拟用户 需要话费负载生成器大约2M 3M的内存空间 通常运行CON
  • java8有哪些jvm参数

    Java8中的JVM参数有很多种 这里列出一些常用的 server 指定JVM运行在服务器模式 在服务器环境下性能会更好 Xmx 设置JVM最大可用内存 Xms 设置JVM初始内存 XX PermSize 设置持久代 Perm Gen 的初
  • Python常用库大全

    作者 史豹 链接 https www zhihu com question 20501628 answer 223340838 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 环境管理 管理 Python 版
  • Visual Studio 2017 远程调试器(MSVSMON.EXE) 找不到连接

    Visual Studio 2017 远程调试器 MSVSMON EXE 找不到连接 用的是wifi上网 而远程主机是有线连接 经过几个小时的排查 终于发现不在一个网段内 把wifi改成有线 确保和远程主机在一个网段内 就可以联上了
  • 【node】12、Koa实现简单爬虫案例

    效果图如下 首先我们新建文件夹 进入终端 初始化node项目 npm init y 安装koa搭建服务模块 npm install koa 安装superagent发送请求模块 npm install superagent 安装cheeri
  • 有关Proteus安装时的一些报错

    在安装Proteus的之后 使用的时候经常会出现 已使用符号sMKRORIGIN但未在库中找到 或者许多找不到文件在哪里的一些许多错误 我也是经常遇到 然后也是一点一点找资料解决 有时候这种方法能够解决 有时候又不能解决 确实很让人头疼 所
  • java: MySQL Metadata

    https www baeldung com jdbc database metadata https docs oracle com en java javase 11 docs api java sql java sql Databas
  • ant design pro v5 配置拦截器,header

    ant design pro v5 配置拦截器 header 1 资料文档 https umijs org zh CN plugins plugin request requestinterceptors 2 编写app tsx 我这里是自
  • 创建一个空的Git仓库,然后本地代码推上去

    这篇文章说的是如何将本地代码库推送到远端空的代码仓库 如需了解如何从远端代码仓库克隆代码到本地 看这里 1 创建代码仓库 2 终端进入本地代码库文件夹内 3 将本地和远端联系起来 并给远端起个名字 git remote add myOwnC
  • Hudi和Kudu的比较

    与Kudu相比 Kudu是一个支持OLTP workload的数据存储系统 而Hudi的设计目标是基于Hadoop兼容的文件系统 如HDFS S3等 重度依赖Spark的数据处理能力来实现增量处理和丰富的查询能力 Hudi支持Increme
  • 微信小程序WE分析----事件分析

    目录 web分析 小程序 事件分析概述 1 新增事件管理 事件参数说明 1 填写事件配置 2 小程序添加上报代码 将上报代码添加到小程序中 3 测试事件数据上报 测试事件上报的数据是否正确 属性管理 字典管理 新增事件分析 创建事件分析 添
  • Web自动化之Selenium常用操作

    本文总结使用selenium进行web UI自动化时 会用到的一些常用操作 定位元素 driver find element by xpath 1 绝对路径 2 元素属性 3 层级和属性结合 4 使用逻辑运算符 driver find el
  • 磁盘类型和相关术语学习笔记

    磁盘类型和相关术语 在 Linux 中一切皆文件 但是类型不同 例如使用 ls l 对于设备文件和普通文件有一部分内容是不同的 即普通文件有大小 而设备文件有主设备号和次设备号 没有大小 ll 1 txt dev sda dev sda1
  • TCP/IP、UDP协议

    TCP IP协议是Internet最基本的协议 Internet国际互联网络的基础 由网络层的IP协议和传输层的TCP协议组成 通俗而言 TCP负责发现传输的问题 一有问题就发出信号 要求重新传输 直到所有数据安全正确地传输到目的地 而IP
  • module ‘keras.api._v1.keras.datasets.mnist‘ has no attribute ‘train‘AttributeError: module ‘numpy‘ h

    AttributeError module numpy has no attribute no nep50 warning 尝试过更新numpy但是更新不了 module keras api v1 keras datasets mnist
  • 常见 Web 中间件及其漏洞概述(一):IIS

    目录 PUT漏洞 漏洞原理 复现 修复 短文件名猜解 漏洞原理 IIS短文件名产生 复现 短文件漏洞的局限性 IIS短文件名扫描工具 修复 远程代码执行 解析漏洞 IIS 6 0 基于文件名 基于目录名 IIS 7 0 7 5 IIS PH
  • docker容器内访问宿主机127.0.0.1服务

    docker容器内访问宿主机127 0 0 1服务 原创 技术生活 技术生活 2020 04 15 09 00 点击上方 技术生活 选择 设为星标 做积极的人 而不是积极废人 背景 原因分析 解决方案 背景 已经通过docker启动的ela
  • mac m1 搭建 arduino 环境

    前前后后弄了几次 arduino 环境 这次就以 mac m1 为例 来做一个笔记 搭建 arduino 首先 第一步肯定是安装 arduino 这直接去官网下载安装就好了 地址放在下面 https www arduino cc en so
  • Android 打包aar给unity3d使用 项目心得

    步骤 制作androidproject 修改build gradle配置 打包aar 1 混淆打包aar 2 jar包导出 3 在其他的android工程引入aar 导入unity项目 运行unity3d输出apk包 新建一个project