My Avatar

Kejin

自己选的路,跪着也走下去!

发布 Kotlin 库到 Maven/JCenter仓库

2016年04月12日 星期日

这篇文章主要是记录我如果解决了这个发布问题, 具体的解决方案文件和教程我已经上传至 Github https://github.com/liungkejin/GradlePublish

之前的文章 Android Studio 发布项目到Maven/JCenter仓库, 将 Java 库发布到 Maven/JCenter 上.

但是今天我打算将我的 Kotlin 库发布上去的时候, 发现了一些问题. 因为 Kotlin 文件不能用 javadoc工具来生成 Javadoc, 导致了在执行

1
bintrayUpload
任务的时候
1
javadocJar
1
sourcesJar
两个任务都不能 build 成功, 虽然我可以把这两个任务去掉, 没有 *-sources.jar 和 *-javadoc.jar 一样也是可以发布到 Maven 上的, 但是如果要发布到 JCenter 上就需要这两个文件了,如果没有则审核过不了

JCenter hosts Java applications that follow the Maven convention. In addition to the existing files, you will need a *-sources.jar, and optionally a *-javadoc.jar. Your files should be under a Maven path layout. (see https://bintray.com/docs/usermanual/uploads/uploads_includingyourpackagesinjcenter.html)

Once those files are added, we will be glad to include your package in JCenter.

然后我在 Kotlin 社区找了一下关于生成 Javadoc 的讨论,最后发现 Kotlin 的 KDoc 项目已经没有了, 但是 Kotlin 开发了 Dokka , Dokka 是 kotlin 的一个文档生成引擎.

Dokka is a documentation engine for Kotlin, performing the same function as javadoc for Java. Just like Kotlin itself, Dokka fully supports mixed-language Java/Kotlin projects. It understands standard Javadoc comments in Java files and KDoc comments in Kotlin files, and can generate documentation in multiple formats including standard Javadoc, HTML and Markdown.

但是又很不幸的是, 目前 dokka 的

1
dokka-android-gradle-plugin
目前还没有 release, 而且 dokka 项目的 README 也都是坑, 虽然这个 Android gradle plugin 没有 release, 不过他已经在上面写上用法了, 也没说明有没有 release, 直至我在 bintray 上查看了他们的版本文件才知道确实没有这个 plugin…., 然后我试了一下使用
1
dokka-gradle-plugin
, 但是我也没有弄成功, 可他的 README 上面明明就是这样写的

阅读全文

自定义 NavigationView 时StatusBarColor的小问题

2016年04月10日 星期日

一般我们使用 Navigation Menu 的形式为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"/>

</android.support.v4.widget.DrawerLayout>

再加上 v21 的主题:

1
2
3
4
5
6
<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

这种最标准的形式, 运行的效果就是这样的:

这种效果看起来就好像状态栏浮在 NavigationLayout 之上, 感觉上会好很多

阅读全文

使用 Kotlin 开发 Android

2016年04月06日 星期三

学习和使用 Kotlin 来开发安卓已经有一段时间了, 总体来说, 我还是很喜欢 kotlin 这个语言的, 比 java 用起来感觉轻便很多, 特别是支持 lambda, 委托, 隐式类型转换, 让代码显得特别的精炼.

最主要的是 kotlin 很大程度避免了 java 里面的空指针异常, 而且可以和 java 自由混合.

用 Kotlin 来开发 Android 也极好的, 因为 Kotlin 支持 Java 6+ :)

可以看一下 java 和 kotlin 的语言对比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// java
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.post(new Runnable() {
            @Override
            public void run() {
                //
            }
        });
    }
});

// kotlin, lambda, 虽然 Java 8 也支持 lambda 了, 但是 Android 不支持 Java8 ...
view.setOnClickListener {
    it.post {
        // run
    }
}

// java, 这里如果 view 为 null, 则会抛出Null异常
void invisibleView(View view) {
    view.setVisibility(View.INVISIBLE);
}

