Yoube

yoube.pub


  • 首页

  • 归档

  • 标签

Android 7.0 特性

发表于 2016-12-12

FileProvider

在Android7.0过后 应用之间 Activity之间传递File路径的时候需要提供权限:
需要申明一个Provider来提供content://的uri格式;

申明一个FileProvider

<manifest>
...
<application>
    ...
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.mydomain.fileprovider"//唯一标识符
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />//配置提供文件的路径
    </provider>
    ...
</application>
</manifest>

file_paths 路径的配置

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images" path="images/"/>
    ...
</paths>

路径可配置

<files-path name="name" path="path" />

返回的是类似于: Context.getFilesDir().

<cache-path name="name" path="path" />

返回的是类似于: getCacheDir().

<external-path name="name" path="path" />

返回的是类似于: Environment.getExternalStorageDirectory().

<external-files-path name="name" path="path" />

返回的是类似于: Context#getExternalFilesDir(String) Context.getExternalFilesDir(null).

<external-cache-path name="name" path="path" />    

返回的是类似于:Context.getExternalCacheDir().

还有一个root-path 如果文件在外置的SD卡下应该配置这个:

<root-path  name="name" path="path" />    

Android cmake 文件解析

发表于 2016-11-02

cmake构建脚本文档:https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html

add_library(hello-jni 
            SHARED
            hello-jni.c)

target_link_libraries(hello-jni
                      android
                      log)

add_library

