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


Unity3D之android打包成aar_第1张图片
image.png

②、
Unity3D之android打包成aar_第2张图片
image.png

③、
Unity3D之android打包成aar_第3张图片
image.png

④、接下来是选择模板的,亲儿子就是亲儿子,可以给开发者写好基础的模板和控件
Unity3D之android打包成aar_第4张图片
image.png

⑤、
Unity3D之android打包成aar_第5张图片
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

⑦、将包引入
Unity3D之android打包成aar_第6张图片
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




    
        
            
                
                
            
            
        
    

修改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有命令行工具,这样就不需要切换目录,如果是自己系统的需要切换的工程下。
命令如下:


Unity3D之android打包成aar_第7张图片
image.png

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


Unity3D之android打包成aar_第8张图片
image.png

接下来就在得到aar文件
Unity3D之android打包成aar_第9张图片
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放入。或者像我下面一样分开放
Unity3D之android打包成aar_第10张图片
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("currentActivity");
            }
            return jo;
        }
    }
    void Start () {
        //toast
        JO.Call("ShowToast", "成功了6666666");
        string msg = JO.Call("GetData");
        string staticMsg = JO.CallStatic("GetUserInfo");
        mShowInfo.text = msg.ToString();
        mShowStaticInfo.text = staticMsg.ToString();
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}
3、编译打包
Unity3D之android打包成aar_第11张图片
image.png
Unity3D之android打包成aar_第12张图片
image.png

4、点击build and run

5、测试结果

Unity3D之android打包成aar_第13张图片
image.png

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

你可能感兴趣的:(Unity3D之android打包成aar)