Long Luo's Life Notes

每一天都是奇迹

By LongLuo

一、Java

1
2
sudo apt-get update
sudo apt-get install openjdk-8-jdk openjdk-8-jre

通过which java找到java安装路径

添加环境变量

1
sudo vim ~/.bashrc

在文件末尾加入下列内容:

1
2
3
4
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin

二、Android

2.1 SDK

2.2 NDK

https://developer.android.google.cn/training/articles/perf-jni?hl=zh_cn

Linux下Android NDK

下载NDK版本:

https://developer.android.google.cn/ndk/downloads/

最新LTS版本(r21e):

下载Linux x86_64版本:

解压之后:

要想使用Android NDK,还需要进行环境变量的配置:

sudo vim ~/.bashrc

在文件末尾添加以下内容:

1
2
export ANDROID_NDK=/NDK Folder Path
export PATH=${PATH}:$NDK

其中文件夹路径要精确到解压后的最高层路径,例如:

1
2
export ANDROID_NDK=/mnt/e/Android/Linux/android-ndk-r21e
export PATH=$PATH:$ANDROID_NDK

保存文件并使之生效:

1
source ~/.bashrc

Android NDK的安装验证:

安装并配置完成Android NDK之后,需要进行安装验证,以确认正确安装并配置:

1
2
3
4
5
6
7
8
9
10
11
12
luolong@LAPTOP-BTCQ8FL5:~$ ndk-build
fcntl(): Operation not supported
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/mnt/e/Android/Linux/android-ndk-r21e/build/core/build-local.mk:151: *** Android NDK: Aborting . Stop.
luolong@LAPTOP-BTCQ8FL5:~$ ndk-build -version
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

只要不是command not found,ndk-build命令不存在,就表明Android NDK安装并配置成功。

Java基础:

计算机基础:

http://www.cnblogs.com/swiftma/

https://course.tianmaying.com/all

图像识别:

http://www.cnblogs.com/Imageshop/

http://blog.csdn.net/lmj623565791

https://drakeet.me/

http://blog.piasy.com/archive/

http://www.infoq.com/cn/

http://yanbober.github.io/

http://blog.csdn.net/zhangerqing?viewmode=contents

Java Image Process

http://www.jhlabs.com/index.html

Design Patterns

http://www.runoob.com/design-pattern/observer-pattern.html

http://androidxref.com/

http://weishu.me/archives/

http://www.blogjava.net/

http://blog.piasy.com/archive/

http://www.cnblogs.com/Imageshop/

阅读全文 »

代码检索工具

codota

http://www.codota.com/

SearchCode

Proguard

Proguard项目地址:

http://proguard.sourceforge.net/

Proguard自动生成工具:

http://proguard.herokuapp.com/

gitignore

gitignore自动生成工具:

https://www.gitignore.io/

Android

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

# Created by https://www.gitignore.io/api/android

### Android ###
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
*.iml
.idea/workspace.xml
.idea/libraries

# Keystore files
*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

### Android Patch ###
gen-external-apklibs
阅读全文 »

史铁生的《我与地坛》是我很喜欢的一篇文章,每次我感到低谷和失望时,就会拿出这篇文章来读一读,积蓄力量,奋力前行!

我在好几篇小说中都提到过一座废弃的古园,实际就是地坛。许多年前旅游业还没有开展,园子荒芜冷落得如同一片野地,很少被人记起。

地坛离我家很近。或者说我家离地坛很近。总之,只好认为这是缘分。地坛在我出生前四百多年就坐落在那儿了,而自从我的祖母年轻时带着我父亲来到北京,就一直住在离它不远的地方——五十多年间搬过几次家,可搬来搬去总是在它周围,而且是越搬离它越近了。我常觉得这中间有着宿命的味道:仿佛这古园就是为了等我,而历尽沧桑在那儿等待了四百多年。

它等待我出生,然后又等待我活到最狂妄的年龄上忽地残废了双腿。四百多年里,它剥蚀了古殿檐头浮夸的琉璃,淡褪了门壁上炫耀的朱红,坍圮了一段段高墙又散落了玉砌雕栏,祭坛四周的老柏树愈见苍幽,到处的野草荒藤也都茂盛得自在坦荡。这时候想必我是该来了。十五年前的一个下午,我摇着轮椅进入园中,它为一个失魂落魄的人把一切都准备好了。那时,太阳循着亘古不变的路途正越来越大,也越红。在满园弥漫的沉静光芒中,一个人更容易看到时间,并看见自己的身影。

自从那个下午我无意中进了这园子,就再没长久地离开过它。我一下子就理解了它的意图。正如我在一篇小说中所说的:“在人口密聚的城市里,有这样一个宁静的去处,像是上帝的苦心安排。”

