【Android Q】Android Q Beta(ベータ)版 をインストールする (動画有り)

以下から参加すると、これまでの安定版のOTA更新と同じようにインストールできるようになります。

Android ベータ プログラム

まずは、 Beta1 からです。

何も考えずに進みます。



あらかじめ既知の問題等リリースノート関係は確認しておきましょう。

componentid:190602 status:open - Issue Tracker

Android Q Beta 1 now available! : android_beta

Support and Release Notes  |  Android Developers

まとめ?

安定版に戻すことは可能だと書いてます。

ベータ プログラムを終了する
このプログラムはいつでも登録の解除が可能です。必要に応じて、動作が安定している正式版の Android に戻すことができます。お使いのデバイスでベータ版の Android の実行中に登録を解除すると、デバイス上のユーザーデータがすべて消去されます。プログラムの終了まで登録しておくと、プログラムの終了時に、動作が安定している正式版の Q へのアップデートが配信されます。この場合、デバイスのデータは消去されません。

そんなにきれいに戻れるのかな?

本当かな?

(つづく...)


Android 日本独自規格ワンセグ対応機種 に NHK料金が加算される

【ワンセグ訴訟 NHKが逆転勝訴】ワンセグ機能付き携帯電話の所持者に、NHKと受信契約を結ぶ義務があるかが争われた訴訟の控訴審判決で東京高裁はNHK側の逆転勝訴を言い渡した。

ワンセグ訴訟でNHKが逆転勝訴に「iPhoneだからワンセグ付いてなくて良かったー!」「やっぱiPhoneやな」などの声/国産スマホやAndroid端末には向かい風? - Togetter

 

料金

「 ワンセグ携帯スマホのNHK受信料の支払い金額は通常と全く同じ1ヶ月あたり1,310円である 」

ワンセグ携帯スマホのNHK受信料の金額・値段は1ヶ月いくら?

この金額をNTTなど通信キャリアに支払う月額に追加できるか?

 

ワンセグ機種

おおまかに見てみる。

メーカーでいうところの以下がワンセグ搭載。

- ソニー
- サムスン
- シャープ
- 富士通

価格.com - ワンセグのスマホ(スマートフォン) 人気ランキング

 

ワンセグ非搭載機種

はやくもそんな記事。

3キャリアのワンセグ非搭載モデルは下記のとおりです(2018年秋冬・冬春のみ)

<ドコモ>

・iPhone XS / Max(アップル)
・iPhone XR(アップル)
・AQUOS sense2 SH-01L docomo with(シャープ)
・Google Pixel 3 / XL(グーグル)

<au>

・iPhone XS / Max(アップル)
・iPhone XR(アップル)
・AQUOS sense2(シャープ)
・LG it(LG)
・URBANO V04(京セラ)

(訂正:初出時auにPixel 3 / XLが入っておりましたが、未発売となります)

<ソフトバンク>

・iPhone XS / Max(アップル)
・iPhone XR(アップル)
・AQUOS zero(シャープ)
・HUAWEI Mate 20 Pro(ファーウェイ)
・AQUOS R2 Compact(シャープ)
・Android One S5(シャープ)
・Google Pixel 3 / XL(グーグル)

ワンセグ非搭載のスマホはどれ? - Engadget Japan

iPhone か Android では、Google Pixelシリーズ がワンセグ非搭載。

あと、こまごま機種によって非搭載。

 

まとめ

日本独自仕様のワンセグにわざわざ対応してくれてた端末メーカーに対してひどい話に見える。

端末メーカーは、日本独自規格にわざわざ手間をかけて対応すると売れなくなる、というおかしな話に。

これ誰得なんだ?




Android人気ニュース速報 2019-03-14

同じソース元の記事がいつものように多数。

Android Developers Blog: Introducing Android Q Beta

そんなイナゴ記事のみ取り上げます、人気ニュース速報。

元記事を読むのがもっとも新鮮で純粋です。

Android Q



Androidの次期バージョン「Android Q」のベータ1が提供開始 - GIGAZINE

次期「Android Q」がベータ提供開始。Pixelで利用可 - PC Watch

「Android Q」の新機能・変更点まとめ

まとめ

個人情報、セキュリティ周りの厳格化は続いている。

正式版リリースは、2019-Q3。

目新しい新機能はあるのか?

最近のスマホ界隈のアナウンスは内容が薄くなってないか。


Android端末ユーザー辞書に最新絵文字を追加する方法

以下、デフォルト状態での、それぞれの入力候補。

「すいーつ」

「はーと」

「どうぶつ」

Android端末が元々備えている「ユーザー辞書」に、絵文字を登録していきます。

絵文字パックから、やっていきます。

「すいーつ」

「はーと」

「どうぶつ」

検索して、「辞書に追加」ボタンで連続追加していくだけです。

 

結果

「すいーつ」


「はーと」

「どうぶつ」

それでも、反映されない場合は、過去の入力から学習したGboard内の辞書が優先的に表示されてしまう場合があるようです。

