Android向的工作笔记

2016年11月24日

Is Android direct texture supported on imx6q?
http://www.slideshare.net/GlobalLogicUkraine/direct-access-to-open-gl-texture-memory-33606538
http://www.eoeandroid.com/thread-326092-1-1.html?_dsign=3b421428
http://stackoverflow.com/questions/22383533/memcpy-from-graphic-buffer-is-slow-in-android%E3%80%82
http://stackoverflow.com/questions/27426823/creating-a-mapped-direct-opengl-es-texture-on-android-ndk

2016年11月22日

ANDROID中的EGL扩展
using direct textures on android
EGLImage - updating a texture without copying memory under Android
android 下使用Direct Texture
EGLImage与纹理
OpenGL ES 3.0 让移动世界更上一层楼
Using GL_OES_EGL_image_external on Android

2016年11月19日

PBO + glReadPixels not so fast? 没有结论,但至少知道正确姿势
OpenGL ES3 接口文档
Fast Pixel Transfers with Pixel Buffer Objects
Reading the OpenGL backbuffer to system memory
Faster Alternatives to glReadPixels and glTexImage2D in OpenGL ES
OpenGL系列教程之九:OpenGL像素缓冲区对象(PBO)
翻译自一个蛮不错的系列
OpenGL离线渲染和缓冲区对象

2016年10月23日

解决:Dialog、AlertDialog、DialogFragment等自定义布局中EditText无法弹出输入法软键盘的问题
http://www.jianshu.com/p/85aa47d46065

注:DialogFragment没有onShowListener,Dialog才有

android:windowSoftInputMode属性详解
http://blog.csdn.net/gaomatrix/article/details/7057032

注:软键盘强制弹出需要这个属性的配合

使用DialogFragment实现底部弹窗布局
http://www.jianshu.com/p/3d045ee00880

注:核心是将Fragment所属的Windows的LayoutParams.gravity值改为Gravity.BOTTOM

    // 设置宽度为屏宽, 靠近屏幕底部。
    Window window = dialog.getWindow();
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.gravity = Gravity.BOTTOM; // 紧贴底部
    lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
    window.setAttributes(lp);

[Android] Material 风格的 Dialog 的使用
http://www.jianshu.com/p/6caffdbcd5db

使用官方兼容包,来保证默认dialog风格一致,同时不丑

2016年10月10日

首先要理解Git的工作流程,最基础的操作就不说了,重点在于Git的分支管理,参见《Pro Git》的第三章 Git 分支一章。

如果项目中不幸使用的不是Git,难道就不能领略Git的灵活性了吗?可以使用git svn工具,参见 Git与其他系统-作为客户端的Git

还有文中没提到的git svn的命令:git与SVN协同的工作流程

2016年10月07日

深入理解Gradle: http://www.infoq.com/cn/articles/android-in-depth-gradle

2016年10月07日

Fresco: http://www.fresco-cn.org
TextView部分文字点击事件: http://blog.csdn.net/true100/article/details/44855731

2016年09月30日

Jack (Java Android Compiler Kit)
似乎现在还没有普遍用起来这个工具。理论上是向后兼容的,打出来的包也能够在低版本下运行。

2016-09-26

Android单元测试研究与实践

2016-09-21

ActivityThread的main方法究竟做了什么?

2016-09-20

Python格式化输出

占位符 含义
%x hex 十六进制
%d dec 十进制
%o oct 八进制

参考资料

Python print函数用法,print 格式化输出

2016-09-19

统计类库的方法数

Android Studio 插件

Android Methods Count

在线网站

http://www.methodscount.com/

参考资料

怎样高效统计Android开源库的方法数

2016-09-14

学习Cap'n proto

Cap'n proto 和 Protocol Buffer 的性能对比

学习Cap'n proto
Cap'n proto 官网
Cap'n Proto for Java

FlatBuffers 体验

FlatBuffers 体验

Google Protocol Buffer 的使用和原理

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

参考资料

Google Protocol Buffer 的使用和原理
Google Protocol Buffer Java教程
[译]Protobuf 语法指南
设计一种简化的 protocol buffer 协议

2016-09-13

动态开启系统组件的方法

/**
 * 批量禁用组件
 * @param context 上下文
 * @param components service、receiver组件的完整类名
 * @return 本次是否有组件的状态被变更
 */
public static boolean disableComponents(Context context, String[] components) {
    PackageManager pm = context.getPackageManager();
    boolean hasChange = false;
    for (String component : components) {
        ComponentName componentName = new ComponentName(context, component);
        // enabled=true的时候,改为禁用
        if (pm.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
            pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
            hasChange = true;
            LogUtils.d(TAG, "disable component: " + componentName);
        }
    }
    return hasChange;
}
/**
 * 批量禁用组件
 * @param context 上下文
 * @param components service、receiver组件的完整类名
 * @return 本次是否有组件的状态被变更
 */
