cocospod 版本更新与更新到指定版本

一、升级本地cocopod到最新版本 1、先切换gem源 gem source -a https://gems.ruby-china.org 查看是否切换成功 gem source -l 打印出*\* CURRENT SOURCES ** https://gems.ruby-china.org 就说明切换成功,如果还是官方的源, 请手动重启电脑尝试 2、接下来就可以开始升级了cocoapods了 3、然后敲下 4、剩下的就是设置pod仓库了 pod setup 重新设置下 pod仓库 二、cocopod升级到指定的指定版本 1、在终端输入:sudo gem uninstall cocoapods 显示所有的版本,输入相应的数字,删除不想要的版本 2、在终端输入:sudo gem install cocoapods -v指定版本号 输出:Fetching: cocoapods-1.1.1.gem (100%) ERROR: While executing gem … (Errno::EPERM) 3、上面的方法不行,那咱们就换一种输入:sudo gem install -n /usr/local/bin cocoapods -v 指定版本

2018年1月22日 · 1 分钟 · 天边的星星

android 使用命令查找apk

第一步:查找apk的包名 adb shell pm list package 查找所有安装的包名 adb shell pm list package -3 查找所有安装的第三方的包名 adb shell ps 查找正在执行的进程 adb shell dumpsys activity activities ,它会列出当前手机中所有正在运行的应用的详细信息,按打开顺序排列,最后打开的APK信息会放在输出的最前面。 第二步根据包名或者到安装的路径 adb shell path 包名 (例如adb shell pm path phxDroid.phxDroid) 第三步导出 adb pull apk的路径 apk导出路径 (例如 adb pull /data/app/phxDroid.phxDroid-1.apk ~/Desktop/ 导出apk到桌面)

2017年12月18日 · 1 分钟 · 天边的星星

Mac下制作简单的ox应用

先上张图片 制作mac下面确定Jenkis的应用 on run {input, parameters} display dialog “输入执行动作:(1是启动,2是关闭).” default answer “1” buttons {“确定”, “取消”} with title “启动Jenkins” default button 1 if the button returned of the result is “确定” then set executeType to text returned of the result end if end run echo +———————————————————-+ echo + 1是启动,2是停止 + echo +———————————————————-+ printf ‘Input your want execute Parameter:’ read executeType printf ‘you Input 类型 is executeType’ printf “\n” cd /Users/jason/Documents/developer_tools/Tomcat/bin pwd ...

2017年12月6日 · 2 分钟 · 天边的星星

Java 执行运行Jar文件

java执行jar文件命令 java -jar 文件.jar 到此就成功执行jar了, 我的jar中有多个入口,我想执行其他的入口,怎么搞? 不着急慢慢看下去 java运行jar包中指定Class的main方法,这时可以通过: java -cp xxx.jar xxx.com.xxxx [args] 其中-cp命令是将xxx.jar加入到classpath,这样java class loader就会在这里面查找匹配的类。 mac中执行apple script运行jar的命令 on run {input, parameters} set p to POSIX path of (path to me) do shell script “java -jar ” & p & “Contents/Jar/JavaSwingTest.jar” end run

2017年12月5日 · 1 分钟 · 天边的星星

Mac 下制作icns 图标

使用mac中自带的工具iconutil iconutil -c icns iconset文件夹 生成icns文件 例如:iconutil -c icns abc.iconset iconutil -c iconset icns文件 生成iconset文件夹,里面包含多种png图片 制作iconset文件时文件中文件名称必须是下面的命名,否则可能转换不成功 Filename Image Size (in pixels) icon_512x512@2x.png 1024 x 1024 icon_512x512.png 512 x 512 icon_256x256@2x.png 512 x 512 icon_256x256.png 256 x 256 icon_128x128@2x.png 256 x 256 icon_128x128.png 128 x 128 icon_32x32@2x.png 64 x 64 icon_32x32.png 32 x 32 icon_16x16@2x.png 32 x 32 icon_16x16.png 16 x 16 这样就可以生成icns文件,我们就可以替换mac下的app的图标了 步骤为; 1.选择应用 2.右键-点击显示简介 3.拖动生成的icns文件到简介的左上角的图标处 4.看看应用的图标是否已经替换了,~~ 记录下,防止大家走弯路~~

