Unity3D之android打包成aar

前言

      unity for Android相对于IOS比较特殊,IOS可以打包到xcode然后在code中修改和调试,虽然Android也可以build出数据,但是你看不到源码无法调试,现在很多开发者将Android源码打包成aar的方式放入到unity工程里,相对于以前的jar,aar可以将资源文件等打入使用,和IOS没有对比就没有伤害啊,调试是个麻烦的事,在这也有好多的坑,实话我是从0开始踩了好多坑。接下来我们开始搞事。

1、首先在Android studio生成一个mudule(可以新建)

怕有些事unity的哥们,没搞过Android那就从studio开始吧,我这里的IDE版本是2.3,最新的应该是3.1bate了。不过都基本一样的。能抓老鼠就是好猫,但是代码需要多理解去深究。
①、点击start a new Android studio project


image.png

②、
image.png

③、
image.png

④、接下来是选择模板的,亲儿子就是亲儿子,可以给开发者写好基础的模板和控件
image.png

⑤、
image.png

⑥、从unity目录下拷贝出我们需要的classes.jar打Android项目中。
下面是windows和mac下的classes.jar存放路径
(Win path) C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar  
  
(Mac path) Unity.app(show packages)Applications\Unity(rightclick ShowPackageContent)PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\ckasses.jar

⑦、将包引入
image.png

⑧、前面说那么可能大家都可能会,下面开始写代码了。

编写Android代码(直接在MainActivity中开始修改)
public class MainActivity extends UnityPlayerActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
    }

    public void ShowToast(final String msg){
        //保证运行在UI线程中
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
            }
        });
    }

    //静态方法
    public static String GetUserInfo(){
        return "这个是静态方法的";
    }

    public String GetData(){
        return "这个不是静态方法";
    }
}
修改mainfest

加了一个meta-data

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hello.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".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" />
        </activity>
    </application>
</manifest>
修改app下或者说mudle的build.gradle

①、apply plugin: 'com.android.application' 修改为 apply plugin: 'com.android.library'
②、注释applicationId "com.example.hello.myapplication"
修改后的gradle:

//apply plugin: 'com.android.application'
apply plugin:'com.android.library'
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
//        applicationId "com.example.hello.myapplication"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
//        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //如果需要v7包,需要下载V7的jar,然后引入,在gradle引入会报错说找不到class
//    compile 'com.android.support:appcompat-v7:26.+'
    testCompile 'junit:junit:4.12'
    compile files('libs/classes.jar')
}

导出我们的aar包

①、可以使用Android studio中的菜单,Build->Build APK,生成aar文件
②、使用gradlew 命令生成./gradlew assemblerelease,或者./gradew build。在Android studio有命令行工具,这样就不需要切换目录,如果是自己系统的需要切换的工程下。
命令如下:


image.png

编译报错了,说用到了资源,先把资源注释或者删除。


image.png

接下来就在得到aar文件
image.png
用压缩软件打开,删除aar下的libs下的classes.jar(重要)

这个jar包就是我们刚开始导入的unity提供交互的一个classes.jar,这里打开不是指解压开,而是用压缩软件打开,然后找到libs下,将刚才的classes.jar删除,因为不这样做会在unity打包的时候出现重复添加包的错误。

=====================上门是Android打包成aar=======================

Unity中操作了

1、在unity中的Assets下新建文件Plugins,在Plugins下新建Android,将aar和Manifest.xml放入。或者像我下面一样分开放
image.png
2、编写unity代码
public class TestCtrol : MonoBehaviour
{
    //unity中的显示控件
    public Text mShowInfo, mShowStaticInfo;

    AndroidJavaObject jo = null;
    AndroidJavaObject JO
    {
        get
        {
            if (jo == null)
            {
                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            }
            return jo;
        }
    }
    void Start () {
        //toast
        JO.Call("ShowToast", "成功了6666666");
        string msg = JO.Call<string>("GetData");
        string staticMsg = JO.CallStatic<string>("GetUserInfo");
        mShowInfo.text = msg.ToString();
        mShowStaticInfo.text = staticMsg.ToString();
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}
3、编译打包
image.png
image.png

4、点击build and run

5、测试结果

image.png

新手上路遇到太多的坑了,希望给大家一些帮助,有不对地方还望指点,本人对unity也是新手一个。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容