Flash Android ANE 多个jar包和资源的处理

转载请注明出处:csdn火木达人

一、多个jar包的处理

在开发Flash Android ANE中,Android端有可能使用第三方jar包。在Android端直接打出的jar包里面不包含第三方库的字节码。所以在生成了ane后使用会报错。又由于Flash ane不能同时使用多个jar包,所以只能把这个第三方库也弄进你生成的那个jar包中。

可以使用jar命令解包和压包

1.用 jar -xf 命令解压第三方Jar包
2.用 jar -uf 命令合并第三方Jar包

另一种方式是把后缀名改为.rar,用解压工具解压,在合并这些jar文件的字节码文件,最后在压缩改后缀名

这里有一个别人写的打包小工具:P013MergeJars.air

二、ane资源的处理

Flash Android ANE的资源可以分为两种:

第一种:res资源

把res整个目录放在Android-ARM目录下,在打包的时候会直接打进去

使用getApplicationContext().getResources().getIdentifier(name,defType,defPackage)方法在ane中获取资源

第二种:assets资源

把assets目录下的资源拷贝到Flex手机项目的src根目录下,对这工程点击右键-属性-Flex构建项目-Google Android-包类容。

所有打勾的文件都会打进apk的assets目录下。apk打成功后可以解压看看。

如果你的assets下包括.apk文件,那么就不能使用Flash Builder 工具去打包,因为Flash Builder 工具对.apk文件文件有过滤。及时你选择了.apk文件还是会剔除掉。

这时可以通过命令去打包

还一种方式通过Flash Builder 工具打包后,使用APKTool反编译工具解压后把文件放入assets下,在生成新包。

反编译:apktool d <file.apk> <dir>

如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>

编译:apktool b <dir>

dir内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

apktool新生成的新包时不带签名的,所以需要自己重新签名:

jarsigner -verbose -keystore test.keystore -signedjar test2.apk test.apk test.keystore 

用命令行创建keystore:

keytool -genkey -keystore test.keystore -keyalg RSA -validity 10000 -alias test.keystore

查看keystore详细信息:

keytool -list -keystore test.keystore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C# Socket通信客户端和服务端的例子: 服务端: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class Server { public static void Main() { byte[] bytes = new byte[1024]; IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000); Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { listener.Bind(localEndPoint); listener.Listen(10); while (true) { Console.WriteLine("Waiting for a connection..."); Socket handler = listener.Accept(); string data = null; while (true) { bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, bytesRec); if (data.IndexOf("<EOF>") > -1) { break; } } Console.WriteLine("Text received : {0}", data); byte[] msg = Encoding.ASCII.GetBytes(data); handler.Send(msg); handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.WriteLine("\nPress ENTER to continue..."); Console.Read(); } } ``` 客户端: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class Client { public static void Main() { byte[] bytes = new byte[1024]; try { IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost"); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000); Socket sender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { sender.Connect(remoteEP); Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString()); byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>"); int bytesSent = sender.Send(msg); int bytesRec = sender.Receive(bytes); Console.WriteLine("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch (ArgumentNullException ane) { Console.WriteLine("ArgumentNullException : {0}", ane.ToString()); } catch (SocketException se) { Console.WriteLine("SocketException : {0}", se.ToString()); } catch (Exception e) { Console.WriteLine("Unexpected exception : {0}", e.ToString()); } } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.WriteLine("\nPress ENTER to continue..."); Console.Read(); } } ``` 这里的例子中,服务端监听本机IP地址和端口11000的连接请求,客户端连接服务端并向服务端发送数据,服务端收到数据并将其原样返回给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值