メモメモメモ

ほんとうにめも

【HTML】required属性を無視する一番楽な方法

とあるプロジェクトでフォームの一時保存機能を実装していたときに見つけた。

submitボタンにformnovalidate属性を付けると、そのボタンを押下して送信された場合はrequiredmaxlengthなどを無視してくれる。

まさに一時保存機能を実装するときの為にあるような機能。

参考

stackoverflow.com

【ReactNaitve】Androidアプリのpackage名を変える

package名を変える理由

kang.hateblo.jp のようにアプリの引き継ぎ作業をしていた。あーだこーだしていざ、APKファイルをアップロード!というところで

APK または Android App Bundle のパッケージ名は「●●●」とする必要があります。 と言われてしまった。 f:id:yooska14:20181105161150p:plain

APKファイルの名前ではなくpackage名を変更しなければならなかったのでメモ。

Androidアプリのpackage名とは

アプリ固有のIDのようなもの。 iOSで言うbundle id Dropboxの場合はcom.dropbox.androidで、リバースドメインドメインを逆にしたやつ)プラス末尾にandroidをつける的な命名が一般的みたい。(これはiOSのbundle idでも同じ。)

手順(変更箇所)

変更ファイルは app/build.gradle app/src/main/AndroidManifest.xml

の2つ。 app/build.gradleは defaultConfigの中にあるapplicationIdを変更する。こんな感じ。

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        applicationId "your_package_name"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
    }

app/src/main/AndroidManifest.xmlは最上部の

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your_package_name">

この部分を変更する。

以上!

【ReactNative】Androidの証明書(keystore)を引き継ぐ

概要

基本的には通常通りで変わらない。 kang.hateblo.jp ↑の通りでリリースできるはず。 しかし、過去にリリースしたアプリで使っていた証明書を引き継ぎする必要があったのでその手順をメモ。

流れ

  1. keystoreを置き換える
  2. gradle.propertiesを書き換える

1. keystoreを置き換える

過去アプリのkeystoreをもらい、android/app/に置く。

2. gradle.propertiesを書き換える

置いたkeystoreのファイル名をgradle.propertiesMYAPP_RELEASE_STORE_FILEキーに書く。 passwordもMYAPP_RELEASE_STORE_PASSWORD``MYAPP_RELEASE_KEY_PASSWORDに書く。

以上!

誰か助けて

keystoreを無くしちゃった場合とかってアプリの履歴そのままで再発行できたりするのかな。。。

【ReactNative】Androidビルドエラー②

エラー

error: failed linking references.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':react-native-youtube:verifyReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt

解決方法

android/build.gradleに以下を追加

    subprojects {
        afterEvaluate {project ->
            if (project.hasProperty("android")) {
                android {
                    compileSdkVersion rootProject.ext.compileSdkVersion
                    buildToolsVersion rootProject.ext.buildToolsVersion
                }
            }
        }
    }

参考

stackoverflow.com

追記

build.gradleもといgradle自体を全然理解してなかったのですごくつまづいた。 gradleについては以下が参考になった。 qiita.com

【ReactNative】Androidビルドエラー①

react-native run-androidを実行すると以下のエラーが発生した。

* What went wrong:
Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
> Could not create service of type FileHasher using BuildSessionScopeServices.createFileSnapshotter().

ググっても解決しなかったので色々探ってみたところ、your_project/android/.gradleというディレクトリを発見した。 .gitignoreされているのでこれはCacheファイルかな?と考えたときにピンときた。

キャッシュを削除してみてなかっった!!!!

案の定、.gradleはcacheディレクトリだったので、ディレクトリごと削除して再度react-native run-androidを実行したらBUILD SUCCESSFULの嬉しいレスポンスが返ってきた。

追記

cacheクリアは方法としては ./gradlew clean cleanBuildCache の実行が普通みたいだが、今回はそれもまた同じエラーになってしまった。 適当に新規プロジェクトを作成してみて、作成段階では.gradleディレクトリが存在しなかったので、削除しても自動生成されるだろうと確信したので、ディレクトリごと削除してみたら当たった。

【MySQL】Jsonカラムに値が入れられなくて困ったら

stagingとかからexportしてきた値をlocalDBにimportしようとすると、こんなエラーに遭遇した。

Cannot create a JSON value from a string with CHARACTER SET 'binary'.

文字コードを変えると良さそうだけど、シンプルに

  1. 一旦カラム定義をText型にする
  2. データをimportする
  3. カラム定義をJsonに戻す

シンプルにこの対応でよかった。 Json型だろうがText型だろうが入る内容は同じなので大丈夫そう。

【ReactNative】Androidで2回目以降のリリースフロー

だいたい開発中はiOSでStaging(TestFlight)まで上げてAndroidは後回しにするので忘れがちな自分のために備忘録を。

手順

  1. ビルドバージョンを変更
  2. リリースビルドを作成(APKファイルを生成)(CLIコマンド一発)
  3. APKファイルをGoogle Play ストアにアップロード

以上。 参考までに、これがiOSだと

  1. ビルドバージョンを変更
  2. Archive・Distribute(XCode上でGUIでできる)
  3. ビルドバージョンを選択して「審査へ提出」

になる。ほとんど変わらない。 ※iOSの場合は審査待ちがあるので比較的「スムーズに行かない」気分になる。

1. ビルドバージョンを変更

./android/app/build.gradle

    defaultConfig {
        applicationId "your_app_id"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 2 // ここをincrement
        versionName "1.1" // ここもincrement
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }

versionCodeversionNameバージョンアップされていればOK。 ここを変えないと手順3バージョン コード 1 の APK が既に存在するため、別のバージョン コードを使用する必要がありますとなってAPKファイルをアップロードできない。

2. リリースビルドを作成(APKファイルを生成)

[project]/android

./gradlew assembleRelease

を実行する。 すると、[project]/android/app/build/outputs/apk/releaseapp-release.apkファイルが生成される。 このAPKファイルが、アプリ本体のようなものみたいです。

余談ですがAndroid端末からAPKを抽出して別端末へコピーとかもできるみたい。

3. APKファイルをGoogle Play ストアにアップロード

Google Play Console (https://play.google.com/apps/publish) へ行って、アプリを選択。

下画像にある左サイドバーの「リリース管理」 > 「アプリのリリース」へ移動し、

f:id:yooska14:20181021034753p:plain
アプリのリリース

製品版トラックセクションで「APKファイルをアップロード」する。 あとはポチポチ進んだらすぐリリースできる(iOSと違って審査がないからすぐリリースできる)