AIR p12转keystore证书签名apk

需求背景:向平台提交apk时提示该id已经存在,需要应用认领,可以认领的方式是使用java的keystore对平台提供的空白为签名apk进行签名上传验证,我们知道使用AIR开发的apk,所用的证书是p12的,如果进行签名认证呢? 猜想一:试图将p12证书直接转成keystore,各种找资料,耗时半天,没成功!(会遇到找不到证书链的问题) 猜想二:反编译了平台提供的未签名apk,获取id,版本等,通过Flash Builder创建一个类似的apk,企图骗过平台,结果被识破。 继续查找,终于在某篇文章的评论处找到解决办法了。 正确方法:将p12证书直接导入到一个keystore文件中,就可以正常签名了!(真TM的) [codesyntax lang=”actionscript3”]

//讲p12导入至keystore
keytool -v -importkeystore -srckeystore temp.p12 -srcstoretype PKCS12 -destkeystore temp.keystore -deststoretype JKS
//查看keystore
keytool -v -list -keystore temp.keystore
签名(1-证书链别名)
jarsigner -verbose -keystore d:\key.keystore -signedjar d:\signed.apk d:\tap_unsign.apk 1
删除keystore中别名为help.com的证书链
keytool -delete -alias help.com -keystore key.keystore

[/codesyntax] 签名后上传平台果然OK了! 参考文章地址:http://www.shadowkong.com/archives/1359 这篇Rect的文章是介绍在adt命令里用keystore签名AIR生成的apk的方法,也很有用,建议还是通过keystore来进行签名,使AIR生成的apk更加接近java原生生成的! 以下是Rect大神关于AIR生成的apk以及ANE等的研究:https://github.com/recter/Anti-ADT/tree/master/RDT(都很实用!)

在未越狱iPhone上安装测试版ipa

对于未越狱的iPhone上安装测试版ipa,可通过itms-services协议来实现。 方法如下: 1.需要一个html文件,引导下载用户在线安装ipa [codesyntax lang=”php”]

一键安装掌上综调iPhone版 安装app

[/codesyntax] 2.plist文件 [codesyntax lang=”php”]

items assets kind software-package url http://127.0.0.1/latest/ipa/tue.ipa(安装包的url)
               <key>kind</key>
               <string>display-image</string>
               <key>needs-shine</key>
               <true/>
               <key>url</key>
               <string>图片的地址</string>
           </dict>
  <dict>
               <key>kind</key>
               <string>full-size-image</string>
               <key>needs-shine</key>
               <true/>
               <key>url</key>
               <string>图片的地址</string>
           </dict>
       </array>
       <key>metadata</key>
       <dict>
           <key>bundle-identifier</key>
           <string>com.xinchun(和ipa中的相同)</string>
           <key>bundle-version</key>
           <string>1.0.0</string>
           <key>kind</key>
           <string>software</string>
           <key>subtitle</key>
           <string>Tue</string>
           <key>title</key>
           <string>Tue</string>
       </dict>
   </dict>

[/codesyntax] 3.使用iphone自带的safari浏览器,浏览http://222.177.4.242/ios/d.html文件,即可安装了。 注意:有的iPhone上访问到网页,点击链接没有反映,这时候要查看safari浏览器的设置了,看有没有禁用弹出窗口什么的 相关文章:  iOS 7.1下itms-services在线安装失败的解决方法

第一个IOS的ANE苦逼之路

  概要:本文只是记录作者开发ANE的心得,并不会教你一步一步制作一个ANE,不过文中附有其他教程链接,可供参考!   作为一个只会as3的aser,想折腾个ANE实在太苦逼了,所幸,今天终于折腾出一个! ane 1.先装黑苹果,各种翻论坛,安装包已经不记得下了多少个,总是卡到这里或那里,搞了n天,终于用Vbox装上了mac 10.7(幸好之前买电脑时cpu是i5,内存又加了一根现在有6G了) 2.又在ucai.cn自学了一段时间objective-c,每天晚上看视频,学着敲代码,知道了一些基本的语法。 3.学了一段时间,看看github上别人的ANE,有的可以小改一下。 4.尝试着写ane,这中间真是各种坑,还好找到一些资料,推荐几篇不错的:

第一个ane,是做了一个获取设备mac地址的,其实实现什么功能都是浮云了,只要搞通了AS3和OC的相互调用,功能就看实际需求了! 说起as+oc的对接,就不得不提一下 ANE的Xcode模版xcode-template-ane,这个可以省不少代码,不用配置,还可以直接生成ane,不过要生成ane还需要AIR SDK环境等,如果你是直接用MAC PRO开发,Flash Builder和XCode一起用,就很方便了,像我这中苦逼的用虚拟机黑苹果不敢点太快怕机器卡死的aser开发者,只用下xcode生成的.a库文件就可以了!这个模版可以帮菜鸟oc同学设置好模版,我们只需要写逻辑就行了! 在AS3和OC之间的数据交互是用的FREObejct,对于AS3来说 还是和平常用法一样,Boolean,String等随便传,但是在oc中得到的都是FREObejct类型,需要从FREObejct中提取转换成BOOL、NSString等,同样,oc方法的返回值也需要将BOOL、NSString等类型转换成FREObejct,传给as3,在as3中可以直接得到的就是Boolean、String不需要再转换,想必AIR已经自动转换好了。FREObejct和oc中的类型的转换建议还是再封装一个类比较好,这里是Maom的封装的方法ANEFun,可以参考一下,Maom的ANEList也蛮全面,很给力! 另外一个坑就是打包ANE,前面说过用xcode-template-ane模版的话,在创建.ane目标的时候,会自动调用generateANE.sh脚本,从而自动生成ANE。在window上呢?只有命令行了,当然那个《ANE打包工具2013版》打包工具在不会打包的时候也可以用一下,推荐还是命令行,自己写个批处理工具最好!

命令如下: bin/adt -package -storetype pkcs12 -keystore .p12文件名称.p12 -storepass .p12文件的密码 -target ane 需要生成的ane的名称.ane extension.xml -swc swc名称.swc -platform 平台名称 library.swf 本机扩展库 (我习惯把 bin/adt 直接改为FB安装包路径名)

打包的细节可以参考上文提到的 : 如何打包ANE(前后几篇相关都看,有坑的,错误提示也很少,要靠自己想); 这里还有最新发现的 打包ANE的视频教程 !  

小记:2014.03.06 项目引用多个ane的话,ios的ane中的类名不能相同,不然编译会冲突,不妨把多个功能些到一个ane里,或者在些单独的ane时候尽量类名长一点

Vbox扩容VDI硬盘大小

vbox_logo2_gradient用vbox装的黑mac,当时动态分配的20G,现在不太够用了,扩容方法如下: 命令参考:VBoxmanage modifyhd name.vdi/vhd –-resize size 1.打开cmd,进入vbox安装目录如(D:\Program Files (x86)\vbox) 2.在cmd提示符下面输入VBoxmanage modifyhd E:\mac\mac.vdi –resize 40960

size是以M(兆)为单位的,我这里扩展为40G。执行完之后你会惊喜的发现,这个虚拟盘已经变大了。

注:在扩展容量之前,需要先把虚拟机关掉

Flash AS3.0 常用函数收集,总有几条你没注意的

以下知识点,适合初级和中级Aser,大牛无视!

获得某个实例对象的类名:getQualifiedClassName (实例名字符串表达式);

stage.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandle);

function mouseOverHandle(e:Event):void {

trace(“over”);

//   返回instance**之类的

trace(e.target.name);

//返回元件名

trace(getQualifiedClassName(e.target));

}

Math.random();

范围为0~1

如 果想要0~100的话就是

Math.random()*100

随机出 [n,m]范围的随机数

function randRange(min:Number, max:Number):Number {

var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;

return randomNum;

}

应用例子:

模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);

模拟投骰子,即希望得到随机六个值: randRange(1, 6);

输出10个随机数

for (var i = 0; i < 10; i++) {

var n:Number = randRange(1, 10)

trace(n);

}

【把数字取至最近的小数点位,即指定精确度】

1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;

2. 让输入值除以步骤1所选的数字(此例为0.01);

3. 使用Math.round()把步骤2所计得的值取成最近的整数;

4. 把步骤3所得的结果乘以步骤2用于除法的那个值.

例如,要把90.337取成两个小数点位数,可以使用:

trace(Math.round(90.337/0.01)*0.01); //输出:90.34

【把数字取成一个整数的最接近倍数值】

例1,这样会把92.5取成5的最近倍数值:

trace(Math.round(92.5/5)*5); //输出:95

例2,这样会把92.5取成10的最近倍数值:

trace(Math.round(92.5/10)*10); //输出:90

【private,protected,internal,public访问权限】

private:只能在类本身内部访问,按惯例,命名私有成员时以下划线”_“开头;

protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线”_“开头;