两条腿残废后的最初几年,我找不到工作,找不到去路,忽然间几乎什么都找不到了,我就摇了轮椅总是到它那儿去,仅为着那儿是可以逃避一个世界的另一个世界。我在那篇小说中写道:“没处可去我便一天到晚耗在这园子里。跟上班下班一样,别人去上班我就摇了轮椅到这儿来。园子无人看管,上下班时间有些抄近路的人们从园中穿过,园子里活跃一阵,过后便沉寂下来。”“园墙在金晃晃的空气中斜切下一溜荫凉,我把轮椅开进去,把椅背放倒,坐着或是躺着,看书或者想事,撅一杈树枝左右拍打,驱赶那些和我一样不明白为什么要来这世上的小昆虫。”“蜂儿如一朵小雾稳稳地停在半空;蚂蚁摇头晃脑捋着触须,猛然间想透了什么,转身疾行而去;瓢虫爬得不耐烦了,累了祈祷一回便支开翅膀,忽悠一下升空了;树干上留着一只蝉蜕,寂寞如一间空屋;露水在草叶上滚动,聚集,压弯了草叶轰然坠地摔开万道金光。”“满园子都是草木竞相生长弄出的响动,窸窸窣窣片刻不息。”这都是真实的记录,园子荒芜但并不衰败。

除去几座殿堂我无法进去,除去那座祭坛我不能上去而只能从各个角度张望它,地坛的每一棵树下我都去过,差不多它的每一米草地上都有过我的车轮印。无论是什么季节,什么天气,什么时间,我都在这园子里呆过。有时候呆一会儿就回家,有时候就呆到满地上都亮起月光。记不清都是在它的哪些角落里了,我一连几小时专心致志地想关于死的事,也以同样的耐心和方式想过我为什么要出生。这样想了好几年,最后事情终于弄明白了:一个人,出生了,这就不再是一个可以辩论的问题,而只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。这样想过之后我安心多了,眼前的一切不再那么可怕。比如你起早熬夜准备考试的时候,忽然想起有一个长长的假期在前面等待你,你会不会觉得轻松一点?并且庆幸并且感激这样的安排?

剩下的就是怎样活的问题了,这却不是在某一个瞬间就能完全想透的、不是一次性能够解决的事,怕是活多久就要想它多久了,就像是伴你终生的魔鬼或恋人。所以,十五年了,我还是总得到那古园里去,去它的老树下或荒草边或颓墙旁,去默坐,去呆想,去推开耳边的嘈杂理一理纷乱的思绪,去窥看自己的心魂。十五年中,这古园的形体被不能理解它的人肆意雕琢,幸好有些东西是任谁也不能改变它的。譬如祭坛石门中的落日,寂静的光辉平铺的一刻,地上的每一个坎坷都被映照得灿烂;譬如在园中最为落寞的时间,一群雨燕便出来高歌,把天地都叫喊得苍凉;譬如冬天雪地上孩子的脚印,总让人猜想他们是谁,曾在哪儿做过些什么、然后又都到哪儿去了;譬如那些苍黑的古柏,你忧郁的时候它们镇静地站在那儿,你欣喜的时候它们依然镇静地站在那儿,它们没日没夜地站在那儿,从你没有出生一直站到这个世界上又没了你的时候;譬如暴雨骤临园中,激起一阵阵灼烈而清纯的草木和泥土的气味,让人想起无数个夏天的事件;譬如秋风忽至,再有一场早霜,落叶或飘摇歌舞或坦然安卧,满园中播散着熨帖而微苦的味道。味道是最说不清楚的,味道不能写只能闻,要你身临其境去闻才能明了。味道甚至是难于记忆的,只有你又闻到它你才能记起它的全部情感和意蕴。所以我常常要到那园子里去。

阅读全文 »

Android Asset Packaging Tool

AAPT命令格式

./appt

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
E:\Android\SDK\build-tools\24.0.1>aapt
Android Asset Packaging Tool

Usage:
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
List contents of Zip-compatible archive.

