搭建Artifactory包管理仓库

1. maven 库管理软件介绍

Sonatype 和 bintray 都提供了可供自己部署的 maven 库管理软件。
Sonatype 提供了免费的sonatype/nexus,bintray 提供了免费的artifactory-oss。

2. 安装及配置

系统环境CentOS release 6.7 (Final)。

这里使用bitnami的应用快速部署服务。

  1. 下载一键安装包
    这里下载针对CentOS系统的jfrog-artifactory-oss的一键安装包。
  2. 安装
    执行下载的rpm包完成安装。
  3. 状态/启动/停止/重启

    # 查看artifactory服务总体的状态、启动、停止、重启
    artifactory-dir/ctlscript.sh status/start/stop/restart
    
    # 查看apache服务的状态、启动、停止、重启
    artifactory-dir/ctlscript.sh status/start/stop/restart apache
    
    # 查看tomcat服务的状态、启动、停止、重启
    artifactory-dir/ctlscript.sh status/start/stop/restart tomcat
    
  4. 配置
    Artifactory基本配置、aar打包上传
    Artifactory安全配置、包pom依赖配置

附:
Bitnami JFrog Artifactory帮助文档

3. JFrog Artifactory中的repository类别

libs-release-local = Your code releases
libs-snapshot-local= Your code snapshots
ext-release-local = Manually deployed 3rd party libs (releases)
ext-snapshot-local = Manually deployed 3rd party libs (shapshots)
plugins-release-local = Your and 3rd party plugins (releases)
plugins-snapshot-local =  Your and 3rd party plugins (snapshots)

参考:
What should be stored in “plugins-release-local” and “plugins-snapshot-local” repository

4. gradle打包上传相关命令

# 打包aar并发布
./gradlew assembleRelease artifactoryPublish

# 清空gradle缓存
./gradlew clean --refresh-dependencies

# 查看依赖树
./gradlew app:dependencies
2017/4/26 12:35 下午 posted in  包管理仓库
 

【篇二】BuildTools更新到24.0.3遇到的问题

1. 错误

Android build tools更新到24.0.3后,使用Jenkins打包,报以下错误,但在本地打包时一切正常。

AAPT err(Facade for 555668920): /var/lib/jenkins/.android-sdk/build-tools/24.0.3/aapt: /lib64/libc.so.6: version 'GLIBC_2.14' not found (required by /var/lib/jenkins/.android-sdk/build-tools/24.0.3/aapt)
Read more   2017/4/26 12:34 下午 posted in  持续集成
 

【篇三】通过Jenkins打包时自动加固APK

这里加固使用了360加固保。

  • 官网文档戳这里
  • 加固保客户端:官网提供了Windows、Mac的加固保客户端下载地址,也可通过网页在线加固。Linux版加固保客户端,由于一直未维护,官网未提供下载地址。
  • 获取Linux版加固保客户端:通过邮箱(360jiagubao@360.cn)或QQ群(群号:93070407)索取。【实测邮箱无人回复,QQ群比较靠谱】
Read more   2017/4/26 12:28 下午 posted in  持续集成
 

【篇一】搭建基于Jenkins的Android打包平台

查看CentOS系统版本

cat /etc/redhat-release

下述内容针对CentOS release 6.7 (Final)版本系统展开。

Read more   2017/4/21 15:14 下午 posted in  持续集成
 

【篇四】通过Jenkins打包ReactNative APP

系统版本:CentOS release 6.7 (Final)。
待打包的APP:原生+ReactNative的混合Android APP。

Read more   2017/4/21 14:37 下午 posted in  持续集成
 

Android多用户及sharedUserId

多用户机制

Android将Unix的多用户用于实现App的沙箱机制。

Android支持多用户之前:uid = appId;
Android支持多用户之后:uid = userId + appId(如u0_a110u10_a110)。

uid:Unix userId(不要与pid混淆);
userId:Android多用户;
appId:系统为每个App分配的id。

adb shell中查看2个用户打开同一个app时的进程示例,ps | grep -E 'NAME| <keyword>'

进程示意

  • Android 4.2(api 17)开始支持多用户,默认owner的userId为0,其余userId从10开始。
  • App私有数据区分不同用户,从/data/data/<pkgname>变更为/data/user/<userId>/<pkgname>;其中owner用户的/data/user/0/通过软链接方式指向/data/data/;
  • App代码不区分不同用户,仍为/data/app

sharedUserId

在android系统中,apk之间可以相互读取数据的条件是:有同样的签名,并且AndroidManifest.xml文件中配置的android:sharedUserId属性值相同,那么两个apk可以互相访问私有数据。但默认2个app运行在不同的进程,除非指定android:process为同一进程,否则无法直接访问内存数据。(实际测试,2个app指定同一个process则启动一个app时另一个会crash,不知为何?)

通过userid访问其他apk资源的方法:

  1. 应用程序A和插件(比如皮肤)程序B的AndroidManifest.xml中配置相同的sharedUserId

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.lonshine.skin"
        android:versionCode="1"
        android:versionName="1.0"
        android:sharedUserId="com.rongqin" >
    
  2. 应用A访问应用B中的资源

    Context context = createPackageContext("com.lonshine.skin", Context.CONTEXT_IGNORE_SECURITY);
    

    获取到com.lonshine.skin对应的Context,通过返回的context对象就可以访问到com.lonshine.skin中的任何资源。

  • 例如,应用A获取应用B中的bg.png:

    Resources resources = context.getResources();
    int drawableId = resources.getIdentifier("bg", "drawable", "com.lonshine.skin");
    Drawable drawable = resources.getDrawable(drawableId);
    

    这样就得到了图片的引用,其他xml资源文件的获取方式也是类似的。

  • 应用A获取应用B中的Preferences中的数据

    SharedPreferences prefs = context.getSharedPreferences("pref_conf", Context.MODE_PRIVATE);
    String str = prefs.getString("pref_user_city", "");
    

参考

Android多用户模式的特性
Android multiuser model architecture and related security threats
Android的权限机制之—— “沙箱”机制sharedUserId和签名
Android笔记:AndroidManifest.xml属性详解(一)之sharedUserId
Android关于android:sharedUserId和android:process的疑问?
apk,task,进程区别
ps进程命令

2017/3/21 12:10 下午 posted in  Android
 

线程间协作wait/notify、Condition

线程协作常见的2种方式:wait/notify、Condition。

Read more   2017/3/16 23:47 下午 posted in  并发编程
 

HTTP协议

HTTP/1.1

1.1相比1.0的变化:

  1. Connection: keep-alive 持久连接(默认)
  2. pipelining 管道机制(同一个TCP连接中,客户端可以同时发送多个请求,但服务端还是按顺序响应)
  3. Content-Length字段
  4. Transfer-Encoding: chunked 分块传输编码
  5. 头信息增加了Host字段
  6. 新增了许多动词方法:PUT、PATCH、HEAD、OPTIONS、DELETE。
Read more   2017/3/14 23:38 下午 posted in  TCP/IP HTTP协议
 

UDP、TCP

UDP(用户数据报协议)

UDP协议的特点

UDP协议只在IP协议上增加了很少的功能,即复用、分用、差错检测功能。

Read more   2017/3/14 18:11 下午 posted in  TCP/IP HTTP协议
 

HTTPS

HTTPS原理

HTTPS原理

Read more   2017/3/13 22:36 下午 posted in  TCP/IP HTTP协议