Unity3d SDK篇之Android开发(一)

android 项目交互 与 sdk增加指南: (完整版)

通常在处理u3d与android natvice对接时,有两种方案:

. U3D 项目交互部分方案:

a. 使用u3d带有jni与使用jar方案直接处理,原理还是在u3d直接打包apk,其实处理过程是把相关工程的目录构建好,在u3d内进行打包完成的c# 与 java进行交互,底层的ndk部分完全忽略掉了,直接用u3d提供的jni接口交互jar中的class地址即可;

b. 传统的方式,导出eclipse android工程采用ndk方式jni通信;

下来开始我们介绍方案a:

android 的生命周期介绍:

.制作sdk native思路: 在交互的activity中跳转到新的activity来进行显示部分;

a方案配置指南:

1.Android创建工程指南:

至少配置:(否则可能被坑)

.Minimum Required SDK:     API 14 Android 4.0

.Target SDK:                      API 19 Android 4.4

.Compile With:                   API 19 Android 5.1.1

Theme:                             ... ...

Activity Name: ... ...

完成项目创建;

2. 项目结构:

.src:     原文件模块, 一定要追加一个包名;

.libs:     与unity对应要增加一个sdk的类库包;

.res/laytou:  布局管理模块有需求就添加;

.AndroidManifest.xml: 增加xml android项目布局器;

3. 寻找unity3d支持的libs库文件class.jar:

在u3d的安装目录下

../Contents/PlaybackEngines/AndroidPlayer/release/bin/classes.jar

../Contents/PlaybackEngines/AndroidPlayer/development/bin/classes.jar

拷贝到AndroidPlugin下的libs目录下.

进行引用一次:

建议使用release下的jar交互库;

4. 编辑要测试的布局文件:

.res/layout下的布局文件随便写,根据android native的构建原则来搞;

5. 回到src工程文件来实现部分代码:

.修改MainActivity.java:(这个文件用来跟u3d进行交互,所以不要实现 setContentView方法)

删除   setContentView(R.layout.activity_main);

删除  onCreateOptionsMenu(Menu menu);

删除  onOptionsItemSelected(MenuItem item);

增加: 需要交互的方法 (c#(u3d) / java);

public void StartActivity1(String name)    {   // u3d call android

//        // TODO Auto-generated method stub

//        Intent intent = new Intent(mContext,OpenActivity1.class);

//        intent.putExtra("name", name);

//        mActivity.startActivity(intent);

Log.e("U3D: ", "StartActivity1: " + name);

}

public void StartActivity2(String name) //

{

UnityPlayer.UnitySendMessage("Main Camera","messgae","android call             u3d sucess!!!" + name);

}

public void StartActivity3(String name)    {  // native 跳转 sdk等

// TODO Auto-generated method stub

Intent intent = new Intent(mContext,TestActivity0.class);

intent.putExtra("name", name);

mActivity.startActivity(intent);

}

补: 如果调试中可以使用Activity

u3d接入需要修改:

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {//UnityPlayerActivity

// 修改后要重新进入eclipse clean and build;

6. 开始打包bin下 class目录 :

.控制台打开进入当前android工程的 bin目录下:

.执行java命令行:    jar -cvf class.jar *;

.打包出来的class.jar随意改名;

7.构建AndroidManifest文件

.创建activity 磨垮

<activity

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

android:name=".OpenActivity1">

</activity>

增加权限文件:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

. 创建初始状态android部分构建完成;

8. 进入unity3d项目设置部分;

. 新建u3d工程;

. 创建Plugins 文件夹, 创建Android文件夹 , 创建bin 文件夹, 创建  libs文件夹, 创建 res文件夹

. 拷贝AndroidManifest 到 Android;

. 拷贝生成好的jar文件到 bin;

. 拷贝第三方库到 libs;

. 拷贝当前工程下的res内容到 res内,注意检查layout;

9. 制作相关代码:

void Start () {

#if UNITY_EDITOR

#elif UNITY_IPHONE

#elif UNITY_ANDROID

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");

m_activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");

#endif

}

void OnGUI(){

//call hello world

if(GUI.Button(new Rect(50,50,200,40),"Open Activity download")){

m_activity.Call("StartActivity1","Unity中调出android的方法了");

}

//call hello world

if(GUI.Button(new Rect(50,250,200,40),"Open Activity N2")){

m_activity.Call("StartActivity2","Unity中调出android的方法了222");

}

}

将脚本挂入Main Camera对象上;

10. U3D BuildSetting:

11. 打包后生成apk 文件使用;

12. 搭建tomcat web 服务器:

Mac OS:http://blog.csdn.net/kaitiren/article/details/44871181 安装;

扩展部分: (跳转一个activity来实现布局或者sdk的添加部分)

1. 回到android项目中,创建相关代码过程:

Android 增加native 测试类OpenActivity1.java:

package com.example.androidplugin;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class OpenActivity1 extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView text = (TextView)this.findViewById(R.id.textView1);

text.setText(this.getIntent().getStringExtra("name"));

Button close = (Button)this.findViewById(R.id.button0);

close.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

OpenActivity1.this.finish();

}

});

}

}