2017年12月5日 · 1 分钟 · 天边的星星

Java + 腾讯企业邮箱 + javamail发送邮件

搞了一上午终于搞定了腾讯云企业邮箱的发送,话说腾讯云的东西就是繁琐,但是好用,还是得认真看文档啊,不然真的摸不着北。 腾讯企业邮箱官网:http://exmail.qq.com 点击开通 你跟着步骤走就行了,没啥难的,如果你没有域名,你就去买一个呗,也花不了多少钱的。 注册成功后,是这个页面,并且会有一个弹窗告诉你一些信息 现在你点击添加成员,因为你不添加成员的话你是无法发送邮件的。 完成后是这样 然后你打开腾讯企业邮箱登录界面,输入你刚才增加的成员邮箱的:登录名 + 密码,进去后是一个类似于普通QQ邮箱的界面 第一次进去会要求重新设置密码,设置一下就好了。默认的已经开通了SSL协议; 如何设置IMAP、POP3/SMTP及其SSL加密方式? 如果您的电子邮件客户端支持SSL,可以在设置中选择使用SSL。 <div> </div> <div> <div> <div> <div> **通用配置参数:** </div> <div> **(我们已经默认都支持这些协议,用户无需自己手动开启这些服务器与端口)** </div> <div> </div> <div> **POP3/SMTP协议** <div> <div> 接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995 </div> <div> 发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> 海外用户可使用以下服务器 </div> <div> <div> 接收邮件服务器:hwpop.exmail.qq.com ,使用SSL,端口号995 </div> <div> 发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465 </div> </div> <div> </div> <div> <div> **IMAP协议** </div> <div> <div> 接收邮件服务器:imap.exmail.qq.com ,使用SSL,端口号993 </div> <div> <div> 发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> 海外用户可使用以下服务器 </div> <div> <div> 接收邮件服务器:hwimap.exmail.qq.com ,使用SSL,端口号993 </div> <div> <div> 发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <div> <div> <div> **账户名:**您的企业邮箱账户名,账户名需要填写完整的邮件地址 </div> <div> **密码:**您的企业邮箱密码 </div> <div> **电子邮件地址:**您的企业邮箱的完整邮件地址 </div> <div> </div> <div> 使用SSL协议之前,请您先参考[常用客户端的一般配置方式](http://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1000585): </div> </div> </div> </div> </div> </div> 使用java代码发送邮箱 ...

2017年12月5日 · 1 分钟 · 天边的星星

Android屏幕投影及反向控制原理

