前言
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.png2、编写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.png4、点击build and run
5、测试结果
image.png新手上路遇到太多的坑了,希望给大家一些帮助,有不对地方还望指点,本人对unity也是新手一个。
网友评论