MainActivity.java 中:

public Context mContext = null;//增加

public Activity mActivity = null;//增加

protected void onCreate(Bundle savedInstanceState) {// 修改

super.onCreate(savedInstanceState);

mContext = this;//增加

mActivity = this;//增加

//        setContentView(R.layout.activity_main);

}

public void StartActivity3(String name) // android call unity

{

Intent intent = new Intent(mContext,OpenActivity1.class);

intent.putExtra("name", name);

mActivity.startActivity(intent);

}

xml 配置:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.ITFFuture.testua.MainActivity"

tools:ignore="MergeRootFrame" >

<LinearLayout

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="wrap_content">

<TextView

android:id="@+id/textView0"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#000000"

android:textSize="18sp"

android:background="#00FF00"

android:text="测试Unity和Android之间额通讯"

android:gravity="center_vertical|center_horizontal"        />

<TextView

android:id="@+id/textView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#FFFFFF"

android:textSize="18sp"

android:background="#0000FF"

android:text="大家好,我是安卓的OpenActivity1"

android:gravity="center_vertical|center_horizontal"              />

<Button

android:id="@+id/button0"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="关闭这个OpenActivity1"/>

</LinearLayout>

</ScrollView>

AndroidManifest.xml:

<application

....

<activity

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

android:name=".OpenActivity1"> (这里如果识别不到直接用包名即可)

</activity>

</application>

.编译打包到u3d的android bin文件路径下; (如果不了解查看上面第6步)

.完成java部分后记得要替换资源和 AndroidManifest.xml 到u3d中;

2. 回到u3d项目的脚本中:

//call hello world

if(GUI.Button(new Rect(50,400,200,40),"Open Activity N3")){

m_activity.Call("StartActivity3","333333");

}

. 检查项目所有部分,打包生成新的apk,提供apk ota下载部分;

. 测试完成后进入android native sdk 模块添加:

提示: 在开发交互的模块一旦继承UnityPlayerActivity后是无法调试的,开发android native部分可以使用Activity.

android工程更换后可能无法运行,直接clean处理即可;

3. Android Native sdk的增加方式:

.android native sdk 通常以jar包的形式存在,导入和引用到eclipse中的libs文件夹即可;

.同时也要引入u3d 的libs文件夹中,如果没有文件夹需要创建;(sdk 不提示了,添加方法如下)

.以上操作完成后进入下面操作,添加native sdk思路也是通过跳转到新的activity中进行的:

4. 在使用sdk即成,或者增加c# 与 java的交互模块后,可以从u3d导出android工程进行使用;

----------------------------------------

小技巧导出外存大小减少:

修改u3d中的android playersetting设置部分

--Scrpping Level *   :  Strip Byte Code;

--Script Call Optimization : fast

下一篇讲介绍如何使用方案b进行u3d android接入开发部分.

时间: 2024-10-26 00:24:49

Unity3d SDK篇之Android开发(一)的相关文章

Android开发四大组件之Service(实例篇)

