问题一
最近在给Unity3D接入各个Android运营平台的插件,其中需要自己做一个简单的WebView用于显示游戏内广告等,在制作的过程中碰到了一个很蹊跷的问题。
按照正常的工程来做,发现findViewById返回了一个null 导致了空指针异常。无论是直接用Unity编译apk还是用Unity导出Android工程,都会出现该问题。经过各种查找,最终找到了问题的原因。
问题的原因主要在于,在我们将自己的android工程打成jar插件时,原来的R.id.xxxxx已经被转换成相应的数字id编译进了jar包,而Unity3D在导出工程或是apk的时候,会对所有资源进行重新的id编译,这就导致我们jar中的旧id是无法获取到相应对象。解决办法如下:
Java代码:
1. //this.wv=(WebView)findViewById(R.id.ifree_brow_webview);
2. int webviewID = getResources().getIdentifier("ifree_brow_webview", "id", getPackageName());
3. this.wv = (WebView)findViewById(webviewID);
问题二
当导出apk时,可能遇到下面的问题:
Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.
需在AndroidManifest中, 主 Activity的</activity>之前增加一行:
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
问题三
删除AndroidManifest.xml 中app的主题,否则unity打包apk是关联的主题会报找不到错误,应该是有些库没打进去(有待研究)
思考:能不能修正这个错误
问题四
删除生产的arr文件里的libs下的classes.jar,这个是之前从u3d中拷过去的,打包时会重新打进去,所以要删除,不删除打包会报错
思考:打包时,能不能直接不打包这个classes.jar
问题五
一定要注意支持的版本:
android:minSdkVersion="8"
android:maxSdkVersion="25"
问题六
在 appuildoutputsaar 目录。 app-debug.aar 包
用解压软件打开这个包,删掉 libs 下的 classes.jar (没错,就是之前重unity中拷过来的)
因为unity打包时会重新把自带的 classes.jar 打进去,如果不删掉它会打包报错,冲突
然后这就是最终需要的 aar 包
问题七
路径:
Application.persistentDataPath 该路径等价于 /mnt/sdcard/Android/data/com.xys/files
问题八
APP图标,需要在Android的项目中设置
问题九
当Unity工程使用android:installLocation="preferExternal" 时,某些时候会出现
Installation error: INSTALL_FAILED_CONTAINER_ERROR
解决办法:
修改为android:installLocation="auto" 即可
问题十
intent.putExtra("outputX", 600);
intent.putExtra("outputY", 300);
注:itent的传递有大小显示(40K?)所以,直接传递值出去会报错,
解决方法:用url传递,不直接传递值
问题十一
Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.
太高级的安卓SDK不行