这一周过的是够有意思的,先停两天电,然后感冒了,然后项目出Bug了,然后发烧了,呵呵哒,赶紧只能过来写点东西压压惊。鉴于最近正好在研究Android投屏及反像控制和Android双开的技术原理,本周就先写写Android投影以及反向控制的原理了。 1 目标 Android投影屏幕到电脑 电脑端反向控制Android手机(如QQ,微信,淘宝…) 2 背景 最近在项目小组中遇到一件事,小组有时候需要演示demo供大家参考,当演示Android手机投屏时,就需要借助第三方软件进行投屏,比如说360手机管家的演示功能还有一个神器Vysor(通过Google浏览器投屏并控制手机),但是随之也会带来问题,通过反编译Vysor的Apk可以看到它是使用adb命令截屏然后通过Async网络库传输屏幕投影给后台,既然有网络操作,如果是公司比较重要的东西,万一第三方在后面偷偷保留了演示录屏(我相信这些应用应该都不会,有职业操守),然后可能就会有自己去做投屏的需求。 3 预览图 今天写的原理都是经过本人实现过的,目前PC端已经正常工作,并且可以投屏多台Android。Web端通过node.js websocket webrtc HTML实现的目前还在开发中,鉴于之前没怎么用过前端,所以写的比较慢。 目前测试实时投影在真实机上还可以。 PC端的动态截图如下。 ![](http://upload-images.jianshu.io/upload_images/2778947-8a87e728b4a3a098.gif?imageMogr2/auto-orient/strip) 时间.gif ![](http://upload-images.jianshu.io/upload_images/2778947-7599f0e5882c029e.gif?imageMogr2/auto-orient/strip) p2 ![](http://upload-images.jianshu.io/upload_images/2778947-81c7dde223025610.gif?imageMogr2/auto-orient/strip) 地图.gif 4 原理图 ![](http://upload-images.jianshu.io/upload_images/2778947-b9c17077a52e9b6a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 原理.png 5 投屏 投影屏幕,可以去传输图像也可以去传输视频,具体使用哪一种就去看你的需求。而投影图像又分为通过ADB命令去截取图像以及通过Android的ImageReader获取图像然后通过网络传输两种方式,所以投屏的实现是有很多种的,你想使用哪一种都是可以的。 图像流 现在的产品看到他们都是借助手机连线到电脑端的,通过adb直接去截取图片,这样的话就会很快,如果你只是在公司内部用,使用公司的局域网进行通信我觉得也已经够用了,因此也可以实现通过网络Socket直接去传输图像的字节码。但是现在手机分辨率可高了,因此如果你不对图像进行处理直接通过Socket传输的话那么会让PC端投屏变得很卡,因此AndroidClient可以先对图像进行压缩裁剪之后再去传输。 Android端这块我是开启了一个Service,然后通过ImageReader获取屏幕的图像,之后对图片进行裁剪压缩之后再利用Socket传输图像数据信息。其中的基本代码流程如下: `virtualDisplay = mediaProjection.createVirtualDisplay("MainScreen",width,height,dpi ,DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,imageReader.getSurface() ,null,screenHandler); imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader imageReader) { Log.i(TAG, "call onImageAvailable"); try { //如果有图片那么就获取 img = imageReader.acquireLatestImage(); if (img != null) { //图像处理 //send 数据 } } }` 视频流 起初我采用的就是图片传输,后来想想其实还是有其他方案的,其实可以通过获取Android手机的屏幕视频流通过H264进行编码进行传输给后台Server,这样可以让画面显示的更加流畅。Android Client里面有一个MediaCodec的类以及VirtualDisplay类可以去读取Android的屏幕流,然后转化为H264视频流。 ...

2017年11月29日 · 1 分钟 · 天边的星星

Nginx 配置文件服务器下载apk和ipa

在nginx配置文件 mime.types中配置 application/vnd.android.package-archive apk; application/iphone pxl ipa; 这样apk在界面中就可以下载并提示安装 服务器iis支持.apk文件下载的设置 IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载。 IIS服务器不能下载.apk文件的解决办法:既然.apk无法下载是因为没有MIME,那么添加一个MIME类型就可以了。 IIS服务器不能下载.apk文件的解决步骤: 打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性; 单击MIME类型下的“MIME类型”按钮,打开MIME类型设置窗口; 单击“新建”,建立新的MIME类型; 扩展名中填写“.apk”, MIME类型中填写apk的MIME类型“ application/vnd.android.package-archive ” 单击“确定”保存设置。 重启IIS,使设置生效。 服务器apache支持.apk文件下载的设置 在Apache安装目录下的conf/mime.types文件的对应位置,加上以下一行语句,指定APK文件的MIME类型为 application/vnd.android.package-archive 即可: application/vnd.android.package-archive apk; 重启apache即可 服务器nginx支持.apk文件下载的设置 apk 和 .ipa分别是android应用和ios应用的扩展名。 如果在浏览器下载这些文件为后缀的文件时,会自动重命名为zip文件。 当然可以下载后手动修改后缀,依然可以安装。 如果想下载后缀直接就是apk ipa的,可以修改 /usr/local/nginx/conf目录下的mime.types 增加如下配置,重启nginx生效 application/vnd.android.package-archive apk; application/iphone pxl ipa; 少人做了Android的APP应用且放在了外网上,但是手机用户通过url找到了apk文件却无法实现下载,也或者下载后无法自动安装。针对这样一些问题今天进行了一个技术性的汇总,希望可以帮到那些为此问题烦恼的Android开发者。 写了一些 android 的应用放在网站上让人下载,在某些机型上,三星的 android 的 4.0 以上多款机型最普遍, 用安卓自带浏览器下载程序,会提示 “无法打开文件”,导致下载后不能直安装. 一般性只能采用下面方法解决: 1、用 UC 来下载安装,但这样就要求客户要用 UC 才可下载及安装我们的系统 2、叫用户自己在 android 在桌面上,打开文件夹, 则该 apk 点击时即可安装 问题:某些 android 自带浏览器 , 可能 对下载的 apk 安装进行了限制。 我想通过自己办法,例如修改 apk 或者加某些编译参数,能否解决这种安装的兼容问题 ? 最终人性化的解决方法: (1)、在IIS服务器上,MIME类型中添加一个: 文件扩展名: .apk MIME类型: application/vnd.android.package-archive (2)、服务端部署在tomcat下,已经在tomcat的web.xml里面配置了mini type ...

2017年11月17日 · 1 分钟 · 天边的星星

ToolBar 修改菜单字体和颜色

# ToolBar基本使用 关于ToolBar的使用,网上已经非常多了, ** 思路决定出路 so, 思路是这样的: - 隐藏ActionBar,<strong>这里有两种设定方法** - 布局文件中声明, 没什么说的 - 代码中设定一下,没什么说的 可以参考这里学习: Android 5.x Theme 与 ToolBar 实战 Android Toolbar样式定制详解 ToolBar菜单 ToolBar使用菜单,思路长这样: ** 首先在menu/menu_main.xml去声明布局,然后重写onCreateOptionsMenu(inflate该布局)和onOptionsItemSelected(设定其点击事件)即可,当然也可以通过toolbar.setOnMenuItemClickListener实现点击menu的回调。 这里遇到个坑,我只需要有一个菜单,默认设定后颜色为黑色,和橙色的colorPrimary不搭调,然后想着设定为白色,没想到掉坑里去了,其实我不是一个人:[Android中菜单的字体太小了:设置actionbar中menu的text的size](http://www.crifan.com/android_menu_text_size_too_small/),这位大神很给力,尝试了各种方法,最后搞掂,思路清晰,粗暴但是不简单呐。 我直接从他的解决方法入手,开始搞,然而不是很靠谱,只能修改字体大小,颜色还是黑的,丑爆。 因此来到了这里:Android Toolbar样式定制详解, 方法就是<strong>`添加 ToolBar 主题`** 这个demo运行,完美解决,但是在我自己的项目里,一直出不来效果,一定是哪里出现了问题。。 没错,确实是我的问题,凡事还是多反思自己,我画蛇添足咯,多写了点东西,是什么呢,你们应该猜到了,我们来看: 首先敲定ToolBar布局,加一个theme: </android.support.v7.widget.Toolbar>" data-snippet-id="ext.563df2e6a04501bd3623452810697ad7" data-snippet-saved="false" data-codota-status="done">` &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">android.support.v7.widget.Toolbar&lt;/span> &lt;span class="hljs-attr">android:id&lt;/span>=&lt;span class="hljs-string">"@+id/toolbar"&lt;/span> &lt;span class="hljs-attr">android:layout_width&lt;/span>=&lt;span class="hljs-string">"match_parent"&lt;/span> &lt;span class="hljs-attr">android:layout_height&lt;/span>=&lt;span class="hljs-string">"?/attr/actionBarSize"&lt;/span> &lt;span class="hljs-attr">android:background&lt;/span>=&lt;span class="hljs-string">"?attr/colorPrimary"&lt;/span> &lt;span class="hljs-attr">app:theme&lt;/span>=&lt;span class="hljs-string">"@style/ToolbarTheme"&lt;/span>&gt;&lt;/span> &lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">android.support.v7.widget.Toolbar&lt;/span>&gt;&lt;/span>` 然后定义ToolBarTheme样式 注意,此处的坑较多,首先,要有个parent,然后actionMenuTextColor前面**不能有android前缀**,谁加谁怀孕,当然在values-v21/styles.xml里是需要添加android前缀的。 " data-snippet-id="ext.124cfa678dc23e56377d3d6a603f2c55" data-snippet-saved="false" data-codota-status="done"&gt;` &lt;span class="hljs-comment">&lt;!-- ToolBar菜单样式 --&gt;&lt;/span> &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">style&lt;/span> &lt;span class="hljs-attr">name&lt;/span>=&lt;span class="hljs-string">"ToolbarTheme"&lt;/span> &lt;span class="hljs-attr">parent&lt;/span>=&lt;span class="hljs-string">"@style/ThemeOverlay.AppCompat.ActionBar"&lt;/span>&gt;&lt;/span>&lt;span class="xml"> &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">item&lt;/span> &lt;span class="hljs-attr">name&lt;/span>=&lt;span class="hljs-string">"actionMenuTextColor"&lt;/span>&gt;&lt;/span>@color/white&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">item&lt;/span>&gt;&lt;/span> &lt;span class="hljs-comment">&lt;!-- 敲定颜色--&gt;&lt;/span> &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">item&lt;/span> &lt;span class="hljs-attr">name&lt;/span>=&lt;span class="hljs-string">"android:textSize"&lt;/span>&gt;&lt;/span>18sp&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">item&lt;/span>&gt;&lt;/span> &lt;span class="hljs-comment">&lt;!-- 搞掂字体大小--&gt; &lt;/span>&lt;/span>` &lt;item name="android:textAllCaps"&gt;false&lt;/item&gt; ` &lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">style&lt;/span>&gt;&lt;/span>` 好了,这样就可以了,ToolBar 修改菜单字体和颜色完成。 &lt;item name="android:textAllCaps"&gt;false&lt;/item&gt; 设置防止都是大写

2017年11月7日 · 1 分钟 · 天边的星星

动态更新Toolbar Menu以及Menu中同时显示文字和图标

我们经常会有这样的需求,在切换Fragment或者点击某个按钮后动态更新Toolbar上Menu项.但是onCreateOptionsMenu方法只在创建Activity的时候调用一次,以后就不再调用了,所以就不能在onCreateOptionsMenu中做处理了。 不过系统提供了另外的一个方法onPrepareOptionsMenu,我们可以在这个方法中做一些逻辑处理,然后在需要更新Menu的地方调用invalidateOptionsMenu方法。 效果图如下: 点击`管理专辑`按钮更换Menu, ![](http://images2015.cnblogs.com/blog/902237/201607/902237-20160720181845747-1609503965.png) ``` &lt;span class="fu">&lt;span class="hljs-meta">@Override&lt;/span>&lt;/span> &lt;span class="kw">&lt;span class="hljs-function">&lt;span class="hljs-keyword">public&lt;/span>&lt;/span>&lt;/span> &lt;span class="dt">&lt;span class="hljs-function">&lt;span class="hljs-keyword">boolean&lt;/span>&lt;/span>&lt;/span> &lt;span class="fu">&lt;span class="hljs-function">&lt;span class="hljs-title">onCreateOptionsMenu&lt;/span>&lt;/span>&lt;/span>&lt;span class="hljs-function">&lt;span class="hljs-params">(Menu menu)&lt;/span> &lt;/span>{ &lt;span class="fu">getMenuInflater&lt;/span>().&lt;span class="fu">inflate&lt;/span>(R.&lt;span class="fu">menu&lt;/span>.&lt;span class="fu">menu&lt;/span>, menu); &lt;span class="kw">&lt;span class="hljs-keyword">return&lt;/span>&lt;/span> &lt;span class="kw">&lt;span class="hljs-keyword">super&lt;/span>&lt;/span>.&lt;span class="fu">onCreateOptionsMenu&lt;/span>(menu); } </div> <div class="sourceCode"> <div class="top-box hide"> </div> ``` `&lt;span class="fu">&lt;span class="hljs-meta">@Override&lt;/span>&lt;/span> &lt;span class="kw">&lt;span class="hljs-function">&lt;span class="hljs-keyword">public&lt;/span>&lt;/span>&lt;/span> &lt;span class="dt">&lt;span class="hljs-function">&lt;span class="hljs-keyword">boolean&lt;/span>&lt;/span>&lt;/span> &lt;span class="fu">&lt;span class="hljs-function">&lt;span class="hljs-title">onPrepareOptionsMenu&lt;/span>&lt;/span>&lt;/span>&lt;span class="hljs-function">&lt;span class="hljs-params">(Menu menu)&lt;/span> &lt;/span>{ &lt;span class="kw">&lt;span class="hljs-keyword">if&lt;/span>&lt;/span> (mIsEditStatus) { menu.&lt;span class="fu">findItem&lt;/span>(R.&lt;span class="fu">id&lt;/span>.&lt;span class="fu">action_share&lt;/span>).&lt;span class="fu">setVisible&lt;/span>(&lt;span class="kw">&lt;span class="hljs-keyword">false&lt;/span>&lt;/span>); menu.&lt;span class="fu">findItem&lt;/span>(R.&lt;span class="fu">id&lt;/span>.&lt;span class="fu">action_edit&lt;/span>).&lt;span class="fu">setVisible&lt;/span>(&lt;span class="kw">&lt;span class="hljs-keyword">true&lt;/span>&lt;/span>); } &lt;span class="kw">&lt;span class="hljs-keyword">else&lt;/span>&lt;/span> { menu.&lt;span class="fu">findItem&lt;/span>(R.&lt;span class="fu">id&lt;/span>.&lt;span class="fu">action_share&lt;/span>).&lt;span class="fu">setVisible&lt;/span>(&lt;span class="kw">&lt;span class="hljs-keyword">true&lt;/span>&lt;/span>); menu.&lt;span class="fu">findItem&lt;/span>(R.&lt;span class="fu">id&lt;/span>.&lt;span class="fu">action_edit&lt;/span>).&lt;span class="fu">setVisible&lt;/span>(&lt;span class="kw">&lt;span class="hljs-keyword">false&lt;/span>&lt;/span>); } &lt;span class="kw">&lt;span class="hljs-keyword">return&lt;/span>&lt;/span> &lt;span class="kw">&lt;span class="hljs-keyword">super&lt;/span>&lt;/span>.&lt;span class="fu">onPrepareOptionsMenu&lt;/span>(menu); }` ``` `<span class="fu">invalidateOptionsMenu</span>(); <span class="co"><span class="hljs-comment">//重新绘制menu</span></span>` ``` 另外的一个需求是在Menu中要显示图标和文字,虽然在`menu.xml`文件中配置了图标和文字,但是在有图标的情况下文字是不会显示的,即使设置 `app:showAsAction="always|withText"` 但是我在运行的时候发现并没有显示文字,处理方法是通过另外一个属性实现`app:actionLayout`. 首先menu.xml定义如下: ...

2017年11月4日 · 3 分钟 · 天边的星星