(1)SDK :軟件開發工具包(Software Development Kit)應用軟件的開發工具的集合html
(2)JDK :Java 開發工具,主要提供基礎類庫,Java編譯器,運行時JVM(Java虛擬機),調試器等java
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlandroid
(3)JRE :Java運行時環境(Java Runtime Environment)Java運行時環境,時JDK的一部分c++
(4)Android SDK :安卓軟件開發工具包,在JDK基礎上添加了附加類庫android.jar,提供了Android虛擬機DVM和ARToracle
(5)JNI :Java Native Interface JNI是Java調用Native 語言的一種規範,經過JNI能夠使得Java與C/C++機型交互app
(6)NDK :Native Develp Kit 官方的解釋以下:Android NDK 是一套容許您使用原生代碼語言(例如C和C++) 實現部分功能的工具集,簡單來講就是Android除了能夠用Java來實現,部分功能也能夠用C++,NDK不依賴Dalvik Java虛擬機框架
NDK主要是把Native語言編譯爲動態連接庫(.dll文件,.so文件,.jnilib)函數
(7).NET :Microsoft .NET Framework,.NET 技術框架組成在Windows系統下的具體的實現,簡而言之至關於Java的jdk,即最基礎的開發包,最基礎的框架工具
(8)Mono :是.net framework的一個開源的、跨平臺的實現,並不是微軟的產品,它也是有mono編譯器和mono運行時組成的開發工具
(9)IL :將.NET代碼轉化爲機器語言的一箇中間語言,也就是說.NET代碼通過編譯以後不會直接生成機器語言,而是會先生成IL,相似彙編代碼
(1)AndroidManifest.xml:對應Unity的路徑Assets/Plugins/AndroidManifest.xml Android 程序清單文件,包含應用程序名稱、圖標、包名稱、四大組件模塊、權限等
(6)libs:對應Unity的路徑Assets/Plugins/Android 裏面存放了Java寫的類庫jar和aar
(1)AndroidJavaClass是java.lang.Class通用實例的Unity表示形式
(2)AndroidJavaObject是java.lang.Object的通用實例的Unity表示形式
例子:
(3)Activity和UnityPlayerActivity
https://www.jianshu.com/p/476087b4c087
UnityPlayerActivity是unity Android 包的默認的Activity
(4)application
application能夠被繼承,下面是個例子
而後在androidmanifest中引用
(5)android 代碼調用Unity函數
UnityPlayer.UnitySendMessage(string gameObject, string runtimeScript, string arg);
application
package com.xx.Racing; import android.app.Application; import android.content.Context; import com.secneo.sdkp.DexHelper; public class MMApplication extends Application { protected void attachBaseContext(Context ctx) { super.attachBaseContext(ctx); DexHelper.install(this, "mmbilling.3.1.8.jar.protected.jar"); } }
AndroidforUnity 給unity調用的庫
package com.mm.payforunity; import android.content.Context; import mm.purchasesdk.Purchase; public class PayForUnity { private static final String APPID = "300009265921"; private static final String APPKEY = "065DF5E770AE73C7ECDE5EE7FA174999"; private static IAPListener listener; public static void InitSDK(Context context, String gameObject, String runtimeScript) { try { Purchase.getInstance().setAppInfo("300009265921", "065DF5E770AE73C7ECDE5EE7FA174999"); } catch (Exception e1) { e1.printStackTrace(); } listener = new IAPListener(context, gameObject, runtimeScript); try { Purchase.getInstance().init(context, listener); } catch (Exception e) { e.printStackTrace(); } } public static void doPay(Context context, String paycode) { try { Purchase.getInstance().order(context, paycode, 1, listener); } catch (Exception e1) { e1.printStackTrace(); return; } } }
Androidmanifest
<manifest android:versionName="1.0" android:versionCode="1" package="com.gzzhengyou.Racing" xmlns:android="http://schemas.android.com/apk/res/android"> <supports-screens android:anyDensity="true" android:xlargeScreens="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/> <application android:label="@string/app_name" android:icon="@drawable/app_icon" android:name="com.xx.Racing.MMApplication"> <activity android:label="@string/app_name" android:name="com.xx.Racing.UnityPlayerNativeActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> </manifest>
unity call Android
using UnityEngine; using System; using System.Collections.Generic; public class MMBillingAndroid { #if UNITY_ANDROID private AndroidJavaClass klass = new AndroidJavaClass("com.mm.payforunity.PayForUnity"); private static MMBillingAndroid _instance; public static MMBillingAndroid Instance { get { if(_instance==null){ _instance = new MMBillingAndroid(); } return _instance; } } public void InitSDK(String gameObject, String runtimeScript) { AndroidJavaClass unityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); AndroidJavaObject curActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); curActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { klass.CallStatic("InitSDK", curActivity, gameObject, runtimeScript); })); } public void doPay(string paycode) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject curActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); curActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { klass.CallStatic("doPay", curActivity, paycode); })); } #endif }