本书介绍了十条互联网时代的规则。

规则一:去中心化与即时反应。换一种说法,是群体智慧和快。凯文·凯利说,“推动大众化的网络连接最可靠的方式是去开拓草根民众的力量,去网罗、连接最分散的底层的力量……”但他并没有极端地认为集体的智慧可以解决一切问题,凯文·凯利在这里也强调了“领导”的力量。“如果没有来自顶层的指导和管理,自下而上的控制方式会在面临很多选择的时候停滞不前。如果没有某种领导元素存在,下层的广大群众会在很多选择面前丧失行动。”
no Pain no Gain no Gavin
本书介绍了十条互联网时代的规则。
规则一:去中心化与即时反应。换一种说法,是群体智慧和快。凯文·凯利说,“推动大众化的网络连接最可靠的方式是去开拓草根民众的力量,去网罗、连接最分散的底层的力量……”但他并没有极端地认为集体的智慧可以解决一切问题,凯文·凯利在这里也强调了“领导”的力量。“如果没有来自顶层的指导和管理,自下而上的控制方式会在面临很多选择的时候停滞不前。如果没有某种领导元素存在,下层的广大群众会在很多选择面前丧失行动。”
IntelliJ IDEA,是java编程语言开发的集成环境,在业界被公认为最好的java开发工具之一。参考其官网:https://www.jetbrains.com/idea/。
其实不只是Java,同家公司的Android Studio、PHPStorm、WebStorm、PyCharm、RubyMine的功能,它都有,不就是插件嘛!所以,最近把Android Studio、PHPStorm、WebStorm、PyStorm全部干掉了,所有项目都用IntelliJ来开发。
因为IntelliJ的各种插件都比较新,所以,顺带把Android的各种编译工具和环境更新到相对新的版本,也就有了如下采坑总结,记录一下。
1.gradle.properties
#gradle:3.0.1 studio3.0 之前用
#android.useDeprecatedNdk=true
#gradle:3.0.1 studio3.0 之后用
#android.deprecatedNdkCompileLease=1511832698813
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
2.根目录下的:build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
// jcenter {
// url "http://jcenter.bintray.com/"
// }
}
dependencies {
// classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.mob.sdk:MobSDK:+'
classpath 'com.mob.sdk:MobSDK-Impl:2018.0710.1743'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
maven {
url 'https://dl.bintray.com/youzanyun/maven/'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
3.library目录下的:build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
lintOptions {
abortOnError false
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
4.子项目的build.gradle
android {
dexOptions {
preDexLibraries = false
javaMaxHeapSize "4g"
}
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk" // 设置所要编写的c源码位置,以及编译后so文件的名字
}
}
compileOptions {
encoding = "UTF-8"
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
signingConfigs {
release {
keyAlias '***'
keyPassword '***'
storeFile file('../***')
storePassword '***'
}
}
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
compileSdkVersion 28
defaultConfig {
applicationId "com.threeti.huimapatient"
multiDexEnabled true
minSdkVersion 16
targetSdkVersion 26
versionCode 800
versionName "8.0.0"
// 下面这段是老版本的写法,不需要了
// ndk {
// moduleName "JniAES"
// ldLibs "log", "z", "m"
// abiFilters "armeabi-v7a", "x86"
// }
// 使用ndkBuild工具
externalNativeBuild {
ndkBuild {
//指定 Application.mk 的路径
arguments "NDK_APPLICATION_MK:=src/main/jni/Application.mk"
//指定生成哪些平台的 so 文件
//abiFilters "armeabi-v7a", "armeabi"
//生成多个版本的so文件
abiFilters "armeabi-v7a", "x86"
//cFlags 和 cppFlags 是用来设置环境变量的, 一般不需要动
cFlags "-DTEST_C_FLAG1", "-DTEST_C_FLAG2"
cppFlags "-DTEST_CPP_FLAG2", "-DTEST_CPP_FLAG2"
//cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
signingConfig signingConfigs.release
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "YOURAPPNAME_release_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
}
}
}
}
sourceSets {
main {
jni.srcDirs = ['src/main/jni','src/main/jni/']
jniLibs.srcDir 'src/main/libs'
}
}
// Specifies the flavor dimensions you want to use. The order in which you
// list each dimension determines its priority, from highest to lowest,
// when Gradle merges variant sources and configurations. You must assign
// each product flavor you configure to one of the flavor dimensions.
flavorDimensions "default"//,"mode","version","api"
productFlavors {
xiaomi { // Assigns this product flavor to the "mode" flavor dimension.
dimension "default"
}
yingyongbao { // Assigns this product flavor to the "mode" flavor dimension.
dimension "default"
}
huawei { // Assigns this product flavor to the "mode" flavor dimension.
dimension "default"
}
// 这里需要这个配置是因为,我们上面虽然建立了渠道,但是并没有处理Manifest里面的meta-data信息。
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL: name] //动态地修改AndroidManifest中的渠道名
}
}
useLibrary 'org.apache.http.legacy'
}
repositories {
flatDir {
dirs 'libs'
}
mavenCentral()
}
dependencies {
implementation 'in.srain.cube:ultra-ptr:1.0.11'
implementation files('libs/universal-image-loader-1.9.3.jar')
implementation (name: 'alipaySdk-15.6.8-20191021122455-noUtdid', ext: 'aar')
...
}
5.对应的android.mk
LOCAL_PATH := $(call my-dir)
# Builds a dylib out of test.cpp
# 会清除很多 LOCAL_XXX 变量,不会清除 LOCAL_PATH,基本上是固定的,不需要去动
include $(CLEAR_VARS)
# 需要构建模块的名称,会自动生成相应的 libNDKSample.so 文件,每个模块名称必须唯一,且不含任何空格
LOCAL_MODULE := JniAES
# 包含要构建到模块中的 C 或 C++ 源文件列表
LOCAL_SRC_FILES := KeyValue.c
# 指定这个模块里会用到哪些原生 API,详见:https://developer.android.google.cn/ndk/guides/stable_apis.html
LOCAL_LDLIBS := -llog
# 帮助系统将所有内容连接到一起,固定的,不需要去动
include $(BUILD_SHARED_LIBRARY)
6.对应的Application.mk
# https://developer.android.com/ndk/guides/application_mk.html
# 选择不同的 ABI,多个使用空格作为分隔符,全部是all
APP_ABI := all # armeabi-v7a x86
# 指定要使用的运行时
APP_STL := system
参考:
https://developer.android.com/ndk/guides/android_mk
Gradle其实就是一个构建项目的工具,即把一堆堆的目录、文件按照一定的规则关联起来,形成一个项目的自动化构建工具。
位置:项目主目录 gradle 文件夹->wrapper->gradle-wrapper.properties
#Wed Apr 18 10:44:08 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
Gradle插件是针对Gradle发行版和Android SDK Build Tools封装的一个工具,主要有两大功能:
项目主目录下的 build.gradle 中,如“com.android.tools.build:gradle:3.3.0”
Gradle插件会有版本号(3.3.0),每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本,如gradle-4.1-all.zip)
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
// classpath 'com.android.tools.build:gradle:2.3.3'
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.6"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
}
buildToolsVersion 位置:app 目录->buid.gradle 文件
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.sogou.teemo.translate.launcher"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.minSdkVersion
versionCode 48
versionName "1.4.8.${releaseTime()}"
// jackOptions {
// enabled false
// }
multiDexEnabled true //使能multDex
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
}
}
如果这两个版本对应不上了,那么构建项目的时候就会报错。
三者对应关系如下表:
plugin version | Required Gradle version | Required Gradle version |
---|---|---|
1.0.0 – 1.1.3 | 2.2.1 – 2.3 | |
1.2.0 – 1.3.1 | 2.2.1 – 2.9 | |
1.5.0 | 2.2.1 – 2.13 | |
2.0.0 – 2.1.2 | 2.10 – 2.13 | 21.1.1+ |
2.1.3 – 2.2.3 | 2.14.1+ | 23.0.2+ |
2.3.0+ | 3.3+ | 25.0.0+ |
2.3.0+ | 3.3+ | |
3.0.0+ | 4.1+ | 26.0.2+ 不再需要为构建工具指定版本 – 插件默认使用最低要求的版本。可以删除该android.buildToolsVersion属性 |
3.1.0+ | 4.4+ | 27.0.3+ 不再需要为构建工具指定版本 – 插件默认使用最低要求的版本。可以删除该android.buildToolsVersion属性 |
3.2.0 – 3.2.1 | 4.6+ | |
3.3.0 – 3.3.2 | 4.10.1+ | |
3.4.0+ | 5.1.1+ |
https://blog.csdn.net/gongxiaoou/article/details/81082387
http://www.blogdaren.com/post-2418.html
https://developer.android.google.cn/studio/releases/gradle-plugin
由于是覆盖安装,Apache通过删除lib文件夹中的old文件解决。
由于是覆盖安装,MySQL通过删除/Applications/XAMPP/xamppfiles/var/mysql/ 下的ib_logfile1和ib_logfile0解决
参考:https://stackoverflow.com/questions/33109315/unknown-unsupported-storage-engine-innodb
《丰乳肥臀》是莫言最著名的代表作之一 。据说小说热情讴歌了生命最原初的创造者——母亲的伟大、朴素与无私,生命的沿袭的无与伦比的重要意义。并且在这一幅生命的流程图中,弥漫着历史与战争的硝烟,真实,不带任何偏见,再现了一段时期内的历史。
最近,公司园区有了图书借阅点,刚好有这本书。同事们说怎么这书叫《丰乳肥臀》?我说是莫言的书,于是,借了这本书拿回家看。家里的阿姨看到后吓了一跳,以为是黄书。恩,书封面的确是黄色,不过内容读了一点也不让人爽,更加没有高潮。有的是恶心、唏嘘、怀疑、黑人问号脸、彷徨等等人生百味。如果说“丰乳”还算切题,肥臀算是什么呢?想不到莫言也是个标题党,倒还真的具有传播性。