No1:
Unity2017.1版本导出的android工程放到Android Studio上跑起来非常卡,Unity2017.3或4版本导出就没问题。
对比后发现gradle文件有差异,特此标注
1)gradle版本改为2.3.0
2)sdk版本改为27或以下
3)android块中加这句
aaptOptions {
noCompress '.unity3d', '.ress', '.resource', '.obb'
}
资源压缩的问题
No2:
Unity导出的android工程里暴露了唯一的Activity:UnityPlayerActivity,其实就是unity-class.jar包里的UnityPlayerActivity。
我们可以把暴露的Java类删除,继承unity-class.jar包里的UnityPlayerActivity,写一个新的类,这样的话,只要这个类实现了新的接口。Unity那边就可以通过反射调用相同的接口,从而实现了Android与Unity之间交互。
No3:
今天一天都在找权限问题,明明在清单文件里注册了权限,结果打成apk后,清单文件里权限就没了,找了整整一天的原因,结果是接的sdk里隐藏了这句
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
sdk是别人写的,让作者改吧
No4:
O7合并代码逻辑,每新建一个分支,提交代码后,都要合并到master主分支,原因是公共库给其他工程用的时候,不需要找最新的版本,只需要下载master分支就是最新的了。
No5:
打包提示:Error:java.lang.RuntimeException: Some file crunching failed, see logs for details
原因:
1.构建Gradle的时候,Gradle会去检查一下是否修改过文件的后缀名;
2.一般大多数是出现在图片上,.jpg修改成了.png就会出现这个问题;
3.9patch图片也可能出现这个问题。
解决方法:
gradle文件android块中增加
aaptOptions { cruncherEnabled = false useNewCruncher = false }
No5:
错误:uses-sdk:minSdkVersion 1 cannot be smaller than version 4 declared in library
原因:有类库没有配置最低兼容版本
解决:
defaultConfig { minSdkVersion 10 targetSdkVersion 19 }
增加即可
No6:
aar里面是不能把其他aar打进去的,解决方法只有
1.多引用一次aar
2.把aar解压,分文件夹合成一个aar
No7:
library里如果compile了maven库,那么library打成aar是不会包含maven里的内容的,主工程引用library打成的aar时,需要再次compilemaven库
No8:
报错:Duplicate files copied in APK META-INF/LICENSE
解决:android块中添加
packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/ASL2.0' }
No9:
运行apk提示
原因:主工程的jni文件下只有x86,armeabi_v7a两种架构,但是引入的aar或library里jni下除了x86,armeabi_v7a,还有其他的架构
解决:把多余的删除就好了
No10:
unity导出的android工程后,我们需要删除默认的UnityPlayerActivity启动页,然后再打成aar包,放到公共工程的lib中去,不然会有两个启动icon
No11:
maven仓库分四种类型:group仓库组、hosted本地仓库、proxy代理仓库、virtual虚拟仓库
本地上传的话,只能传到hosted仓库,所以gradle脚本只能写
http://127.0.0.1:8081/nexus/content/repositories/thirdparty
No12:
报错:Android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.message/com.example.message}; have you declared this activity in your AndroidManifest.xml?
原因:找不到activity,因为接入的sdk更新了,清单文件的配置改了
解决:重新接入最新版sdk
No13:
出包的时候,aar不要签名或者不要打release包,不然apk打出来有问题,亲测
No14:
apk游戏打不开,有可能是服务器端口权限没开放
No15:
EventBus是必须用单例的,所以在不同library中,最好通过导jar的方式使用自己的EventBus
No16:
unity的onBackPressed方法是无法监听到的,只有用监听物理按键的方式去抓,还有,因为activity是继承unityplayerActivity的,所以不要调super.onbackpressed方法!!!
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d(TAG, "MainActivity--onBackPressed");
EventBus.getInstance().fireEvent(CommonEvents.MAIN_ACTIVITY_ON_BACK_PRESSED);
return true;
}
return super.onKeyDown(keyCode, event);
}
No17:
如何知道buildToolsVersion哪些版本是可用的?很简单,sdk下载后能看到
No18:
Unity的登录监听和android层的登录监听可能不是同时开启的,会导致登录失败,最好由unity调起android层的登录监听