東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

MacBookPro2018x3 新冠肺炎COVID-19 疫情当前

2020年6月23日星期二



1,git配置跟随项目
配置local就可以,只对当前项目生效
SENRSL:xxx senrsl$ git config --local user.name new.name
SENRSL:xxx senrsl$ git config --local user.email new.name@xxx.com
SENRSL:xxx senrsl$ git config --list

配置后,会在 项目xxx/.git/config文件增加当前用户配置。

2,仓库迁移并保留提交记录
1)直接推新库
git remote add origin git@bitbucket.org:dcjz/candy.git
git push -u origin master
    这个方法不会保留历史记录并且只推一个分支。
2)推新库并保留记录
本地有的话 直接改远端库推
本地没有现拉的话先 git clone --mirror xxxxxx.git
或只拉指定分支 git clone -b develop git@xxxxxx.git
  1. SENRSL:Candy senrsl$ git branch
  2. * blue
  3.   master
  4. SENRSL:Candy senrsl$ git remote -v
  5. origin    git@github.com:xxxxxx.git (fetch)
  6. origin    git@github.com:xxxxxx.git (push)
  7. SENRSL:Candy senrsl$ git remote set-url --push origin git@bitbucket.org:dcjz/candy.git
  8. 此处如使用 git remote set-url origin git@xxxx.git 是修改featch + push
  9. SENRSL:Candy senrsl$ git remote -v
  10. origin    git@github.com:xxxxxx.git (fetch)
  11. origin    git@bitbucket.org:dcjz/candy.git (push)
  12. SENRSL:Candy senrsl$ git push --mirror
  13. Counting objects: 41735, done.
  14. Delta compression using up to 12 threads.
  15. Compressing objects: 100% (13351/13351), done.
  16. packet_write_wait: Connection to 18.205.93.2 port 22: Broken pipe
  17. fatal: The remote end hung up unexpectedly
  18. fatal: The remote end hung up unexpectedly
  19. SENRSL:Candy senrsl$ git push --mirror
  20. Counting objects: 41735, done.
  21. Delta compression using up to 12 threads.
  22. Compressing objects: 100% (13351/13351), done.
  23. packet_write_wait: Connection to 18.205.93.2 port 22: Broken pipe
  24. fatal: The remote end hung up unexpectedly
  25. fatal: The remote end hung up unexpectedly
  26. SENRSL:Candy senrsl$ export http_proxy=http://127.0.0.1:1087
  27. SENRSL:Candy senrsl$ git push --mirror
  28. Counting objects: 41735, done.
  29. Delta compression using up to 12 threads.
  30. Compressing objects: 100% (13351/13351), done.
  31. Writing objects: 100% (41735/41735), 129.65 MiB | 9.00 KiB/s, done.
  32. Total 41735 (delta 28055), reused 36480 (delta 23969)
  33. remote: Resolving deltas: 100% (28055/28055), done.
  34. To bitbucket.org:dcjz/candy.git
  35.  * [new branch]        blue -> blue
  36.  * [new branch]        master -> master
  37.  * [new branch]        origin/HEAD -> origin/HEAD
  38.  * [new branch]        origin/blue -> origin/blue
  39.  * [new branch]        origin/master -> origin/master
  40.  * [new tag]           v1.0.1 -> v1.0.1
  41.  * [new tag]           v1.0.1.10r -> v1.0.1.10r
  42.  * [new tag]           v1.0.1.2c -> v1.0.1.2c
  43.  * [new tag]           v1.0.1.3c -> v1.0.1.3c
  44.  * [new tag]           v1.0.1.4c -> v1.0.1.4c
  45.  * [new tag]           v1.0.1.5c -> v1.0.1.5c
  46.  * [new tag]           v1.0.1.5rc -> v1.0.1.5rc
  47.  * [new tag]           v1.0.1.6c -> v1.0.1.6c
  48.  * [new tag]           v1.0.1.6rc -> v1.0.1.6rc
  49.  * [new tag]           v1.0.1.7c -> v1.0.1.7c
  50.  * [new tag]           v1.0.1.8c -> v1.0.1.8c
  51.  * [new tag]           v1.0.1.9c -> v1.0.1.9c
  52.  * [new tag]           v1.0.11 -> v1.0.11
  53.  * [new tag]           v1.0.11.23 -> v1.0.11.23
  54.  * [new tag]           v1.0.12 -> v1.0.12
  55.  * [new tag]           v1.1.0 -> v1.1.0
  56.  * [new tag]           v1.1.0.26 -> v1.1.0.26
  57.  * [new tag]           v1.1.0.33 -> v1.1.0.33
  58.  * [new tag]           v1.1.1 -> v1.1.1
  59.  * [new tag]           v1.1.10 -> v1.1.10
  60.  * [new tag]           v1.1.11 -> v1.1.11
  61.  * [new tag]           v1.1.2 -> v1.1.2
  62.  * [new tag]           v1.1.3 -> v1.1.3
  63.  * [new tag]           v1.1.4 -> v1.1.4
  64.  * [new tag]           v1.1.5 -> v1.1.5
  65.  * [new tag]           v1.1.6 -> v1.1.6
  66.  * [new tag]           v1.1.7 -> v1.1.7
  67.  * [new tag]           v1.1.8 -> v1.1.8
  68.  * [new tag]           v1.1.9 -> v1.1.9
  69.  * [new tag]           v1.2.0 -> v1.2.0
  70.  * [new tag]           v1.2.0.1 -> v1.2.0.1
  71.  * [new tag]           v1.3.0 -> v1.3.0
  72.  * [new tag]           v1.3.0.1 -> v1.3.0.1
  73.  * [new tag]           v1.3.0.2 -> v1.3.0.2
  74.  * [new tag]           v1.3.1 -> v1.3.1
  75.  * [new tag]           v1.4.0 -> v1.4.0
  76.  * [new tag]           v1.5.0 -> v1.5.0
  77.  * [new tag]           v1.5.0.1 -> v1.5.0.1
  78.  * [new tag]           v1.5.0.2 -> v1.5.0.2
  79.  * [new tag]           v1.5.1 -> v1.5.1
  80.  * [new tag]           v1.6.0 -> v1.6.0
  81.  * [new tag]           v2.0.0 -> v2.0.0
  82.  * [new tag]           v2.1.0 -> v2.1.0
  83.  * [new tag]           v2.2.0 -> v2.2.0
  84.  * [new tag]           v2.2.1 -> v2.2.1
  85.  * [new tag]           v2.3.0 -> v2.3.0
  86.  * [new tag]           v2.3.1 -> v2.3.1
  87.  * [new tag]           v2.3.2 -> v2.3.2
  88.  * [new tag]           v2.3.3 -> v2.3.3
  89.  * [new tag]           v2.4.0 -> v2.4.0
  90.  * [new tag]           v2.5.0 -> v2.5.0
  91.  * [new tag]           v2.5.1 -> v2.5.1
  92.  * [new tag]           v2.6.0 -> v2.6.0
  93.  * [new tag]           v2.6.0.1 -> v2.6.0.1
  94.  * [new tag]           v3.0.0 -> v3.0.0
  95.  * [new tag]           v3.0.1 -> v3.0.1
  96.  * [new tag]           v3.0.2 -> v3.0.2
  97.  * [new tag]           v3.1.0 -> v3.1.0
  98.  * [new tag]           v3.1.1 -> v3.1.1
  99.  * [new tag]           v3.2.0 -> v3.2.0
  100.  * [new tag]           v3.3.0 -> v3.3.0
  101.  * [new tag]           v3.4.0 -> v3.4.0
  102.  * [new tag]           v3.5.0 -> v3.5.0
  103.  * [new tag]           v3.5.1 -> v3.5.1
  104.  * [new tag]           v3.6.0 -> v3.6.0
  105.  * [new tag]           v3.7.0 -> v3.7.0
  106. SENRSL:Candy senrsl$
这个方法会推本地所有的分支跟tag,并保存历史提交记录
3,terminal走代理
仅对当前窗口有效,简单省事
SENRSL:Candy senrsl$ export http_proxy=http://127.0.0.1:1087
或者
export ALL_PROXY=socks5://127.0.0.1:1086
然后发现对于有些网站根本就没用
4,Manifest merger failed with multiple errors
一个旧的库
一开始报
  1. Gradle project sync failed. Basic functionality (e.g, editing, debugging) will not work properly.
删了gradle、.gradle、.idea目录重新导入项目就好了。。。。
然后
  1. org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':base:processDebugAndroidTestManifest'.
  2.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
  3.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
  4.     at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
  5.     at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
  6.     at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
  7.     at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
  8.     at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
  9.     at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
  10.     at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
  11.     at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
  12.     at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
  13.     at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
  14.     at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
  15.     at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
  16.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
  17.     at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
  18.     at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
  19.     at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
  20.     at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
  21.     at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
  22.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
  23.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:262)
  24.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:246)
  25.     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:136)
  26.     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
  27.     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.execute(DefaultTaskPlanExecutor.java:201)
  28.     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.executeWithTask(DefaultTaskPlanExecutor.java:192)
  29.     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
  30.     at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
  31.     at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
  32.     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  33.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  34.     at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
  35.     at java.lang.Thread.run(Thread.java:748)
  36. Caused by: java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
  37.     at com.android.builder.core.AndroidBuilder.handleMergingResult(AndroidBuilder.java:759)
  38.     at com.android.builder.core.AndroidBuilder.mergeManifestsForTestVariant(AndroidBuilder.java:706)
  39.     at com.android.build.gradle.tasks.ProcessTestManifest.doFullTaskAction(ProcessTestManifest.java:146)
  40.     at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
  41.     at sun.reflect.GeneratedMethodAccessor274.invoke(Unknown Source)
  42.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  43.     at java.lang.reflect.Method.invoke(Method.java:498)
  44.     at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
  45.     at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
  46.     at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
  47.     at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
  48.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
  49.     at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
  50.     at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
  51.     at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
  52.     at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
  53.     at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
  54.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
  55.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
  56.     ... 33 more

尝试
SENRSL:common-android senrsl$ ./gradlew processDebugManifest --stacktrace
Parallel execution with configuration on demand is an incubating feature.
。。。
BUILD SUCCESSFUL in 0s
44 actionable tasks: 44 up-to-date
SENRSL:common-android senrsl$
竟然是成功的,然后看刚才的日志
然后看上面发现是base库报错,去他的build里面发现报错
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 28.0.0, 25.3.0. Examples include com.android.support:animated-vector-drawable:28.0.0 and com.android.support:support-media-compat:25.3.0 more... (⌃F1)

一个一个搜冲突的地方,能改的改,不能改的排除,不能排除直接强制设置
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0'
            }
        }
    }
}
除了 multidex之前这个组下全用28.0.0
然后报
Manifest merger failed with multiple errors, see logs
去找 Mainifest.xml的Merged Manifest里面并没有Error....
然后又执行上面命令
SENRSL:common-android senrsl$ ./gradlew processDebugManifest --stacktrace
Parallel execution with configuration on demand is an incubating feature.

BUILD SUCCESSFUL in 0s
26 actionable tasks: 26 up-to-date
SENRSL:common-android senrsl$
挨个解决WARN,现在已经没WARN了,依然包Mainifest merger错误。。。。

然后。。。。

第二个按钮,Toggle View可以跳转到详细信息。。。。
屮,一目了然。。。。
然后,代码终究没编起来,本身就是有问题的。。。。到处找不到。。。。


5,以前的一个domain
废弃多年,突然看到了,备忘下
SENRSL:~ senrsl$ cat Downloads/dcjz.ml
dcjz.ml.        600    IN    SOA    ns7.alidns.com. hostmaster.hichina.com. 1560319318 3600 1200 86400 360
dcjz.ml.        86400    IN    NS    ns7.alidns.com.
dcjz.ml.        86400    IN    NS    ns8.alidns.com.
dcjz.ml.        600    IN    A    216.239.38.21
dcjz.ml.        600    IN    A    216.239.36.21
dcjz.ml.        600    IN    A    216.239.34.21
dcjz.ml.        600    IN    A    216.239.32.21
kwgdiiq446dt.dcjz.ml.    600    IN    CNAME    gv-emx3keuzriwosv.dv.googlehosted.com.
sb.dcjz.ml.        600    IN    A    47.52.128.120
ss.dcjz.ml.        600    IN    A    35.187.210.27
www.dcjz.ml.        600    IN    CNAME    ghs.google.com.
SENRSL:~ senrsl$

还有xlsx格式

记录类型主机记录解析线路记录值MX优先级TTL值状态(暂停/正常)备注
Asb默认47.52.128.120
600正常
Ass默认35.187.210.27
600正常
CNAMEkwgdiiq446dt默认gv-emx3keuzriwosv.dv.googlehosted.com600正常
CNAMEwww默认ghs.google.com
600正常
A@默认216.239.38.21
600正常
A@默认216.239.36.21
600正常
A@默认216.239.34.21
600正常
A@默认216.239.32.21
600正常


全线废弃
6,git自带的缩写
不是自己配的,是自带的
SENRSL:piaos senrsl$ git status
On branch feature/Feature-MergeSupport
Your branch is ahead of 'origin/feature/Feature-MergeSupport' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
SENRSL:piaos senrsl$ git s
On branch feature/Feature-MergeSupport
Your branch is ahead of 'origin/feature/Feature-MergeSupport' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
SENRSL:piaos senrsl$ git help s
's' is aliased to 'status'
SENRSL:piaoshen senrsl$ git help co
No manual entry for gitco
SENRSL:piaos senrsl$ git help alias
'alias' is aliased to '!git config --list | grep 'alias\.' | sed 's/alias\.\([^=]*\)=\(.*\)/\1\     => \2/' | sort'
SENRSL:piaos senrsl$ git alias
a     => !git add . && git status
aa     => !git add . && git add -u . && git status
ac     => !git add . && git commit
acm     => !git add . && git commit -m
alias     => !git config --list | grep 'alias\.' | sed 's/alias\.\([^=]*\)=\(.*\)/\1\     => \2/' | sort
au     => !git add -u . && git status
c     => commit
ca     => commit --amend
cm     => commit -m
d     => diff
l     => log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'
lg     => log --color --graph --pretty=format:'%C(bold white)%h%Creset -%C(bold green)%d%Creset %s %C(bold green)(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
ll     => log --stat --abbrev-commit
llg     => log --color --graph --pretty=format:'%C(bold white)%H %d%Creset%n%s%n%+b%C(bold blue)%an <%ae>%Creset %C(bold green)%cr (%ci)' --abbrev-commit
master     => checkout master
s     => status
spull     => svn rebase
spush     => svn dcommit
SENRSL:piaos senrsl$

7,多module多buildType时默认值
旧项目改造,app中有5个buildType,此时,按改造计划,需将一堆module迁进项目,编译会报
Required com.android.build.api.attributes.BuildTypeAttr 'stg' and found incompatible value 'debug'.
此时,需要对每个子module对应写buildType,不然会报错,类似:
buildTypes {
    debug {}
    stg {}
    dev {}
    pre_release {}
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

查了一遭,发现可以不用每个都加的。。。。
app中buildType中增加matchingFallbacks即可
    buildTypes {
        stg {
            matchingFallbacks = ['stg', 'release', 'debug']
        }
        release {
            minifyEnabled true
            shrinkResources true
//            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'obfuscate-helper-rules.pro'
        }
        dev {
            matchingFallbacks = ['dev', 'debug', 'release']
        }
        debug {
            signingConfig signingConfigs.release
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'obfuscate-helper-rules.pro'
        }

        pre_release {
            matchingFallbacks = ['pre_release', 'release', 'debug']
        }
    }
在除 debug跟release外的其他buildType中增加
matchingFallbacks = ['stg', 'release', 'debug']
这样,子module会按照数组中顺序使用buildType配置。
只关注这一项就可以了,无视这一堆垃圾配置,屮

8,编译ijkplayer支持https
官方jcenter提供的不支持https....
只能自己下代码编
1)安装交叉编译命令yasm
SENRSL:~ senrsl$ brew install yasm
SENRSL:~ senrsl$ yasm --version
yasm 1.3.0
Compiled on Oct 14 2018.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
SENRSL:~ senrsl$

然后走步骤
2) 下库
SENRSL:temp senrsl$ git clone git@github.com:bilibili/ijkplayer.git
Cloning into 'ijkplayer'...
remote: Enumerating objects: 24677, done.
remote: Total 24677 (delta 0), reused 0 (delta 0), pack-reused 24677
Receiving objects: 100% (24677/24677), 7.85 MiB | 241.00 KiB/s, done.
Resolving deltas: 100% (15698/15698), done.
SENRSL:temp senrsl$ cd ijkplayer/
SENRSL:ijkplayer senrsl$ ls
COPYING.GPLv2            README.md            init-android-exo.sh        init-config.sh
COPYING.GPLv3            android                init-android-j4a.sh        init-ios-openssl.sh
COPYING.LGPLv2.1        compile-android-j4a.sh        init-android-libsoxr.sh        init-ios.sh
COPYING.LGPLv2.1.txt        config                init-android-libyuv.sh        ios
COPYING.LGPLv3            doc                init-android-openssl.sh        tools
MODULE_LICENSE_APACHE2        extra                init-android-prof.sh        version.sh
NEWS.md                ijkmedia            init-android-soundtouch.sh
NOTICE                ijkprof                init-android.sh
SENRSL:ijkplayer senrsl$ git branch
* master
SENRSL:temp senrsl$
3)初始化 android环境
自动下一堆扩展库,好久
SENRSL:ijkplayer senrsl$ ./init-android.sh
git version 2.16.3
== pull ffmpeg base ==
Cloning into 'extra/ffmpeg'...
。。。。
4)配置编译脚本
从这里配置编译支持的 编解码格式
SENRSL:ijkplayer senrsl$ ls -l config/
total 88
-rwxr-xr-x  1 senrsl  staff  10370  6 29 14:58 module-default.sh
-rwxr-xr-x  1 senrsl  staff  14581  6 29 14:58 module-lite-hevc.sh
-rwxr-xr-x@ 1 senrsl  staff  15819  6 29 14:58 module-lite.sh
lrwxr-xr-x  1 senrsl  staff     14  6 29 14:58 module.sh -> module-lite.sh
SENRSL:ijkplayer senrsl$
5)初始化支持https
SENRSL:ijkplayer senrsl$ ./init-android-openssl.sh
== pull openssl base ==
6) 清缓存
SENRSL:ijkplayer senrsl$ cd android/contrib/
SENRSL:contrib senrsl$ ./compile-openssl.sh clean
====================
[*] check archs
====================
FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = FF_ACT_ARCHS_64

/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
SENRSL:contrib senrsl$ ./compile-ffmpeg.sh clean
====================
[*] check archs
====================
FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = FF_ACT_ARCHS_64

/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
/Users/senrsl/temp/ijkplayer/android/contrib
SENRSL:contrib senrsl$
7)编译openssl
环境变量名字也是有要求的。。。。
SENRSL:contrib senrsl$ ./compile-openssl.sh all
====================
[*] check archs
====================
FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = armv5 armv7a arm64 x86 x86_64

You must define ANDROID_NDK before starting.
They must point to your NDK directories.

SENRSL:contrib senrsl$ export ANDROID_NDK=~/android/android-ndk-r14b
SENRSL:contrib senrsl$ export PATH=$ANDROID_NDK:$PATH
SENRSL:contrib senrsl$ echo $ANDROID_NDK
/Users/senrsl/android/android-ndk-r14b
SENRSL:contrib senrsl$ ./compile-openssl.sh all
====================
[*] check archs
====================
FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = armv5 armv7a arm64 x86 x86_64


--------------------
[*] make NDK standalone toolchain
--------------------
build on Darwin x86_64
ANDROID_NDK=/Users/senrsl/android/android-ndk-r14b
IJK_NDK_REL=14.1.3816874
NDKr14.1.3816874 detected
8)编译ffmpeg
SENRSL:contrib senrsl$ ./compile-ffmpeg.sh all
9) 编译ijkplayer
回上级目录
SENRSL:android senrsl$ ./compile-ijk.sh all
10)成品
所有的东西都在这里面了。。。。
SENRSL:android senrsl$ ls -l ijkplayer/
total 48
-rw-r--r--  1 senrsl  staff   772  6 29 14:58 build.gradle
drwxr-xr-x  3 senrsl  staff    96  6 29 14:58 gradle
-rw-r--r--  1 senrsl  staff  1481  6 29 14:58 gradle.properties
-rwxr-xr-x  1 senrsl  staff  5080  6 29 14:58 gradlew
-rw-r--r--  1 senrsl  staff  2404  6 29 14:58 gradlew.bat
drwxr-xr-x  7 senrsl  staff   224  6 29 14:58 ijkplayer-arm64
drwxr-xr-x  8 senrsl  staff   256  6 29 15:57 ijkplayer-armv5
drwxr-xr-x  7 senrsl  staff   224  6 29 14:58 ijkplayer-armv7a
drwxr-xr-x  6 senrsl  staff   192  6 29 14:58 ijkplayer-example
drwxr-xr-x  7 senrsl  staff   224  6 29 14:58 ijkplayer-exo
drwxr-xr-x  8 senrsl  staff   256  6 29 15:57 ijkplayer-java
drwxr-xr-x  7 senrsl  staff   224  6 29 14:58 ijkplayer-x86
drwxr-xr-x  7 senrsl  staff   224  6 29 14:58 ijkplayer-x86_64
-rw-r--r--  1 senrsl  staff   211  6 29 14:58 settings.gradle
drwxr-xr-x  5 senrsl  staff   160  6 29 14:58 tools
SENRSL:android senrsl$
直接把项目作为module引进去就好了
//    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    implementation project(':ijkplayer-java')
    implementation project(':ijkplayer-armv5')


9,adb查看当前交互activity
SENRSL:~ senrsl$ adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
    Running activities (most recent first):
      TaskRecord{60cb1e5 #863 I=com.miui.home/.launcher.Launcher U=0 StackId=0 sz=1}
        Run #0: ActivityRecord{de4bd52 u0 com.miui.home/.launcher.Launcher t863}
    Running activities (most recent first):
      TaskRecord{386f4d1 #16 A=com.android.systemui U=0 StackId=6 sz=1}
        Run #0: ActivityRecord{602ffd2 u0 com.android.systemui/.recents.RecentsActivity t16}
SENRSL:~ senrsl$
10,android打包签名验证
原来是有工具的呀
SENRSL:piaos senrsl$ ~/android/sdkas/build-tools/28.0.3/apksigner verify -v /Users/senrsl/android/Project/xxxxx/piaos/doc/release/df/release/Piaos_df_v1.5.2_release.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1
WARNING: META-INF/android.arch.core_runtime.version not protected by signature. Unauthorized modifications to this JAR entry will not be detected. Delete or move the entry outside of META-INF/.
......
SENRSL:piaos senrsl$
上面报了很多 .version或者.pro的文件是没签名的,是不是应该想办法删掉。
2019年07月06日20:26:02
11,shell安装多个apk到设备
SENRSL:market senrsl$ cat install.sh
#!/usr/bin/bash

for i in `ls`; do
      echo "${i}\t\c"
      adb install -r "${i}"
done
SENRSL:market senrsl$
遍历出来直接安装,简单粗暴
12,三方aar替换类
  1. SENRSL:libs senrsl$ unzip bugly_crashreport_upgrade-1.4.1.aar -d tmp
  2. Archive:  bugly_crashreport_upgrade-1.4.1.aar
  3.   inflating: tmp/AndroidManifest.xml 
  4.    creating: tmp/res/
  5.    creating: tmp/res/values-en/
  6.   inflating: tmp/res/values-en/values-en.xml 
  7.    creating: tmp/res/values/
  8.   inflating: tmp/res/values/values.xml 
  9.    creating: tmp/res/xml/
  10.   inflating: tmp/res/xml/provider_paths.xml 
  11.   inflating: tmp/R.txt              
  12.   inflating: tmp/classes.jar        
  13.    creating: tmp/aidl/
  14.    creating: tmp/assets/
  15.    creating: tmp/jni/
  16.    creating: tmp/libs/
  17. SENRSL:libs senrsl$ cd tmp/
  18. SENRSL:tmp senrsl$ unzip classes.jar -d tmpCls
  19. Archive:  classes.jar
  20.   inflating: tmpCls/com/tencent/bugly/proguard/a.class 
  21.   inflating: tmpCls/com/tencent/bugly/proguard/b.class
  22. ...
  23. SENRSL:tmp senrsl$ jar cvf cls.jar -C tmpCls/ .
  24. 已添加清单
  25. 正在添加: .DS_Store(输入 = 6148) (输出 = 396)(压缩了 93%)
  26. 正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)
  27. ...
  28. 正在添加: com/tencent/bugly/BuglyStrategy.class(输入 = 4238) (输出 = 1477)(压缩了 65%)
  29. SENRSL:tmp senrsl$ cd ..
  30. SENRSL:libs senrsl$ jar cvf aa.aar -C tmp/ .
  31. 已添加清单
  32. 正在添加: res/(输入 = 0) (输出 = 0)(存储了 0%)
  33. 正在添加: res/values/(输入 = 0) (输出 = 0)(存储了 0%)
  34. 正在添加: res/values/values.xml(输入 = 1769) (输出 = 584)(压缩了 66%)
  35. 正在添加: res/xml/(输入 = 0) (输出 = 0)(存储了 0%)
  36. 正在添加: res/xml/provider_paths.xml(输入 = 404) (输出 = 213)(压缩了 47%)
  37. 正在添加: res/values-en/(输入 = 0) (输出 = 0)(存储了 0%)
  38. 正在添加: res/values-en/values-en.xml(输入 = 1771) (输出 = 475)(压缩了 73%)
  39. 正在添加: aidl/(输入 = 0) (输出 = 0)(存储了 0%)
  40. 正在添加: .DS_Store(输入 = 6148) (输出 = 333)(压缩了 94%)
  41. 正在添加: AndroidManifest.xml(输入 = 2078) (输出 = 719)(压缩了 65%)
  42. 正在添加: classes.jar(输入 = 430456) (输出 = 399888)(压缩了 7%)
  43. 正在添加: libs/(输入 = 0) (输出 = 0)(存储了 0%)
  44. 正在添加: R.txt(输入 = 1218) (输出 = 331)(压缩了 72%)
  45. 正在添加: jni/(输入 = 0) (输出 = 0)(存储了 0%)
  46. 正在添加: assets/(输入 = 0) (输出 = 0)(存储了 0%)
  47. SENRSL:libs senrsl$
步骤
  1. 解压aar;
  2. 进入解压目录,分析classes.jar,找到要修改的类,考到随便一个工程里,改完build,生成新的class文件;
  3. 18行解压classes.jar,把上面的class文件覆盖;
  4. 23行重打包classes.jar文件,打包时命名不能是classes,要打完再改;
  5. 30行打包成aar文件,然后引入项目。
然后发现官方不那么做是有道理的。。。。
13,tomcat支持软链接
先建个软链接
SENRSL:doc senrsl$ ln -s /Users/senrsl/android/Project/mtime/doc/周报_组.md weekly_group.md
然后设置Tomcat开启支持软链接
SENRSL:doc senrsl$ cat ../../conf/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    <!-- 支持软链接 -->
    <Resources allowLinking="true"></Resources>
</Context>
SENRSL:doc senrsl$
只是增加了上面那一行。。。。
不用重启,直接生效。
14,apk签名与查看签名
SENRSL:Downloads senrsl$ jarsigner -verbose -keystore /Users/senrsl/android/Project/xxxxx -signedjar sign.apk tap_unsign.apk displayer
输入密钥库的密码短语:
输入displayer的密钥口令:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/DISPLAYE.SF
   正在添加: META-INF/DISPLAYE.RSA
  正在签名: res/drawable/ic_launcher.png
  正在签名: res/layout/main.xml
  正在签名: AndroidManifest.xml
  正在签名: resources.arsc
  正在签名: classes.dex
jar 已签名。

警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2044-08-21) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
SENRSL:Downloads senrsl$ keytool -list -printcert -jarfile sign.apk
签名者 #1:

签名:

所有者: CN=xxx
发布者: CN=xxx
序列号: xxx
有效期为 Wed Aug 28 10:59:55 CST 2019 至 Sun Aug 21 10:59:55 CST 2044
证书指纹:
     MD5:  xxx
     SHA1: xxx
     SHA256: xxx
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 47 2F B8 7A 8C FD 59 CE   82 D1 FE C9 D2 C5 FB 99  G/.z..Y.........
0010: 4A A5 A9 4E                                        J..N
]
]


SENRSL:Downloads senrsl$

15,秘钥登录GCP
SENRSL:Downloads senrsl$ cat ~/.ssh/
id_ed25519      id_ed25519.pub  id_rsa          id_rsa.pub      known_hosts   
SENRSL:Downloads senrsl$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0sime70zhk9ssJ+rQ09B+L7wKH9DflJvDaatiG/peDj....
把上面这一串,写入Compute Engine(计算引擎) -> 中继资料(元数据) -> ssh,会自动加入到下面那个文件里。
SENRSL:Downloads senrsl$ ssh -i id_pub senRsl@34.80.46.5
Warning: Identity file id_pub not accessible: No such file or directory.
Last login: Thu Sep 26 16:42:16 2019 from 123.120.59.116
[dong_M@instance-cd ~]$ pwd
/home/dong_M
[dong_M@instance-cd ~]$ cat ~/.ssh/authorized_keys
# Added by Google
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0sime70zhk9ssJ+rQ09B+L7wKH9DflJvDaatiG/peDj....
[dong_M@instance-cd ~]$
最近好像墙的很频繁啊。。。。
折腾半天竟然是域名解析出问题了。。。。
16,gradlew 强制刷新缓存
老问题了,纨绔玩库的人经常遇到。。。。
SENRSL:xxxxxx senrsl$ ./gradlew (build) --refresh-dependencies
--info
然而并没有什么卵用。。。。
17,CentOS 7安装 Apache
安装Apache,然后配置。
[root@ss-cd2 ~]# yum install httpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.sonn.com
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: mirrors.vcea.wsu.edu
 * updates: mirrors.cat.pdx.edu
正在解决依赖关系
--> 正在检查事务
---> 软件包 httpd.x86_64.0.2.4.6-90.el7.centos 将被 安装
--> 正在处理依赖关系 httpd-tools = 2.4.6-90.el7.centos,它被软件包 httpd-2.4.6-90.el7.centos.x86_64 需要
--> 正在处理依赖关系 /etc/mime.types,它被软件包 httpd-2.4.6-90.el7.centos.x86_64 需要
--> 正在处理依赖关系 libaprutil-1.so.0()(64bit),它被软件包 httpd-2.4.6-90.el7.centos.x86_64 需要
--> 正在处理依赖关系 libapr-1.so.0()(64bit),它被软件包 httpd-2.4.6-90.el7.centos.x86_64 需要
--> 正在检查事务
---> 软件包 apr.x86_64.0.1.4.8-5.el7 将被 安装
---> 软件包 apr-util.x86_64.0.1.5.2-6.el7 将被 安装
---> 软件包 httpd-tools.x86_64.0.2.4.6-90.el7.centos 将被 安装
---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

========================================================================================================================================================
 Package                              架构                            版本                                          源                             大小
========================================================================================================================================================
正在安装:
 httpd                                x86_64                          2.4.6-90.el7.centos                           base                          2.7 M
为依赖而安装:
 apr                                  x86_64                          1.4.8-5.el7                                   base                          103 k
 apr-util                             x86_64                          1.5.2-6.el7                                   base                           92 k
 httpd-tools                          x86_64                          2.4.6-90.el7.centos                           base                           91 k
 mailcap                              noarch                          2.1.41-2.el7                                  base                           31 k

事务概要
========================================================================================================================================================
安装  1 软件包 (+4 依赖软件包)

总下载量:3.0 M
安装大小:10 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): apr-util-1.5.2-6.el7.x86_64.rpm                                                                                           |  92 kB  00:00:00    
(2/5): apr-1.4.8-5.el7.x86_64.rpm                                                                                                | 103 kB  00:00:00    
(3/5): httpd-tools-2.4.6-90.el7.centos.x86_64.rpm                                                                                |  91 kB  00:00:00    
(4/5): mailcap-2.1.41-2.el7.noarch.rpm                                                                                           |  31 kB  00:00:00    
(5/5): httpd-2.4.6-90.el7.centos.x86_64.rpm                                                                                      | 2.7 MB  00:00:00    
--------------------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                                    2.2 MB/s | 3.0 MB  00:00:01    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : apr-1.4.8-5.el7.x86_64                                                                                                              1/5
  正在安装    : apr-util-1.5.2-6.el7.x86_64                                                                                                         2/5
  正在安装    : httpd-tools-2.4.6-90.el7.centos.x86_64                                                                                              3/5
  正在安装    : mailcap-2.1.41-2.el7.noarch                                                                                                         4/5
  正在安装    : httpd-2.4.6-90.el7.centos.x86_64                                                                                                    5/5
  验证中      : apr-1.4.8-5.el7.x86_64                                                                                                              1/5
  验证中      : mailcap-2.1.41-2.el7.noarch                                                                                                         2/5
  验证中      : httpd-tools-2.4.6-90.el7.centos.x86_64                                                                                              3/5
  验证中      : apr-util-1.5.2-6.el7.x86_64                                                                                                         4/5
  验证中      : httpd-2.4.6-90.el7.centos.x86_64                                                                                                    5/5

已安装:
  httpd.x86_64 0:2.4.6-90.el7.centos                                                                                                                   

作为依赖被安装:
  apr.x86_64 0:1.4.8-5.el7       apr-util.x86_64 0:1.5.2-6.el7       httpd-tools.x86_64 0:2.4.6-90.el7.centos       mailcap.noarch 0:2.1.41-2.el7     

完毕!
[root@ss-cd2 ~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ss-cd2 ~]# systemctl is-enabled httpd.service
enabled
[root@ss-cd2 ~]# systemctl start httpd.service
[root@ss-cd2 ~]#

[root@ss-cd2 var]# cd /var/www/html/
[root@ss-cd2 html]# ls
[root@ss-cd2 html]# ll
总用量 0
[root@ss-cd2 html]# ls /etc/httpd/conf/
httpd.conf  magic
[root@ss-cd2 html]# ls /etc/httpd/conf.
conf.d/         conf.modules.d/
[root@ss-cd2 html]# ls /etc/httpd/conf.d/
autoindex.conf  README  userdir.conf  welcome.conf
[root@ss-cd2 html]#

[root@ss-cd2 html]# cat /etc/httpd/conf.d/autoindex.conf
#
# Directives controlling the display of server-generated directory listings.
#
# Required modules: mod_authz_core, mod_authz_host,
#                   mod_autoindex, mod_alias
#
# To see the listing of a directory, the Options directive for the
# directory must include "Indexes", and the directory must not contain
# a file matching those listed in the DirectoryIndex directive.
#

#
# IndexOptions: Controls the appearance of server-generated directory
# listings.
#
IndexOptions FancyIndexing HTMLTable VersionSort

# We include the /icons/ alias for FancyIndexed directory listings.  If
# you do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/usr/share/httpd/icons/"

<Directory "/usr/share/httpd/icons">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride None
    Require all granted
</Directory>

#
# AddIcon* directives tell the server which icon to show for different
# files or filename extensions.  These are only displayed for
# FancyIndexed directories.
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif /core
AddIcon /icons/bomb.gif */core.*

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon is which icon to show for files which do not have an icon
# explicitly set.
#
DefaultIcon /icons/unknown.gif

#
# AddDescription allows you to place a short description after a file in
# server-generated indexes.  These are only displayed for FancyIndexed
# directories.
# Format: AddDescription "description" filename
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

#
# ReadmeName is the name of the README file the server will look for by
# default, and append to directory listings.
#
# HeaderName is the name of a file which should be prepended to
# directory indexes.
ReadmeName README.html
HeaderName HEADER.html

#
# IndexIgnore is a set of filenames which directory indexing should ignore
# and not include in the listing.  Shell-style wildcarding is permitted.
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

[root@ss-cd2 html]# cat /etc/httpd/conf.d/userdir.conf
#
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
#
# The path to the end user account 'public_html' directory must be
# accessible to the webserver userid.  This usually means that ~userid
# must have permissions of 711, ~userid/public_html must have permissions
# of 755, and documents contained therein must be world-readable.
# Otherwise, the client will only receive a "403 Forbidden" message.
#
<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir disabled

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    #UserDir public_html
</IfModule>

#
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

[root@ss-cd2 html]# cat /etc/httpd/conf.d/welcome.conf
#
# This configuration file enables the default "Welcome" page if there
# is no default index page present for the root URL.  To disable the
# Welcome page, comment out all the lines below.
#
# NOTE: if this file is removed, it will be restored on upgrades.
#
<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /.noindex.html
</LocationMatch>

<Directory /usr/share/httpd/noindex>
    AllowOverride None
    Require all granted
</Directory>

Alias /.noindex.html /usr/share/httpd/noindex/index.html
Alias /noindex/css/bootstrap.min.css /usr/share/httpd/noindex/css/bootstrap.min.css
Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png
[root@ss-cd2 html]#
默认目录
[root@ss-cd2 noindex]# cp error.html /var/www/html/
[root@ss-cd2 noindex]# ls
error.html  index.html
[root@ss-cd2 noindex]# rm error.html
rm:是否删除普通文件 "error.html"?yesss
[root@ss-cd2 noindex]# ls
index.html
[root@ss-cd2 noindex]# cat index.html
<html>
<script language="javascript">location.href='https://senrsl.blogspot.com/'</script>
<head><title>SENRSL</title>
</html>
[root@ss-cd2 noindex]# exit
登出
[dong_M@ss-cd2 ~]$ exit
登出
Connection to 34.97.196.61 closed.
SENRSL:Downloads senrsl$
貌似没啥用,反正活不过两天。。。。

18,UML component fragmentastah,超级难用啊。。。。

片段类型
名称
说明
Opt
选项
包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。
Alt
抉择
包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。
可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。
Loop
循环
片段重复一定次数。 可以在临界中指示片段重复的条件。
Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。
Break
中断
如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。
Par
并行
并行处理。 片段中的事件可以交错。
Critical
关键
用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。
Seq
弱顺序
有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。
Strict
强顺序
有两个或更多操作数片段。 这些片段必须按给定顺序发生。
有关如何解释序列的片段
  默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。
  以下片段类型可用于更改此释义:
片段类型
名称
说明
Consider
考虑
指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。
“Messages”属性中键入该列表。
Ignore
忽略
此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。
“Messages”属性中键入该列表。
Assert
断言
操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。
Neg
否定
此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。

19,mac os default pip
原来是自带的
SENRSL:publish senrsl$ sudo python -m ensurepip --default-pip
Password:
The directory '/Users/senrsl/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/senrsl/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Looking in links: /tmp/tmpzFfFhX
Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (41.0.1)
Collecting pip
Installing collected packages: pip
Successfully installed pip-18.1
SENRSL:publish senrsl$
还是得找官方文档 packaging.python.org/tutorials/installing-packages/

20,Download error on https://pypi.org/simple/
mac 默认Python2.7.16,死活不行,搞不定,只好安Python3.。。。
SENRSL:publish senrsl$ python --version
Python 2.7.16
SENRSL:publish senrsl$ python3 --version
Python 3.8.1
SENRSL:publish senrsl$ pip  --version
pip 18.1 from /Library/Python/2.7/site-packages/pip (python 2.7)
SENRSL:publish senrsl$ pip3 --version
pip 19.2.3 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
SENRSL:publish senrsl$
然后安Python3,brew还报权限问题,下的官方pkg安好后面直接就好了。。。。
www.python.org/downloads/mac-osx/
浪费一晚上。。。。
。。。。
最终又回到这个问题
SENRSL:publish senrsl$ pip install oss2
Collecting oss2
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x10eb43e10>: Failed to establish a new connection: [Errno 61] Connection refused',)': /simple/oss2/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x10eb43690>: Failed to establish a new connection: [Errno 61] Connection refused',)': /simple/oss2/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x10eb43b90>: Failed to establish a new connection: [Errno 61] Connection refused',)': /simple/oss2/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x10eb84090>: Failed to establish a new connection: [Errno 61] Connection refused',)': /simple/oss2/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x10eb841d0>: Failed to establish a new connection: [Errno 61] Connection refused',)': /simple/oss2/
  Could not find a version that satisfies the requirement oss2 (from versions: )
No matching distribution found for oss2
You are using pip version 18.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
SENRSL:publish senrsl$

最终,这个问题竟然是因为 没有这么挂代理。。。。
SENRSL:publish senrsl$ sudo pip install oss2 --proxy="127.0.0.1:1087"
Password:
The directory '/Users/senrsl/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/senrsl/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting oss2
Collecting aliyun-python-sdk-core>=2.6.2 (from oss2)
Collecting aliyun-python-sdk-kms>=2.4.1 (from oss2)
Collecting crcmod>=1.7 (from oss2)
Collecting requests!=2.9.0 (from oss2)
  Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)
    100% |████████████████████████████████| 61kB 157kB/s
Collecting pycryptodome>=3.4.7 (from oss2)
  Downloading https://files.pythonhosted.org/packages/1f/23/e45f03137e496dc4f106e150cdeaf59dbdeb1a1ae70ff3e327b955dc5931/pycryptodome-3.9.4-cp27-cp27m-macosx_10_6_intel.whl (10.1MB)
    100% |████████████████████████████████| 10.1MB 3.6MB/s
Collecting jmespath<1.0.0,>=0.9.3 (from aliyun-python-sdk-core>=2.6.2->oss2)
  Downloading https://files.pythonhosted.org/packages/83/94/7179c3832a6d45b266ddb2aac329e101367fbdb11f425f13771d27f225bb/jmespath-0.9.4-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests!=2.9.0->oss2)
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 1.1MB/s
Collecting idna<2.9,>=2.5 (from requests!=2.9.0->oss2)
  Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 11.9MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests!=2.9.0->oss2)
  Downloading https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl (125kB)
    100% |████████████████████████████████| 133kB 954kB/s
Collecting certifi>=2017.4.17 (from requests!=2.9.0->oss2)
  Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl (156kB)
    100% |████████████████████████████████| 163kB 1.0MB/s
Installing collected packages: pycryptodome, jmespath, aliyun-python-sdk-core, aliyun-python-sdk-kms, crcmod, chardet, idna, urllib3, certifi, requests, oss2
Successfully installed aliyun-python-sdk-core-2.13.13 aliyun-python-sdk-kms-2.9.0 certifi-2019.11.28 chardet-3.0.4 crcmod-1.7 idna-2.8 jmespath-0.9.4 oss2-2.9.1 pycryptodome-3.9.4 requests-2.22.0 urllib3-1.25.7
You are using pip version 18.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
SENRSL:publish senrsl$

21,android studio 每次完全退出导入的code style会失效
官方的issue
issuetracker.google.com/issues/78097962
方法一,每个项目导一下,应用到项目
github.com/square/java-code-styles/issues/63
stackoverflow.com/questions/36882427/android-studio-resetting-changes-to-default-code-style
但是这个每个项目都要单独导
需要一个全局的
全局的试了几个都不行,现在是配置在项目里,然后上 git 多人同步。。。。

22,反编译重打包
好久没弄,看起来简单多了
SENRSL:decode senrsl$ cd output/
SENRSL:output senrsl$ java -jar ../apktool_2.4.1.jar d JyData_P_df_v1.2.0_release.apk
I: Using Apktool 2.4.1 on JyData_P_df_v1.2.0_release.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/senrsl/Library/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
W: Cant find 9patch chunk in file: "drawable-hdpi-v4/loading_bg.9.png". Renaming it to *.png.
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
SENRSL:output senrsl$ java -jar ../apktool_2.4.1.jar b *
I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/.DS_Store
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/android/.DS_Store
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/android/arch/.DS_Store
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/dc/.DS_Store
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/dc/android/.DS_Store
W: Unknown file type, ignoring: JyData_P_df_v1.2.0_release/smali/dc/android/base/.DS_Store
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
SENRSL:output senrsl$ ls
SENRSL:output senrsl$ jarsigner -verbose -keystore scanc -signedjar out.apk unsigned.apk scanc
输入密钥库的密码短语:
输入scanc的密钥口令:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/SCANC.SF
   正在添加: META-INF/SCANC.RSA
  正在签名: resources.arsc
  正在签名: res/anim/design_snackbar_out.xml

  正在签名: okhttp3/internal/publicsuffix/publicsuffixes.gz
jar 已签名。

警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2044-12-03) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
SENRSL:output senrsl$
安到手机上正常用。。。。

然后照着反编企业微信,重打包报
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/gz/_vvsw5mx4gl5ckbb2fjj4cxw0000gn/T/brut_util_Jar_6544294354773367553.tmp, p, --forced-package-id, 127, --min-sdk-version, 19, --target-sdk-version, 28, --version-code, 12028, --version-name, 3.0.2, --no-version-vectors, -F, /var/folders/gz/_vvsw5mx4gl5ckbb2fjj4cxw0000gn/T/APKTOOL4879823648135520338.tmp, -e, /var/folders/gz/_vvsw5mx4gl5ckbb2fjj4cxw0000gn/T/APKTOOL3941970681430221720.tmp, -0, arsc, -I, /Users/senrsl/Library/apktool/framework/1.apk, -S, /Users/senrsl/tools/decode/output/wxwork/res, -M, /Users/senrsl/tools/decode/output/wxwork/AndroidManifest.xml]
然后 反编译的时候 加个 -r 就行了
SENRSL:output senrsl$ java -jar ../apktool_2.4.1.jar -r d wxwork_android_3.0.2.12028_100001.apk -o wxwork
I: Using Apktool 2.4.1 on wxwork_android_3.0.2.12028_100001.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Baksmaling classes2.dex...
I: Baksmaling classes3.dex...
I: Baksmaling classes4.dex...
I: Baksmaling classes5.dex...
I: Baksmaling classes6.dex...
I: Baksmaling classes7.dex...
I: Baksmaling classes8.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
I: Copying META-INF/services directory
SENRSL:output senrsl$
SENRSL:output senrsl$ java -jar ../apktool_2.4.1.jar b wxwork
I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes7 folder into classes7.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes6 folder into classes6.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes8 folder into classes8.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes3 folder into classes3.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes4 folder into classes4.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes5 folder into classes5.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes2 folder into classes2.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Copying libs... (/kotlin)
I: Copying libs... (/META-INF/services)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
SENRSL:output senrsl$
打完的包少了十几M。。。。。
SENRSL:output senrsl$ jarsigner -verbose -keystore scanc -signedjar out.apk  wxwork/dist/wxwork_android_3.0.2.12028_100001.apk scanc
输入密钥库的密码短语:
输入scanc的密钥口令:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/SCANC.SF
   正在添加: META-INF/SCANC.RSA
  正在签名: resources.arsc
  正在签名: classes8.dex
  正在签名: AndroidManifest.xml
  正在签名: kotlin/ExperimentalMultiplatform.kotlin_metadata
原来是少了个r目录,直接解压缩原包,把 r 目录复制到 wxwork/build/ 下,重新执行打包命令,会增量编译出 apk
就能正常打开了。。。。
手机号登录成功,坐等封号。。。。
反编jar
解压缩的apk包,把 要改的classes.dex拷出来
SENRSL:output senrsl$ sh ../dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
WARN: ignored invalid inner class name , treat as anonymous inner class.
SENRSL:output senrsl$

23,to work with multiple hotfixes at the same time
在当前项目目录,执行开启配置
git config --add gitflow.multi-release true

24,mac加密压缩zip
SENRSL:Downloads senrsl$ zip -e 信报.zip 个人信用报告.pdf
Enter password:
Verify password:
  adding: 个人信用报告.pdf (deflated 2%)
SENRSL:Downloads senrsl$

25,屏幕进水,通过截屏配合adb安个远程控制
上周手机掉马桶后的应对方案。。。。
SENRSL:Downloads senrsl$ adb shell input swipe 50 250 250 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 50 250 250 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 50 250 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb shell input swipe 250 250 50 250 500
SENRSL:Downloads senrsl$ adb install AirDroid_4.2.5.5_airdroidhp.apk
Performing Streamed Install
Success
SENRSL:Downloads senrsl$ adb shell am start -n com.sand.airdroid/com.sand.airdroid.ui.splash.SplashActivity_
Starting: Intent { cmp=com.sand.airdroid/.ui.splash.SplashActivity_ }
SENRSL:Downloads senrsl$ adb shell input tap 1514 806
SENRSL:Downloads senrsl$ adb shell input tap 1514 806
SENRSL:Downloads senrsl$ adb shell input tap 806 1514
SENRSL:Downloads senrsl$ adb shell input tap 242 2946
SENRSL:Downloads senrsl$ adb shell input tap 242 2046
SENRSL:Downloads senrsl$ adb shell input tap 173 503
SENRSL:Downloads senrsl$ adb shell input tap 697 1329
SENRSL:Downloads senrsl$ adb shell input text dong_M@yeah.net
SENRSL:Downloads senrsl$ adb shell input tap 170 622
SENRSL:Downloads senrsl$ adb shell input text bbbbbb
SENRSL:Downloads senrsl$ adb shell input tap 400 830
SENRSL:Downloads senrsl$ adb shell reboot
adb server version (40) doesn't match this client (41); killing...
* daemon started successfully
SENRSL:Downloads senrsl$ adb shell am start -n com.sand.airdroid/com.sand.airdroid.ui.splash.SplashActivity_
Starting: Intent { cmp=com.sand.airdroid/.ui.splash.SplashActivity_ }
SENRSL:Downloads senrsl$ adb shell input tap 806 1514
SENRSL:Downloads senrsl$ adb shell input tap 242 2946
SENRSL:Downloads senrsl$ adb shell input tap 242 2046
SENRSL:Downloads senrsl$ adb shell input tap 173 503
SENRSL:Downloads senrsl$ adb shell input text dong_M@yeah.net
SENRSL:Downloads senrsl$ adb shell input tap 170 622
SENRSL:Downloads senrsl$ adb shell input text aaaaaa
SENRSL:Downloads senrsl$ adb shell input tap 400 830
SENRSL:Downloads senrsl$ adb shell input tap 998 1379
SENRSL:Downloads senrsl$ adb shell input tap 760 1218
SENRSL:Downloads senrsl$ adb shell input tap 469 1804
SENRSL:Downloads senrsl$ adb shell input tap 776 2007
SENRSL:Downloads senrsl$ adb shell input tap 867 1311
SENRSL:Downloads senrsl$ adb shell input tap 567 1627
SENRSL:Downloads senrsl$ adb shell input tap 951 1644
SENRSL:Downloads senrsl$ adb shell input tap 520 1625
SENRSL:Downloads senrsl$ adb shell input keyevent 3
SENRSL:Downloads senrsl$ adb shell input tap 406 1678
SENRSL:Downloads senrsl$ adb shell input tap 742 2020
SENRSL:Downloads senrsl$ adb shell input tap 319 2020
SENRSL:Downloads senrsl$ adb shell input tap 696 1772
SENRSL:Downloads senrsl$ adb shell input tap 914 488
SENRSL:Downloads senrsl$ adb shell input tap 268 1981
SENRSL:Downloads senrsl$ adb shell input tap 924 1076
SENRSL:Downloads senrsl$ adb shell input tap 715 1289
SENRSL:Downloads senrsl$ adb shell input tap 715 1289
SENRSL:Downloads senrsl$ adb shell input tap 715 1289
SENRSL:Downloads senrsl$ adb shell input tap 715 1289
SENRSL:Downloads senrsl$ adb shell input tap 715 1289
SENRSL:Downloads senrsl$ adb shell am start -n com.sand.airdroid/com.sand.airdroid.ui.splash.SplashActivity_
Starting: Intent { cmp=com.sand.airdroid/.ui.splash.SplashActivity_ }
Warning: Activity not started, its current task has been brought to the front
SENRSL:Downloads senrsl$ adb shell input keyevent 4
SENRSL:Downloads senrsl$ adb shell input tap 501 1635
SENRSL:Downloads senrsl$
2020年06月19日20:01:37
--
senRsl
2019年05月31日14:35:39

没有评论 :

发表评论