关于Service的开发详解已经在上一篇:Android开发四大组件之Service(详解篇)讲的很清楚了,本篇主要对Service的开发实例做下讲解. 程序运行效果图: 程序代码: BindService: package com.jph.servicedemo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; /**

Android开发怎么让自己的APP UI漂亮、大方(规范篇一)

首先,笔者是站立在开发者的角度来看UI设计的,欢迎专业人士提供指导,不多说,来看怎么把UI设计和开发高效结合起来~ 一.约定APP开发中的一些规则 1.大部分图标满足HDPI(高清)即可,比如:大众点评首页的右上角图标,尺寸大致在48*48px左右 2.一般提供1280*720px的尺寸即可,最常见的适配模式 3.还有种图标,很多界面复用且图标中等偏大(80px及以上左右),他们在常规手机.平板,小尺寸手机上面需要适配,所以需要多种尺寸的图标,如:微信底部的tab菜单图标,一般设计的尺寸要3套,

Android开发怎么让自己的APP UI漂亮、大方(配色篇二)

我们在没有效果图的app开发中有一件事情肯定很头疼:一个按钮的调色改过来改过去,还是很难看,最终只能暂时作罢,浪费了大量的开发时间和精力.开发规范篇见Android开发怎么让自己的APP UI漂亮.大方(规范篇一) 一.APP常用搭配参考 底层背景色,内容背景色 ,两种颜色相近,但能区分标题背景色 任意花色标题文字色 通常为黑色或白色黑体内容文字 通常为黑色或白色宋体不重要的内容 浅灰色重要的内容 标题背景色附近的颜色通常比标题色亮,为强调色彩色颜色组合方式有,互补色,相似色,3角色(红.黄.蓝

android开发资源网站,下载各版本SDK源码、Android Studio、NDK等

http://www.androiddevtools.cn/ AndroidDevTools简介 Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具.学习开发教程.用到设计素材,欢迎Star.Fork . 如果你对翻译英文的Android开发技术文章感兴趣,欢

Android开发性能优化总结(二)

接上一篇<Android开发性能优化总结(一)> 一.安卓UI性能检测与优化 UI是安卓应用程序与用户打交道的最直接途径,UI设计的好不好,直接影响到用户的体验,如果没有达到他们心目中的自然流畅细节,用户要是能够感觉出来,少则影响心情,多则卸载应用:所以一个应用的UI显示性能问题就不得不被开发人员重视. 1.UI卡顿常见原因: 在UI线程中做了耗时操作,导致UI线程卡顿: 布局Layout过于复杂,无法在16ms内完成渲染: 同一时间动画执行的次数过多,导致CPU或GPU负载过重: View过

android开发新浪微博客户端 完整攻略 [新手必读]

开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就打算开发个android版本的新浪微博客户端作为练手项目,并且以随笔的方式详细的记录开发的全过程.本人对java语言以及eclipse Ide都是初次应用基本上属于边学边用,做移动设备上的东西也是第一次,总的来说属于无基础.无经验.无天赋的纯三无人员,还请广大同学们多多给予指点. 开发第一件事情,那

CSDN精选Android开发博客

[1] 张国威:Android从入门到提高系列 前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针对具体的常见功能而展开. [2] 懒骨头:<Android Dev Guide>系列教程翻译文章1-18 本系列文章为Android SDK翻译文章,其实SDK是最好的学习例子.系列一:什么是Android?Android是一个移动设备的软件集,他包括一个操作系统.中间件,和一些重要的应用程序.A

Win7下Android开发环境的搭建(更新于2015/3)

Win7下Android开发环境的搭建(更新于2015/3) --JDK + Eclipse + Android SDK + ADT 的安装.配置 Android开发环境搭建并不复杂,就是资源不好下,本文针对目前win7环境下,基于JDK+Eclipse+SDK+ADT的Android开发环境的搭建进行总结. 本文所用到资源的URL如下: JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133

【Mood-12】Android开发相关书籍推荐

新年伊始,找到Android进阶干货若干,2015拜读. 1.Android应用UI设计模式 目前,谷歌Android操作系统在移动市场中风头正劲,并且未来发展势不可挡.<Android应用UI设计模式>面向Android 4.0+操作系统,是市面上第一本深入解析Android界面设计的佳作.<Android应用UI设计模式>从适用于移动设备和平板的通用模式以及 Android UI设计指南出发,深入探讨了58种重要的Android交互设计模式及其应用.每种模式登场之前,先用基本知