add_library( //向构建脚本添加源文件或库        
    hello-jni //表示模块名称,(用于生成.so库文件名称:lib*[库名称]*.so)
    SHARED //表示共享库 有这几个选项  [STATIC | SHARED | MODULE]
    [EXCLUDE_FROM_ALL]
    hello-jni.c //表示文件的路径
    source2 ...
)` 

Apk管理

发表于 2016-09-02
  • Binder
    • 学习AIDL binder
  • App打包流程

  • App安装流程

    • app下载到本地之后,放到哪个目录下,然后会产生什么文件 “增量更新”
    • 安装流程

      • 第一步:

        • 将apk文件复制到程序目录下(/data/app/)
        • 验证签名
      • 第二步:

        • 为应用创建数据目录(/data/data/package name/)
        • 提取dex文件到指定目录(/data/dalvik-cache/)
        • 修改系统包管理信息。注意,本文的分析基于Android 4.3源码。
  • App启动过程
    • Activity启动有几种方式?
      • 写一个startActivity
      • Launcher机制,启动默认的Activity。
  • 资源加载机制
  • Gradle

java

发表于 2016-07-13
  • java数据加密
  • java多线程
  • java技术拓展

java 数据加密

发表于 2016-07-13
  1. Base64算法
  2. 消息摘要算法

  3. 对称加密

    1. DES
    2. AES
  4. 非对称加密

###Base64

  • 概述
    • java中加解密的包有:
      • java.security : -消息摘要
      • javax.crypto : -安全消息摘要,消息认证码
      • java.net.ssl : -安全套接字
    • Bouncy Castle 第三方扩展加解密包 (可以配置和调用)
    • Commons Codec (Apache提供)
      • Base64 , 二进制 十六进制,字符集 编码
      • URL编辑 ,URL解码
  • 实现

    JDK 实现Base64

    /**    
     * JDK 实现Base64编码
     * @param src
     * @return
     */
    public static String jdkBase64Encode(String src){
        String result = null;
        BASE64Encoder base64Encoder = new BASE64Encoder();
        result = base64Encoder.encode(src.getBytes());
        return result ;
    }
    
    /**
     * JDK 实现Base64解码
     * @param code
     * @return
     * @throws IOException 
     */
    public static String jdkBase64Decode(String code) throws IOException{
        BASE64Decoder decoder  = new BASE64Decoder();
        byte[] bytes = decoder.decodeBuffer(code);
        return new String(bytes);
    }
    

    Commons-Codec 实现

    /**
     * CommonsCodec 实现Base64编码
     * @param src
     * @return
     */
    public static String commonsCodecBase64Encode(String src){
        byte[] bytes = Base64.encodeBase64(src.getBytes());
        return new String(bytes) ;
    }
    /**
     * CommonsCodec 实现Base64解码
     * @param code
     * @return
     */
    public static String commonsCodecBase64Decode(String code){
        byte[] bytes = Base64.decodeBase64(code.getBytes());
        return new String(bytes) ;
    }
    

    Buncy Castle 实现

    /**
     * Bouncy Castle 实现Base64编码
     * @param src
     * @return
     */
    public static String bcBase64Encode(String src){
        byte[] bytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
        return new String(bytes) ;
    }
    /**
     * Bouncy Castle 实现Base64解码
     * @param src
     * @return
     */
    public static String bcBase64Decode(String src){
        byte[] bytes = org.bouncycastle.util.encoders.Base64.decode(src.getBytes());
        return new String(bytes) ;
    }
    

技术拓展

发表于 2016-07-13
  • android
  • rxJava
  • kotlin
  • scala
  • play j2ee
  • java

     public static String SHA(String decript) {
           try {
    MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
    
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
    

Android NDK 环境构建

发表于 2016-07-03

1.首先在build.gradle配置NDK模块的声明来激活c++ / NDK支持

android {
defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            cppFlags ""
        }// ndkBuild {...}
    }
    ndk{
        abiFilters 'x86','x86_64','armeabi','armeabi-v7a','arm64-v8a'
    }
}
    externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }

}

ndk构建可以使用ndk-build 或者 在android studio 2.2 中使用cmake 构建工具构建

- ndk-build 需要写android.mk和application.mk构建脚本文件
- cmake 构建需要写 cmakeLists.txt 构建脚本      

Android 动画基础

发表于 2016-07-02

动画的分类

  1. Tween Animation 补间动画 (变化动画)
    可以使View进行四种状态的转变,具有一下属性可选择:
    Duration 动画的持续时间(毫秒)
    fillAfter 动画在动画结束后被应用
    filBefore 动画在动画开始前被应用
    interpolator 动画的插入器(可实现动画的加速或减速运行)
    repeatCount 动画的重复次数
    startOffset 动画的播放间隔
    四种状态:
    1. Alpha 渐变透明度动画
    2. Scale 渐变尺寸动画
    3. Translate 位移动画
    4. Rotate 旋转动画
  2. Frame Animation 帧动画
  3. Layout Animation 布局动画
  4. Property Animation 属性动画

操作系统的概念

发表于 2016-03-02

  • 分时操作系统

  • 实时操作系统

  • 批处理系统

  • 多道程序系统


分时系统(Time-sharing System)
将CPU的执行时间分成一个个的时间片(time slice),多用户中的每个用户轮转时间片,适合交互型作业

Memory sharing(存储共享)+time sharing(时间共享)-> multiprogramming(多道系统)+interaction(交互)
分时系统是一个通用的系统,不 限制任务的 数目和状态。
分时的特点:

  1. 交互性强,主要为交互型作业设计;
  2. 多道路性;
  3. 独占性;
  4. 及时性;

影响分时操作系统性能的因素:

  1. 用户数目;
  2. 时间片大小;
  3. 每次时间片切换是对换是数据量;

实时系统(Real-Time System)
实时系统主要用于专业系统(used in dedicated application),有非常严格的时间要求(well-defined fixed-time constraints)。

–软实时(实时Linux)
一个任务能够得到有确保的处理时间,达到系统的事件也能够在截至期限到来之前来理,但违法截至期限并不会带来致命的错误。

–硬实时(VxWorks等实时系统)

硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。

举一个经常使用的实例,中高档汽车中使用的气囊。当报告车辆碰撞的传感器中断CPU后,操作系统应快速地分配展开气囊的任务,并且不允许任何其他非实时处理进行干扰,晚一秒钟展开气囊比没有气囊的情况更糟糕,这就是一个典型的必须使用硬实时的系统。


批处理系统(Batch OS)
批处理系统主要用于大型系统,用于提高作业吞吐量(Throughout,单位时间内执行作业的数量)的系统。
批处理中基本无交互,存在两种调度:

  1. Job Schedule(作业调度),即将所要做的作业放到内存上,主要负责工作的道数,属于高级调度。
  2. CPU Schedule(进程调度),即在内存中CPU选择执行某个工作,属于低级调度。

进程的三个状态:就绪(Ready),运行(Running),等待(Waiting)/阻塞(Blocking)


多道程序系统(Multiprogramming System)

优点:

  1. Improve CPU utilization 2% –> 100%(in theory)
    注:但程序道数越多,系统消耗(overhead)越高,会造成CPU有效利用率降低
  2. Improve memory and I/O device utilization.
  3. Increase system throughout.
    特点:
  4. 多道
  5. 无序(unordered),执行是无序的,即用户不知道进程状态,但系统知道当前进程的状态
  6. 调度性(scheduling)

缺点:
交互性低

Wang ge

Wang ge

9 日志
6 标签
Links
  • 百度
  • Github
© 2015 - 2016 Wang ge
由 Hexo 强力驱动
主题 - NexT.Pisces