以下の手順で学習内容は削除できるようです。

「単語リスト(ユーザー辞書)」が変換候補に表示されない場合

今回、利用したアプリは以下。

顔文字パック 辞書ツール - Google Play のアプリ


マルチモジュール構成に便利な「Dependency Graph」を書き出して視覚化する

まずは、開発環境にいれておきます。

グラフの書き出しに必要です。


$ brew install graphviz

Graphviz - Graph Visualization Software



つづいて、確認するマルチモジュールプロジェクト の build.gradle に追記。


apply from: file('gradle/dependencyGraph.gradle')

該当位置に、gradleタスクを記述したファイルを置きます。

学習コストがかかるので、安定のJakeコードをそのままコピペで

まずは稼動させて、モチベーションを上げて進みましょう。


# gradle/dependencyGraph.gradle

task projectDependencyGraph {
  doLast {
    def dot = new File(rootProject.buildDir, 'reports/dependency-graph/project.dot')
    dot.parentFile.mkdirs()
    dot.delete()

    dot << 'digraph {\n'
    dot << "  graph [label=\"${rootProject.name}\n \",labelloc=t,fontsize=30,ranksep=1.4];\n"
    dot << '  node [style=filled, fillcolor="#bbbbbb"];\n'
    dot << '  rankdir=TB;\n'

    def rootProjects = []
    def queue = [rootProject]
    while (!queue.isEmpty()) {
      def project = queue.remove(0)
      rootProjects.add(project)
      queue.addAll(project.childProjects.values())
    }

    def projects = new LinkedHashSet<Project>()
    def dependencies = new LinkedHashMap<Tuple2<Project, Project>, List<String>>()
    def multiplatformProjects = []
    def jsProjects = []
    def androidProjects = []
    def javaProjects = []

    queue = [rootProject]
    while (!queue.isEmpty()) {
      def project = queue.remove(0)
      queue.addAll(project.childProjects.values())

      if (project.plugins.hasPlugin('org.jetbrains.kotlin.multiplatform')) {
        multiplatformProjects.add(project)
      }
      if (project.plugins.hasPlugin('kotlin2js')) {
        jsProjects.add(project)
      }
      if (project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application')) {
        androidProjects.add(project)
      }
      if (project.plugins.hasPlugin('java-library') || project.plugins.hasPlugin('java')) {
        javaProjects.add(project)
      }

      project.configurations.all { config ->
        config.dependencies
                .withType(ProjectDependency)
                .collect { it.dependencyProject }
                .each { dependency ->
          projects.add(project)
          projects.add(dependency)
          rootProjects.remove(dependency)

          def graphKey = new Tuple2<Project, Project>(project, dependency)
          def traits = dependencies.computeIfAbsent(graphKey) { new ArrayList<String>() }

          if (config.name.toLowerCase().endsWith('implementation')) {
            traits.add('style=dotted')
          }
        }
      }
    }

    projects = projects.sort { it.path }

    dot << '\n  # Projects\n\n'
    for (project in projects) {
      def traits = []

      if (rootProjects.contains(project)) {
        traits.add('shape=box')
      }

      if (multiplatformProjects.contains(project)) {
        traits.add('fillcolor="#ffd2b3"')
      } else if (jsProjects.contains(project)) {
        traits.add('fillcolor="#ffffba"')
      } else if (androidProjects.contains(project)) {
        traits.add('fillcolor="#baffc9"')
      } else if (javaProjects.contains(project)) {
        traits.add('fillcolor="#ffb3ba"')
      } else {
        traits.add('fillcolor="#eeeeee"')
      }

      dot << "  \"${project.path}\" [${traits.join(", ")}];\n"
    }

    dot << '\n  {rank = same;'
    for (project in projects) {
      if (rootProjects.contains(project)) {
        dot << " \"${project.path}\";"
      }
    }
    dot << '}\n'

    dot << '\n  # Dependencies\n\n'
    dependencies.forEach { key, traits ->
      dot << "  \"${key.first.path}\" -> \"${key.second.path}\""
      if (!traits.isEmpty()) {
        dot << " [${traits.join(", ")}]"
      }
      dot << '\n'
    }

    dot << '}\n'

    def p = 'dot -Tpng -O project.dot'.execute([], dot.parentFile)
    p.waitFor()
    if (p.exitValue() != 0) {
      throw new RuntimeException(p.errorStream.text)
    }

    println("Project module dependency graph created at ${dot.absolutePath}.png")
  }
}

projectDependencyGraph.gradle · JakeWharton/SdkSearch

以上の2ファイルに対する作業を、

シンプルなマルチモジュール構成のコードをお借りしてやってみます。

あとは、タスク実行するだけ。

以下動画のようにPNG画像としてグラフが書き出されます。



DoroidKaigi2019 コードでも利用されていますね。

conference-app-2019/dependencyGraph.gradle at master · DroidKaigi/conference-app-2019

便利です。