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的分享,大家可以看看,一步步做,慢慢查问题,还是可以做出来的,虽然我打个包花了我好几天
再见
相关文章推荐
- Android使用gradle不同配置多项目打包
- [置顶] android项目生成aar包和在其他项目中的使用方法详解
- Unity3d使用Jenkins打包Android
- Android基础--Android Studio中使用Gradle发布aar项目到JCenter仓库
- Android项目使用Ant打包,自动生成build.xml
- 【Android】google plus、Facebook登陆sdk集成打包出aar的使用步骤
- (转)Android使用ant对项目进行编译签名优化打包
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Eclipse中使用fat-jar打包包含jar包的Android项目
- android 把activity和资源文件打包成jar包给其他项目使用
- Android项目生成aar包或者共享库文件供其他项目使用以及问题解决
- 使用Android Studio将Android项目打aar包
- Android项目使用python分语言批量打包apk渠道包
- Android项目使用Ant打包,自动生成build.xml
- Windows中使用命令行方式编译打包Android项目
- MPAndroidChart之LineChart项目使用心得
- 使用Ant批量打包Android项目
- Android使用ant对项目进行编译签名优化打包
- Android使用gradle不同配置多项目打包
- Android使用ant对项目进行编译签名优化打包