美文网首页
Unity3D之android打包成aar

Unity3D之android打包成aar

作者: 圈圈猫 | 来源:发表于2018-01-08 17:01 被阅读1720次

前言

      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也是新手一个。

相关文章

网友评论

      本文标题:Unity3D之android打包成aar

      本文链接:https://www.haomeiwen.com/subject/kdrdbxtx.html