Android/Unity实战篇:打包代码为jar/aar供Unity调用(完整版)

版权声明:转载请注明出处!不注明也无所谓,嘿嘿。 https://blog.csdn.net/qq_15020543/article/details/82976850

先说一下原由,本来只是在游戏里添加一个很简单的功能——点击一个按钮,复制文本内容到安卓粘贴板,然后........就没有然后了。

环境:

         jdk1.8.0_171

         Android Studio 3.0(奉劝大家没什么需要不要更新,我更新到3.0都后悔了)

         Unity 5. 6 .1f (这个版本很舒服)

         所需类库:UnityPlayer等需要的classes.jar包。`Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono(oril2cpp)\Release\Classes`如果是Mono2x就选择momo下面的,如果是IL2CPP就选择il2cpp下面的,请务必检查自己所需要的路径下有没有classes.jar文件,没有的话请从网上下载另一个路径下复制。

 

            

1.环境准备

https://blog.csdn.net/qq_15020543/article/details/80525743

2.先创建一个新Android Studio工程

这里的minimum SDK需要和Unity PlayerSetting的相一致

点Finish

2.准备工作(此部分参考https://blog.csdn.net/ZhangDi2017/article/details/65629589这位大神的博客)

点击Finish后进入编辑器界面,空无一物,点击左侧的Project,然后切换至Project视图,如图下图左所示。随后在项目名称上点击右键选择New -> Module来创建一个新的模块,这时新的创建向导会启动,选择Android Library类型,随后输入包名的配置与Mininum SDK,注意这里的Package Name需要和Unity项目中的Bundle Identifier保持一致(包括大小写),其余两个可以随意,保持一致的原因是Unity在最后打包时会将所有插件里的AndroidManifest.XML进行合并,如果包名不一致就会出错;而Mininum SDK这里需要在Android 3.0(API 11)以上,因为随后会用到Android 3.0之后才支持的Fragment特性,最后点击Finish完成创建。

这个mylibrary是之前创好的,如果小伙伴们按上面的填写,应该是mylibrary2

在新的Library创建完成后,需要删除app相关的内容。点击菜单栏File -> Project Structure,选中左侧的app然后点击上方的`-`号,最后点击OK,稍等一会儿,Gradle Build会完成构建(可以注意到每次进行一次大的操作如增删,Android Studio都会编译一下项目,所以构建的时候请坐和放宽)。回到Project视图,右键点击app,选择删除。展开Library目录如下图中所示,以后所有的开发操作都会在创建的这个Library下面进行。下面对项目的结构进行一些说明。build/outputs/aar/文件下面是构建生产的供Unity使用的aar文件(aar文件和jar文件类似,Unity可以识别);libs文件夹下面是项目以来的类库,可以说各种SDK的jar等等;最后是src文件夹,这里面存放了AndroidManifest以及源码。这些内容有一些是不需要的,例如一些单元测试的内容,我们删掉测试工程以及res下面的Android自带的资源及配置,最后的项目结构如下图所示(如果有些文件夹没有,可能是AS版本问题,大家可以先不管,最后出问题了再说),只保留了AndroidManifest.xml。

(注意,如果下方有提示SDK路径不应有空格,请转移SDK到新路径(为英文),否则这里的操作皆为无效最终会导致打包失败!)

Android Manifest.xml文件,第二行Package要填写自己的包名

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.li.copy" >
    <application android:allowBackup="true" android:supportsRtl="true"></application>
</manifest>

最后就是编写我们的插件或者对接第三方SDK了。首先引入Unity的jar包,将classes.jar拷贝到文件夹里libs文件夹下面,

点击File -> Project Structure,在左侧选择我们的插件,然后在上方选择Dependencies,先删除的现存的所有依赖库,然后点击`+`号 ->Jar Dependency添加Unity的jar包

点击OK完成设置,稍等一会儿就完成了构建。对于第三方SDK的jar包,以同样的方式进行引入。 

3.导出工作

<1>aar(推荐)

右侧Gradle

在左侧的Project面板可以看到相关的aar文件了,这个aar文件就是最终输出给Unity使用的aar包,拿到aar包之后,需要进行一项关键的操作,将其后缀改为压缩格式(zip或rar)打开压缩包删除掉libs/下面的classes.jar(原因是Unity在打包的时候会再次拷贝安装目录下的classes.jar到项目中造成冲突)!

最后将aar文件后缀改回为aar拷贝至Unity工程中Plugins/Android文件夹下

<2>jar

创建一个

package com.li.copy;

import android.content.Intent;
import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;

public class Activity  extends UnityPlayerActivity {
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
    }

    public void ShareText(String message, String body) {
        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/plain");
        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, message);
        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
        startActivity(Intent.createChooser(sharingIntent, "Share via"));
    }

}

在其末尾添加,然后点一下右上角的Sync Now

//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

拷贝到Unity

参考

https://blog.csdn.net/ZhangDi2017/article/details/65629589

https://www.jianshu.com/p/8256c0da444a

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/82976850