Archive for 十一月 2014

Android开发:使用JNI读取应用签名

为了防止被反编译,打算把关键代码写到so里(比如加解密),在so里加上判断APk包签名是否一致的代码,避免so被二次打包。其实用JNI读签名就是用了Java的反射机制。
先看Java读取签名的方法: Continue reading ‘Android开发:使用JNI读取应用签名’ »

Xcode 6.1 ios8文档下载,离线使用

xcode设置里有下载文档功能,但是,速度奇慢,不到10k,下了半天也不见进度条动。于是想找找有没有其他方法,比如说国内很好用的迅雷去下载。网上搜索到大多是介绍xcode 4.x的下载方法,已经不适用。今天折腾了大半天,总算搞定,跟大家分享下。
原理很简单,用到了一个代理软件Charles,最新版3.9.3,它可不仅仅可以架设代理服务器,也可以分析通过这个代理服务器访问的所有请求,包括使用SSL的请求,另外,它还有将请求映射到本地文件的功能,说到这,大家应该知道怎么玩了。开启Charles,先在xcode上点下载,Charles得到文档的url,用迅雷下载到该文件,再在charles上配置映射功能,将文档的url映射到本地文件,然后再次点下载,几秒钟下载完(因为文件在本地).
有一点需要注意:因为Apples使用了SSL,所以需要配置Charles使用SSL,添加Apple的Host.Charles如果要使用SSL需要安装Charles的证书,下载地址:http://www.charlesproxy.com/ssl.zip,解压安装证书。

Android开发:Android studio Gradle多渠道打包

Android studio终于发布1.0RC版了,而且官方说已经加上了本地的gradle maven库,创建工程时不需要再联网(我从0.9.3升级后,现有项目无法编译,还是要联网去下gradle-2.1,即使升级前已经下载好,可能是bug吧。会下载到~/.gradle/wrapper/dists/gradle-2.1-all里,如果你也是从老版本升级,这里应该有两个目录,一个是老版本下的2.1,一个是现在版本在下载的2.1,要避免再下载,从老版本目录复制gradle-2.1-all.zip到新目录即可),现在你可以抛弃笨重的Eclipse了。
当我们使用友盟等统计工具时,需要分渠道统计数据,可以在AndroidManifest.xml里或用java代码设置渠道,如果手工做这件事,那是相当麻烦的,每个渠道都要改一次代码,单独导出一个apk,但Gradle可以帮我们完成这些工作。 Continue reading ‘Android开发:Android studio Gradle多渠道打包’ »

Android开发:ListView/GridView中的TextView ellipsize=”marquee” 跑马灯效果

如果你的TextView在ListView/GridView中,会发现设置了android:ellipsize="marquee"后没有效果,这是因为TextView需要在获取焦点时才会滚动,而如果加了android:focusable="true",GridView的焦点被TextView抢走,无法响应点击事件。解决方法:自定义一个View继承系统的TextView,覆盖isFocused()方法,直接返回true,这是因为系统会调用isFocused()方法判断TextView是否已经取到焦点,如果没取到,使用默认的ellipsize="start"

注:item多时,会明显感觉比不滚动要卡很多,不建议使用,改设计吧

Android开发:Android Studio添加第三方so库

Android Studio现在生成的配置文件还不会自动添加so库,需要在build.gradle里手动加几行代码:


android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

把jniLibs.srcDirs = ['libs'] 放到android.sourceSets.main下,原有的不要删

Android开发:生成圆角(圆形)图片

Android support v4包里已经包含了生成圆角(圆形)的方法,太贴心了.


       Bitmap src=BitmapFactory.decodeResource(getResources(),R.drawable.temp_avatar);
        RoundedBitmapDrawable roundedBitmapDrawable =
                RoundedBitmapDrawableFactory.create(getResources(),src);
        //设置圆角半径
        roundedBitmapDrawable.setCornerRadius(Math.max(src.getWidth(), src.getHeight()) / 2.0f);
        imageViewAvatar.setImageDrawable(roundedBitmapDrawable);

当圆角半径为宽高中最大值的一半时,生成的就是圆形图片.