// kotlin, 这是不允许传入null, 所以不会出现 Null 异常
fun invisibleView(view: View) {
    view.visibility = View.INVISIBLE
}
// 即使允许传入 null, kotlin 也可以很轻松的避免 Null 异常
fun invisibleView(view: View?) {
    view?.visibility = View.INVISIBLE
}

不过kotlin也有一些不如人意的地方, 比如 泛型感觉没有java的好用 (可能是我还没掌握好吧!),

但总的来说 kotlin 是很值得学习的!

阅读全文

ExRecyclerView的使用介绍

2016年04月04日 星期一

ExRecyclerView ExRecyclerView 使用 Kotlin 编写

demo

很多时候我们在使用 RecyclerView 时, 总是会碰到需要设置一个 header 或者 footer 的情况, 比如我们要加一个显示加载更多的footer,跟随 RecyclerView 一起滑动的 header, 等等, 这种情况如果是 ListView 我们可以简单的使用

1
addHeaderView()
或者
1
addFooterView()
就可以解决, 但是 RecyclerView 就需要我们自己来进行处理. 虽然说不困难, 但是每次都要重新实现一遍就很麻烦了.

ExRecyclerView一共实现了3个功能:

  1. 能添加和删除 header 和 footer
  2. 滑到底部时回调加载更多
  3. 支持 Drag 和 Swipe 拖动 item 或者 swipe 删除 item (可以自定义拖动,滑动的样式)

ExRecyclerAdapter 是一个内置了 List 集合的 RecyclerAdapter, 每次改变数据都会主动进行相应的notify(也可以主动不进行 notify)

阅读全文

Jekyll语法高亮问题

2016年04月03日 星期天

Jekyll 的语法高亮在 Jekyll 3.0 以上默认使用的是 Rouge, 如果使用的是 Jekyll 2, 需要在配置文件里面设置

1
highlighter
1
rouge
, 并确保 rouge 被正确的安装了

[表示此方法我没成功]


另外, 就是使用 Pygments, 这个需要使用 Python 来安装

如果你不想麻烦, 可以直接使用我的这个 syntax.css, 这个就是最后使用 pygments 生成的默认的代码高亮 css 文件

  • 把这个 syntax.css 放在

    1
    /assets/css/syntax.css
    

  • 1
    _include/head.html
    
    或者你自己的通用头文件里面添加 link

1
<link rel="stylesheet" href="/assets/css/highlight.css">
  • 然后再
    1
    _config.yml
    
    设置
    1
    highlight: true
    

阅读全文

Android Studio 发布Java项目到Maven/JCenter仓库

2016年03月27日 星期天

为了方便自己和他人引用我所写的java库,发布到 Maven/JCenter 上是最好不过了,利己利人,本文主要参考了

使用Gradle发布项目到JCenter仓库

Git项目: Gradle Publish

虽然这篇已经很详细的,但是我在实际操作中还是碰到了一些问题,所以自己再整理一遍,方便以后查阅

阅读全文

Android Test 学习基础

2016年03月26日 星期六

开发安卓也有很长一段时间了,但是很少用到测试框架, 平时写用都靠打 log 进行调试和测试, 运行的对不对,异常情况的处理,边界条件的处理,全靠自己的想象,写出来的代码和应用健壮性可想而知!

所以学习测试框架是很有必要的一件事,虽然在公司可能很少会用到,因为你可能没有时间去写一个测试案例! 其工作量不亚于实现一个应用功能, 但是我觉得测试是对自己所写代码的一种负责!

阅读全文

开始篇

2016年03月05日 星期五

我的第一篇 github 博客, 本博客使用 jekyll + bootstrap 搭建!

感谢 github 提供的 Github Pages 功能!

此博客布局参考了 Monkey Snatch Banana 博客

个人页面应用了 resumecard 项目

阅读全文