internal:可以由类本身或者相同包内的任何类访问;

public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.

【检查变量类型并返回布尔值】

is

【检查变量类型并返回类型】

typeof

【检查对象类型并返回该对象】

as

【Timer类注意事项】

不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.

【一个函数具有未知个数的参数,用arguments对象或”…(rest)”符号访问它的参数】

注意:使用”…(rest)”参数会使 arguments 对象不可用;

private funciton average():void{

trace(arguments.length); //输出参数的个数

// arguments的类型是:object,但可以像访问数组一样去访问它

trace(arguments[1]); //输出第二个参数

}

private function average(…argu):void{

trace(argu[1]); //输出第二个参数,argu参数名是自定义的.

}

【隐式的取出方法(getter)和设定方法(setter)】

public function get count():uint {

return _count;

}

public function set count(value:uint):uint {

if(value < 100){

_count = value;

}else {

throw Error();

}

}

【确保类是绝不会有子类,使用final】

final public class Example{}

【super关键字的使用】

super(); //父类的构造函数,只能在类实例构造函数内部使用

super.propertyName; //调用父类的属性,属性需要声明为public或protected

super.methodName(); //调用父类的方法,方法需要声明为public或protected

【在数组中获取最小或最大值】

var scores:Array = [10, 4, 15, 8];

scores.sort(Array.NUMERIC);

trace(“Minimum: “ + scores[0]);

trace(“Maximum: “ + scores[scores.length - 1]);

【计算两点之间的距离】

勾股定理: c2 = a2 + b2

假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:

var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2));

【指出容器的显示清单中有多少显示对象】

每个容器都有numChildren属性.

【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】

textField.y = (_height - textField.textHeight) / 2;

textField.y -= 2; //减2个像素以调整偏移量

【过滤文字输入】

TextField.restrict = “此处为可输入的内容”;

field.restrict = “^此处为禁止输入的内容”;

restrict属性支持一些类似正则表达式的样式:

field.restrict = “a-zA-z”; //只允许大小字母

field.restrict = “a-zA-z “; //只允许字母和空格

field.restrict = “0-9”; //只允许数字

field.restrict = “^abcdefg”; //除了小写字母abcdefg不允许外,其它都允许

field.restrict = “^a-z”; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母

field.restrict = “0-9^5”; //只允许数字,但5例外

让restrict字符包含具有特殊意义的字母(例如-和^):

field.restrict = “0-9\\-“; //允许数字和破折号

field.restrict = “0-9\\^”; //允许数字和^

field.restrict = “0-9\\\\“; //允许数字和反斜杠

你也可以使用Unicode转义序列,指定允许的内容.例如:

field.restrict = “^\u001A”;

注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.

【设定输入框的最大长度】

TextField.maxChars:int

【检测播放器版本】

flash.system.Capabilities.version

对于8.5版以前的任何Flash Player版本,这种方法都不适用.

【判断客户端系统】

flash.system.Capabilities.os

【检测播放器类型】

flash.system.Capabilities.playerType

可能的值有:

“StandAlone”,用于独立的 Flash Player

“External”,用于外部的 Flash Player 或处于测试模式下

“PlugIn”,用于 Flash Player 浏览器插件

“ActiveX”,用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

【检测系统语言】

flash.system.Capabilities.language

【判断用户是否启用了IME(输入法编辑器)】

flash.system.IME.enabled

【检测屏幕的分辨率】

flash.system.Capabilities.screenResolutionX

flash.system.Capabilities.screenResolutionY

【把弹出窗口居中的算法】

X = (舞台宽/2)-(窗口宽/2)

Y = (舞台高/2)-(窗口高/2)

【控制影片配合Player的方式,包括缩放问题】

stage.scaleMode

可供选择值:flash.display.StageScaleMode

【舞台的对齐方式】

stage.align

可供选择值:flash.display.StageAlign

【隐藏Flash Player的右键菜单】

stage.showDefaultContextMenu = false;

【检测系统是否具有音频功能】

flash.system.Capabilities.hasAudio

【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】

flash.system.Capabilities.hasMP3

【检测播放器能 (true) 还是不能 (false) 播放流式视频】

flash.system.Capabilities.hasStreamingVideo

【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】

flash.system.Capabilities.hasEmbeddedVideo

【检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码】

flash.system.Capabilities.hasVideoEncoder

【显示 Flash Player 中的”安全设置”面板】

flash.system.Security.showSettings();

可供选择项:flash.system.SecurityPanel