aapt d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]
strings Print the contents of the resource table string pool in the APK.
badging Print the label and icon for the app declared in APK.
permissions Print the permissions from the APK.
resources Print the resource table from the APK.
configurations Print the configurations in the APK.
xmltree Print the compiled xmls in the given assets.
xmlstrings Print the strings of the given compiled xml assets.

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
[-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
[--rename-manifest-package PACKAGE] \
[--rename-instrumentation-target-package PACKAGE] \
[--utf16] [--auto-add-overlay] \
[--max-res-version VAL] \
[-I base-package [-I base-package ...]] \
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \
[-D main-dex-class-list-file] \
[-S resource-sources [-S resource-sources ...]] \
[-F apk-file] [-J R-file-dir] \
[--product product1,product2,...] \
[-c CONFIGS] [--preferred-density DENSITY] \
[--split CONFIGS [--split CONFIGS]] \
[--feature-of package [--feature-after package]] \
[raw-files-dir [raw-files-dir] ...] \
[--output-text-symbols DIR]

Package the android resources. It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R
options control which files are output.

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
Delete specified files from Zip-compatible archive.

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
Add specified files to Zip-compatible archive.

aapt c[runch] [-v] -S resource-sources ... -C output-folder ...
Do PNG preprocessing on one or several resource folders
and store the results in the output folder.

aapt s[ingleCrunch] [-v] -i input-file -o outputfile
Do PNG preprocessing on a single file.

aapt v[ersion]
Print program version.

Modifiers:
-a print Android-specific data (resources, manifest) when listing
-c specify which configurations to include. The default is all
configurations. The value of the parameter should be a comma
separated list of configuration values. Locales should be specified
as either a language or language-region pair. Some examples:
en
port,en
port,land,en_US
-d one or more device assets to include, separated by commas
-f force overwrite of existing files
-g specify a pixel tolerance to force images to grayscale, default 0
-j specify a jar or zip file containing classes to include
-k junk path of file(s) added
-m make package directories under location specified by -J
-u update existing packages (add new, replace older, remove deleted files)
-v verbose output
-x create extending (non-application) resource IDs
-z require localization of resource attributes marked with
localization="suggested"
-A additional directory in which to find raw asset files
-G A file to output proguard options into.
-D A file to output proguard options for the main dex into.
-F specify the apk file to output
-I add an existing package to base include set
-J specify where to output R.java resource constant definitions
-M specify full path to AndroidManifest.xml to include in zip
-P specify where to output public resource definitions
-S directory in which to find resources. Multiple directories will be scanned
and the first match found (left to right) will take precedence.
-0 specifies an additional extension for which such files will not
be stored compressed in the .apk. An empty string means to not
compress any files at all.
--debug-mode
inserts android:debuggable="true" in to the application node of the
manifest, making the application debuggable even on production devices.
--include-meta-data
when used with "dump badging" also includes meta-data tags.
--pseudo-localize
generate resources for pseudo-locales (en-XA and ar-XB).
--min-sdk-version
inserts android:minSdkVersion in to manifest. If the version is 7 or
higher, the default encoding for resources will be in UTF-8.
--target-sdk-version
inserts android:targetSdkVersion in to manifest.
--max-res-version
ignores versioned resource directories above the given value.
--values
when used with "dump resources" also includes resource values.
--version-code
inserts android:versionCode in to manifest.
--version-name
inserts android:versionName in to manifest.
--replace-version
If --version-code and/or --version-name are specified, these
values will replace any value already in the manifest. By
default, nothing is changed if the manifest already defines
these attributes.
--custom-package
generates R.java into a different package.
--extra-packages
generate R.java for libraries. Separate libraries with ':'.
--generate-dependencies
generate dependency files in the same directories for R.java and resource package
--auto-add-overlay
Automatically add resources that are only in overlays.
--preferred-density
Specifies a preference for a particular density. Resources that do not
match this density and have variants that are a closer match are removed.
--split
Builds a separate split APK for the configurations listed. This can
be loaded alongside the base APK at runtime.
--feature-of
Builds a split APK that is a feature of the apk specified here. Resources
in the base APK can be referenced from the the feature APK.
--feature-after
An app can have multiple Feature Split APKs which must be totally ordered.
If --feature-of is specified, this flag specifies which Feature Split APK
comes before this one. The first Feature Split APK should not define
anything here.
--rename-manifest-package
Rewrite the manifest so that its package name is the package name
given here. Relative class names (for example .Foo) will be
changed to absolute names with the old package so that the code
does not need to change.
--rename-instrumentation-target-package
Rewrite the manifest so that all of its instrumentation
components target the given package. Useful when used in
conjunction with --rename-manifest-package to fix tests against
a package that has been renamed.
--product
Specifies which variant to choose for strings that have
product variants
--utf16
changes default encoding for resources to UTF-16. Only useful when API
level is set to 7 or higher where the default encoding is UTF-8.
--non-constant-id
Make the resources ID non constant. This is required to make an R java class
that does not contain the final value but is used to make reusable compiled
libraries that need to access resources.
--shared-lib
Make a shared library resource package that can be loaded by an application
at runtime to access the libraries resources. Implies --non-constant-id.
--app-as-shared-lib
Make an app resource package that also can be loaded as shared library at runtime.
Implies --non-constant-id.
--error-on-failed-insert
Forces aapt to return an error if it fails to insert values into the manifest
with --debug-mode, --min-sdk-version, --target-sdk-version --version-code
and --version-name.
Insertion typically fails if the manifest already defines the attribute.
--error-on-missing-config-entry
Forces aapt to return an error if it fails to find an entry for a configuration.
--output-text-symbols
Generates a text file containing the resource symbols of the R class in the
specified folder.
--ignore-assets
Assets to be ignored. Default pattern is:
!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~
--skip-symbols-without-default-localization
Prevents symbols from being generated for strings that do not have a default
localization
--no-version-vectors
Do not automatically generate versioned copies of vector XML resources.
--private-symbols
Java package name to use when generating R.java for private resources.
阅读全文 »
0%