Cocos3.10框架项目升级安卓编译版本至Android29

项目是网狐旗舰版架构,默认安卓编译版本是Android-19, 如果运行在Android9.0及以上的设备就会提示“此应用专为旧版本打造的提示”,所以需要将工程里面的AndroidManifest.xml文件中编译目标版本升级。为了之后方便直接升级为安卓10(Android-29),特此记录其中遇到的一些问题。(本人Android小白)

升级AndroidSDK

  1. 下载Android-29开发工具包
    使用AndroidStudio或者Eclipse中AndroidSDKManager下载Android-29和Android-23,推荐用AndroidStudio下载快,毕竟亲儿子
    在这里插入图片描述
    下载好之后将项目中project.properties文件target改成android-29,AndroidManifest.xml文件Target也需要改成29
android:targetSdkVersion="29"

改完以后打开Eclipse会有编译报错~~~~有关org.apache.http部分报错

添加org.apache.http.legacy.jar包,并添加依赖至项目

Android 6.0 移除了对 Apache HTTP 的支持,官方建议改用HttpURLConnection类。如果想继续使用 Apache HTTP API,两种方式-

  1. 项目有build.gradle文件方式(AndroidStudio)
    在build.gradle文件中声明以下编译时依赖
android {
    useLibrary 'org.apache.http.legacy'
}
  • 项目没有build.gradle文件方式(Eclipse)
    老项目如果没有build.gradle文件可以通过以下Eclipse方式

  • org.apache.http.legacy.jar包获取
    不需百度,在自己电脑ANDROIDSDK文件目录下 sdk\platforms\android-23\optional\ 这个路径下就有这个jar包

  • 添加依赖
    在这里插入图片描述
    将jar包直接拖到项目libs文件下,点击copy。然后在java bulid path里面添加jar
    在这里插入图片描述
    添加好之后项目里面需要编译报错就没有了(太天真),然后可以用cocos命令直接打包apk(如果有报错,将JDK版本升级至jdk1.8.0_92,记得改系统变量路径)

打包运行

首先是在木木模拟器下运行,系统是Android6.0,并无异常感觉很完美,然后运行在Android10设备里面闪退…尴尬!!莫得办法只有真机调试。本人用的是一加7pro Android10,eclipse版本是2018.12, 打开手机开发者模式,如果Eclipse没有Device选项(Window->show view->device),下载ADT插件下载帮助

  • 崩溃在java getUUID()这个方法(网狐祖传),修改getIMEI方法(仅供参考,如果使用下面的方法需要更新项目中的android-support-v4.jar包)
	public static String getIMEI(Activity context)
	  {
		  if (Build.VERSION.SDK_INT >=  Build.VERSION_CODES.Q) {
			  return "Android SDK " + Build.VERSION.SDK_INT;
	      } else {
	    	  if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
	    		  ActivityCompat.requestPermissions(context, new String[]{ android.Manifest.permission.READ_PHONE_STATE }, 1);
	    		  return null;
	    	  } else {
	    		  TelephonyManager tm =  (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
	    		  try{
	    			  return tm.getImei();
	    		  }catch(Exception e){ // 8以下没有 getImei
	    			  String imei = tm.getDeviceId();
	    			  if(imei == null)
	    			  {
	    				  imei = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
	    			  }
	    	          return imei;
	    		  }
	    	  }
	      }
	  }

由于Android10已经不在支持getImei(),所以此方法针对Android10以下机型,Android10可以接入安全联盟的文件获取OAID()

  • 修改getMachineID()方法
	private static String getMachineID(Activity context) 
	{
		TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
		final String tmDevice, tmSerial, androidId;
		//tmDevice = "" + tm.getDeviceId();
		tmDevice = "" + getIMEI(context);
		tmSerial = getSimSerial(tm);
		androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
		UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
		return deviceUuid.toString();
	}

	public static String getSimSerial(TelephonyManager tm)
	{
		String serial = ""; 
		try
		{
			serial = tm.getSimSerialNumber();	
		}catch(Exception ex)
		{
			serial = "";
		}
		return serial;
	}

修改之后重新编译打包apk,安装运行正常(高兴太早),运行之后发现所有的Http请求都无法获取数据~~~~(更特么的尴尬)

解决不能访问http请求问题

Android9.0之后 所有的Http请求都会被限制,最好的解决方法就是全部使用https请求,Android各版本改变可参考Android适配

莫得办法只能用穷人的办法解决了。。。。
在安卓项目中添加一个xml文件路径是proj.android\res\xml。名字自取,内容如下

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

然后需要在AndroidManifest.xml文件中添加如下代码(network_security_config这个是你的xml文件名字)

    <application
        android:name="org.cocos2dx.lua.ClientApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name" 
		android:networkSecurityConfig="@xml/network_security_config"
		>

重新编译打包,http请求正常,至此升级结束,项目编译版本已经是最新的Android-29(安卓10),如果需要升级安卓底包,需要把网狐祖传的installClient()方法修改,之后会做更新。初次制作,如有不足请赐教。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值