Unity3D使用Native Plugins(快速便捷接入SDK) —— Java篇


  • 注意
  • 代码部分
    • Java中间层
  • Unity中使用
    • 目录结构
      • Unity5导入SDK设置
      • Unity内部结构
    • 单独目录需要做的操作
      • projectproperties
      • AndroidManifestxml

本文源链接:http://blog.csdn.net/qq393830887/article/details/53164464

注意

建议没看过 Unity3D使用Native Plugins —— C#篇 的,都先去看一下
老规矩,只贴部分代码

代码部分

Java中间层

package com.Android;

import android.app.Activity;
import android.content.Context;
import android.view.MotionEvent;
import com.testin.agent.Bugout;
import com.testin.agent.BugoutConfig;
import com.testin.agent.BugoutConfig.Builder;
import com.testin.agent.config.IBuilder;

public class BugoutBridge
{
  public static void Init(Context context, String appKey, String channelId, String userInfo, boolean debugModel, boolean errorActivity, boolean collectNDKCrash, boolean openCrash, boolean openEx, boolean reportOnlyWifi, boolean reportOnBack, boolean qAMaster, boolean closeOption, boolean logcat)
  {
    BugoutConfig config = new BugoutConfig.Builder(context)
      .withAppKey(appKey)
      .withAppChannel(channelId)
      .withUserInfo(userInfo)
      .withDebugModel(debugModel)
      .withErrorActivity(errorActivity)
      .withCollectNDKCrash(collectNDKCrash)
      .withOpenCrash(openCrash)
      .withOpenEx(openEx)
      .withReportOnlyWifi(reportOnlyWifi)
      .withReportOnBack(reportOnBack)
      .withQAMaster(qAMaster)
      .withCloseOption(closeOption)
      .withLogCat(logcat)
      .build();
    Bugout.init(config);
  }

  public static boolean GetShakeStatus(Context context)
  {
    return Bugout.getShakeStatus(context);
  }
}
  1. 一般就算SDK提供的接口都是Static,还是建议自己再封装一个中间类,提供Static接口给C#层调用,方便在Java层可以做一些log之类的处理,这样子好定位问题
  2. 将自己的代码单独导出一个jar,方便管理

Unity中使用

目录结构

Unity5导入SDK设置

Unity3D使用Native Plugins(快速便捷接入SDK) —— Java篇_第1张图片
Unity3D使用Native Plugins(快速便捷接入SDK) —— Java篇_第2张图片

  • 现在很多人使用Android SDK,都会将SDK直接放在Assets/Plugins/Android里面,看起来没有什么问题,但是一旦使用的SDK多起来的话,非常不好管理,各种.so各种.jar各种资源文件杂合在一起
  • 其实可以在Android里面另为SDK建立一个文件夹,方便整理
  • 到了Unity5更加的方便,对于这种SDK,unity提供Inspector窗口控制如何使用,Android的就如上图设置便可。
  • 有了该设置,如果临时不需要使用某个SDK,只需要关掉Select Platforms for plugin即可

Unity内部结构

Unity3D使用Native Plugins(快速便捷接入SDK) —— Java篇_第3张图片

  • 其实这里看到,和原本的目录结构没有太大的区别,只是都抽出来放到一个目录上而已

单独目录需要做的操作

project.properties

android.library=true
  • 告诉Unity这个文件夹里面的内容作为库项目来使用
  • 如果没有这个的话,即使设置了Plugin Inspector也没用
  • 在Unity4的时候,就是通过设置这个来控制SDK的使用

AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.qamaster.android" >

    
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application>
        <activity android:name="com.qamaster.android.ui.ProblemActivity" />
        <activity android:name="com.qamaster.android.ui.FeedbackActivity" />
        <activity android:name="com.qamaster.android.ui.ScreenshotEditorActivity" />
    application>
manifest>
  1. Unity会自动合并所有的AndroidManifest
  2. package=”com.qamaster.android” 告诉unity库项目的名称,如果使用Unity Export Google Project的话,就可以看到,unity除了生成项目的目录之外,还会生成这个package的目录
  3. permission,大部分SDK都需要定义这玩意,如果全部SDK都定义在一个AndroidManifest里面,真心乱,这样就可以按需添加了
  4. Application里面经常也要添加meta控制数据,或者services
  5. 对于某些SDK需要继承对方Activity的,就比较麻烦了,这种建议直接改Android里面的AndroidManifest,而不是使用这种合并的方法,但是建议能独立作为库存在的,还是作为库来管理会比较好

你可能感兴趣的:(Unity3D使用Native)