项目上需要获取CPU型号,但是Unity自身的API接口刚好没有这个功能,只好通过安卓自身的接口来获取。现在很多Unity和安卓的交互都是通过继承UnityPlayerActivity,但是一般这种继承都是用于写SDK的。
还好有过之前的Unity调用NDK的经验,刚开始转程序的时候,在上海一家公司的实验室里有待过一段时间,刚好处理过类似的。先用AndroidStudio创建一个Library工程。新建一个Java Class,名为api,简单实现了获取cpu信息。
package com.zp.utility;
import android.util.Log;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class api
{
private static api _instance;
public static api instance()
{
if(null == _instance)
_instance = new api();
return _instance;
}
public String GetCpuInfo()
{
String str1 = "/proc/cpuinfo";
String str2 = "";
try {
FileReader fr = new FileReader(str1);
BufferedReader br = new BufferedReader(fr);
while ((str2=br.readLine()) != null) {
Log.v("ZP", str2);
if (str2.contains("Hardware")) {
return str2.split(":")[1];
}
}
br.close();
} catch (IOException e) {
}
return null;
}
}
会用Eclipse生成jar包,但没安装,尴尬了,电脑上只有AndroidStudio,但不知道用AndroidStudio怎么生成jar包,因为一般生成的都是aar包,网上搜到一个方法,还不错,参考了这篇https://blog.csdn.net/u010717701/article/details/80351496,在gradle文件下添加删除jar包代码和生成jar包代码:
前期工作都完成了,轮到Unity了,其实也很简单,没什么好说的,代码:
public class AndroidUtility
{
private static AndroidJavaObject _plugin = null;
private static string cpuInfo;
public static string GetCpuInfo()
{
#if UNITY_ANDROID
if (!string.IsNullOrEmpty(cpuInfo))
return cpuInfo;
var javaClass = new AndroidJavaClass("com.zp.utility.api");
var javaObject = javaClass.CallStatic<AndroidJavaObject>("instance");
cpuInfo = javaObject.Call<string>("GetCpuInfo");
#endif
return cpuInfo;
}
}
现在就可以测试了。其实有很多安卓插件就是利用这种方式实现的,可以用反编译工具去试下。我为什么知道,是因为我就反编译过某某语音SDK的jar包。