public static boolean enableComponents(Context context, String[] components) {
    PackageManager pm = context.getPackageManager();
    boolean hasChange = false;
    for (String component : components) {
        ComponentName componentName = new ComponentName(context, component);
        // enabled=false的时候,改为启用
        if (pm.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
            pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
            hasChange = true;
            LogUtils.d(TAG, "enable component: " + componentName);
        }
    }
    return hasChange;
}

通过代码动态启用/关闭,即便应用被杀配置也依旧生效。目测系统内部维持了一个记录表,后续研究下。

参考资料

Enable and disable a Broadcast Receiver
PackageManager

2016-09-12

Android手机如何录制屏幕及转GIF

Android Studio提示svn版本过旧

使用SmartSvn的时候,svn目录被升级到了1.9格式,而Android Studio最高只支持1.8

升级本地的svn命令到1.9版本,然后修改Android Studio的配置,如下:

Android Studio修改配置

Gradle根据buildType配置依赖

// build.gradle
android {
    buildTypes {
        ...
        custom {
            ...
        }
    }
}

dependencies {
    customCompile fileTree(dir: 'custom/libs', include: '*.jar')
}

记得android的block要在dependencies前面,否则Gradle会报错,提示找不到customCompile这个DSL方法

2016-09-06

第三方依赖minSdkVersion高于项目的minSdkVersion导致项目编译不过

AndroidManifest.xml内的<use-sdk>标签内添加tools:overrideLibrary="包名"

如:

<use-sdk tools:overrideLibrary="第三方依赖的名字" />

2016-09-05

构建服务器提示构建脚本错误:$'\r': command not found

Windows下的文件格式采用\n\r换行,Unix下采用\n换行,导致Linux构建服务器上运行脚本的时候在行开始发现了不支持的命令'\r'。

使用dos2unix命令将文件的格式转为unix格式即可。

# Usage
dos2unix build.sh

自定义shape背景透明要显式指定color为透明

自定义shape时,如果不需要底色,一般会省略<solid />的定义,在大部分系统上,这个时候是没有底色的,即透明效果。但在某些rom,如小米2A,会出现系统给的默认底色是黑色,导致视觉还原出问题。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 圆角 -->
    <corners android:radius="1dp" />
    <!-- 底色,这里要显式指定为透明 -->
    <solid android:color="@color/kg_color_transparent" />
    <!-- 高度 -->
    <size android:height="12dp"/>
    <!-- 边线 -->
    <stroke android:width="1dp" android:color="#7d98a9" />
    <!-- 内边距 -->
    <padding android:left="2dp" android:right="2dp" />
</shape>

2016-09-02

动画效果

xml方式定义

<animation-list android:id="@+id/selected" android:oneshot="false">
    <item android:drawable="@drawable/wheel0" android:duration="50" />
    <item android:drawable="@drawable/wheel1" android:duration="50" />
    <item android:drawable="@drawable/wheel2" android:duration="50" />
    <item android:drawable="@drawable/wheel3" android:duration="50" />
    <item android:drawable="@drawable/wheel4" android:duration="50" />
    <item android:drawable="@drawable/wheel5" android:duration="50" />
</animation-list>

oneshot:true则只播放一次,false则表示联系播放
<item>:定义一帧动画,属性drawable指定这一帧对应的图片,duration指定这一帧的播放时长(ms)

代码方式

Drawable[] loadingDrawables = new Drawable[] {
    Global.getResources().getDrawable(R.id.wheel0),
    Global.getResources().getDrawable(R.id.wheel1),
    Global.getResources().getDrawable(R.id.wheel2),
    Global.getResources().getDrawable(R.id.wheel3),
    Global.getResources().getDrawable(R.id.wheel4),
    Global.getResources().getDrawable(R.id.wheel5)
}; 

AnimationDrawable animationDrawable = new AnimationDrawable();

for (Drawable frame : loadingDrawables) {
    animationDrawable.addFrame(frame, 50);
}

播放和停止

ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image);
img.setBackgroundResource(R.drawable.spin_animation);

// 代码定义的方式
// img.setBackgroundDrawable(animationDrawable);

// 获取背景,xml定义的会编译为AnimationDrawable 对象
AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
// 启动播放,默认是循环播放
frameAnimation.start();

// 停止播放
frame.Animation.stop();

参考资料

  1. AnimationDrawable

2016-09-01

动态加载dex文件

2.3系统无法直接加载dex文件,仅支持加载zip格式的dex包,为了保证兼容,必须将dex文件改名为classes.dex,在压缩成zip格式的压缩包。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,368评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,392评论 2 45
  • 自赞毁他严格来说也算是一大戒,守5戒方可成人,守五戒也属于忍吧,虽然不能破五明,我们的睡眠就是无明本身的属性,修道...
    huzx阅读 304评论 0 0
  • 我早已放弃了成为作家的梦想,也长久的疏于锻炼写作能力,甚至很长一段时间没有认真的看完一本书。但我还是在每天写一些文...
    小月samaOVO阅读 237评论 0 0