您的位置:首页 > 移动开发 > Unity3D

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

2017-06-24 20:50 1021 查看

步骤

制作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的分享,大家可以看看,一步步做,慢慢查问题,还是可以做出来的,虽然我打个包花了我好几天

再见
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: