乱七八糟的自学(dart---flutter---android---AOP)


dart---flutter---android的框架...

其实还是因为新公司比较闲...

Dart

  • dynamicObject:

    1. dynamic更像是一种泛式,不属于任何类型,而object则在Dart中属于基类

    2. dynamic的话可能需要注意传入的类型判断,object不用

  • finalconst

    1. final和const都只能定义变量一次,不可以再修改值

    2. final修饰的是变量是第一次使用时被初始化,const修饰的是编译时的常量

  • 函数式编程,其实可以看成像js或者rxjava那种,讲一个方法当作对象来传入其他对象中。在dart中方法其实也是一个基本数据类型:Function(感觉上就像kotlin的携程,都是可以理解为回调

  • 若要让函数当作对象来传递,需要想进行声明typedef(这点又跟c++有点像,c++是传递函数指针,dart传递函数对象)

  • 异步 FutureStream

    1. Future只能接收一次异步的结果,接收到将直接执行下一步,然后结束,而stream可以接受多次

    2. Future有 thenwhenCompletecatchErrorwait等关键字,跟rxjava的Observable非常相似的用法

Flutter

Widget

  • Widget其实相当于View,只不过在Flutter中,Widget变化将依赖State<Widget>

Android

与JS/H5互相通信的第三方框架JsBridge

  • 利用一个事件总线机制(突然好多东西都用的这种方式,android本身啦,EventBus之类的,可能因为好管理??),

  • 需要先进行一下js->android的转义(通过 java.net.URLEncoder )

  • 每一个url对应一个CallbackFunction,然后再将这些对应关系存在HashMap里

AOP

面向切面编程

  • 其实是一种思想,可以简单理解为拦路虎或者斯芬克斯,需要过了考验(也就是AOP切入点)之后,才能继续支持之前的操作
  • 详细的已经有人写了(暂时项目用不上...所以懒...),贴上地址

  • 用于重复点击,业务处理前的校验等一些前置的同步同时在同一线程同一进程下的任务

  • 常用Aspect

线程安全

SparseArray

链接

Gradle

一键打包出release包+360加固签名

若是新建gradle, 记得在app目录下的build.gradle开头做引入

https://blog.csdn.net/u012999651/article/details/105764812中修改

 // 把敏感信息存放到自定义的properties文件中
 def  propertiesFile  =  rootProject.file("release.properties")
 def  properties  =  new  Properties()
 properties.load(new  FileInputStream(propertiesFile))
 ​
 ext {
  // 签名配置
  signing  = [keyAlias : "yourKeyAlias",
  keyPassword : "yourKeyPassword",
  storeFile : "yourStoreFileLocal",
  storePassword:  "yourStorePassword"
  ]
 ​
  // app相关的配置
  app  = [
  //默认release apk的文件路径,因为加固是基于release包的
  releasePath : "${project.buildDir}/outputs/apk/release",
  //对release apk 加固后产生的加固apk地址
  packersPath : "${project.buildDir}/outputs/apk/jiagu"
  ]
 ​
  // 360加固配置
  packers  = [account : properties['JiaguLoginName'], //账号
  password : properties['JiaguPwd'],  //密码
  jarPath : properties['JiaguDir']  //执行命令的jar包路径
  ]
 }
 ​
 /**
  *  360加固,适用于新后台打包
  *  task名字可以自定义后,通过android_studio创建一个task,两个task同名即可
  */
 task  yourGradleCustomTaskName{
  group  'packers'
  dependsOn  'assembleRelease'
  doLast {
  //删除加固后的渠道包
 //        deleteFile()
  // 寻找打包文件release apk
  def  releaseFile  =  findReleaseApk()
  if (releaseFile  !=  null) {
  println  "packers found release apk and start jiagu..."
  //执行加固签名
  packers360(releaseFile)
  //重命名加固后apk
  renameOutputApk()
  } else {
  println  'packers===can\'t find release apk and can\'t excute 360 jiagu'
  }
  }
 }
 ​
 /**
  *  对于release apk 进行360加固
  */
 def  packers360(File  releaseApk) {
  println  'packers===beginning 360 jiagu'
  def  packersFile  =  file(app["packersPath"])
  if (!packersFile.exists()) {
  packersFile.mkdir()
  }
  exec {
  // 登录360加固保
  executable  =  'java'
  args  = ['-jar', packers["jarPath"], '-login', packers["account"], packers["password"]]
  println  'packers===import 360 login'
  }
  exec {
  // 导入签名信息
  executable  =  'java'
  args  = ['-jar', packers["jarPath"], '-importsign', signing["storeFile"],
  signing["storePassword"], signing["keyAlias"], signing["keyPassword"]]
  println  'packers===import 360 sign'
  }
  exec {
  // 查看360加固签名信息
  executable  =  'java'
  args  = ['-jar', packers["jarPath"], '-showsign']
  println  'packers===show 360 sign'
  }
  exec {
  // 初始化加固服务配置,后面可不带参数
  executable  =  'java'
  args  = ['-jar', packers["jarPath"], '-config']
  println  'packers===init 360 services'
  }
  exec {
  // 执行加固
  executable  =  'java'
  args  = ['-jar', packers["jarPath"], '-jiagu', releaseApk.absolutePath, app["packersPath"], '-autosign']
  println  'packers===excute 360 jiagu'
  }
  println  'packers===360 jiagu finished'
  println  "packers===360 jiagu path ${app["packersPath"]}"
 }
 ​
 /**
  * 寻找本地的release  apk
  * @return true
  */
 def  deleteFile() {
  delete  app["packersPath"]
  println  'packers===delete all file'
 }
 ​
 /**
  * 创建时间标签
  * @return
  */
 def  createDateTip() {
  def  date  =  new  Date()
  def  formattedDate  =  date.format('yyyyMMddHHmm')
  return  formattedDate
 }
 ​
 /**
  * 首先打一个release包,然后找到当前的文件进行加固
  * @return releaseApk
  */
 def  findReleaseApk() {
  def  apkDir  =  file(app["releasePath"])
  File  releaseApk  =  apkDir.listFiles().find { it.isFile() &&  it.name.endsWith(".apk") }
  println  "packers===find release apk ${releaseApk.name}"
  return  releaseApk
 }
 ​
 ​
 /**
  * 重命名打包加固后的apk名称
  */
 def  renameOutputApk() {
  File  oldApkDir  =  file(app["packersPath"])
  File  oldApk  =  oldApkDir.listFiles().find { it.isFile() &&  it.name.contains("jiagu") }
  def  newName  =  "app-${android.defaultConfig.versionCode}-${createDateTip()}-release.apk"
  println  "newName = ${newName}"
  copy {
  from  app["packersPath"] +  File.separator  +  oldApk.name
  into  app["packersPath"]
  rename(oldApk.name, newName)
  println  "packers===output pacckers ${newName}"
  }
  File  newApk  =  oldApkDir.listFiles().find { it.isFile() &&  it.name  ==  newName }
  oldApk.delete()
  println  "packers===output packers renameApk ${newApk.absolutePath}"
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 特别说明 当前博客平台账号已废弃,如果有使用细节问题请前往我新博客平台进行讨论交流。 个人博客平台 HuRuWo的...
    善笃有余劫阅读 4,952评论 0 30
  • 附上原文作者连接:作者:金诚 一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他...
    这个美嘉不姓陈阅读 2,261评论 1 35
  • :移动开发简介 一、什么是原生开发: 原生应用程序是指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台...
    shuo_fd6c阅读 457评论 0 0
  • 一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他单一功能的框架 混合开发框架:...
    伟子男阅读 5,243评论 0 161
  • Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可...
    奔跑吧李博阅读 1,080评论 0 10