build.gradle

  • signingConfig/ 配下を外だしするので、build.gradleではIncludeするような指定を行う
    • apply from: 'signingConfigs/config.gradle', to: android の部分
  • signingConfig signingConfigs.debug の部分を追加することで、 通常のAndroid署名キー( %USERPROFILE%/.android/debug.keystore )を参照しなくなる模様
    apply from: 'signingConfigs/config.gradle', to: android

    buildTypes {
        debug {
            debuggable true
            applicationIdSuffix = '.debug'
            versionNameSuffix = '-debug'
            signingConfig signingConfigs.debug
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

signingConfig/config.gradle

VCS管理外のシークレット情報として、以下

app/signingConfig/**
signingConfigs/
    ├── config.gradle
    ├── debug.jks
    └── release.jks

debug.jks は Windowsの場合 %USERPROFILE%/.android/debug.keystore からコピーすると Windowsで使用していた署名キーを引き継げる. storePassword や keyAlias は Androidデフォルトの値

signingConfigs {
    debug {
        storeFile file('./debug.jks')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
    release {
        storeFile file('./release.jks')
        storePassword 'XXXXXXXXXXXXXX'
        keyAlias 'xxxx'
        keyPassword 'XXXXXXXXXXXXXX'
    }
}

バージョン名からタグつけたり、APK作ったり、slf4jでファイル保存したログ引っ張ったり 等々、便利コマンドも色々つくったので、Makefileを抜粋して貼っつけておく

SERVICE=android
CONTAINER=gradle:7.3.3-jdk11
PKG := com.exapmle.app.dev.debug
.DEFAULT_GOAL := convert_logger

tag:
	@export tag=v$$(grep "versionName " app/build.gradle |cut -d\" -f2) && git tag "$$tag" && echo "==> $$tag tagged."

zip:
	@zip -r ${SERVICE}.signingConfigs.zip ./app/signingConfigs

convert_logger:
	@bin/convert_to_logger

log:
	@adb shell run-as $(PKG) cat /data/data/$(PKG)/files/logs/app.log
logs:
	@for d in /data/data/$(PKG)/files/logs{,/archives}; do \
		echo "==> $$d"; \
		adb shell run-as $(PKG) ls -lah $$d; \
	done
log_tailf:
	@adb shell run-as $(PKG) tail -F /data/data/$(PKG)/files/logs/app.log
log_rm:
	@adb shell run-as $(PKG) rm -rfv /data/data/$(PKG)/files/logs/archives

# For wireless debug
# 1. connect device to pc
# 2. Enable wireless debug in android device
# 3. make tcpip
tcpip:
	@adb tcpip 5555
# 4. Open `wireless debug settings in device developper mode` and copy `IPAddress and Port`
# 5. make connect {Copied IPAddress}:{Copied port}. Connected in wireless, then disconnect wire.
connect:
	@adb connect $(arg)

_gradle:
	@test -n "$${ANDROID_HOME}" || (echo "=> No env ANDROID_HOME is defined." 1>&2 && exit 1)
	@docker run -it --rm \
		--name gradle \
		-e GRADLE_USER_HOME=/src/.gradle_docker \
		-e ANDROID_HOME=/android-sdk \
		-v $${ANDROID_HOME}:/android-sdk \
		-v $(PWD):/src \
		-w /src \
		$(CONTAINER) \
		./gradlew $(TASK)

task_list:
	@TASK=tasks make _gradle

_apk:
	@TASK=:app:assembleDevDemoDebug make _gradle
	@make TARGET_DIR=$(PWD)/app/build/outputs/apk/devDemo/debug open_dir
apk: _apk

# debug:
# 	@TASK=:app:assembleDevDemoDebug make _gradle

_release-aab:
	@TASK=:app:bundleRelease make _gradle
	@make TARGET_DIR=$(PWD)/app/build/outputs/bundle/release open_dir
release-aab: _release-aab

inpect:
	@docker inspect $(CONTAINER)

open_dir:
	@command -v open >&/dev/null
	@open $(TARGET_DIR)