blob: e616af99091e69cd6bf350f8bda3e85ae1bccb86 [file] [log] [blame]
module Fastlane
module Actions
module SharedValues
SIGNED_APK_PATH = :SIGNED_APK_PATH
end
class SignApkAction < Action
def self.run(params)
UI.user_error!("Couldn't find '*release-unsigned.apk' file at path 'app/build/outputs/apk/'") unless params[:apk_path]
UI.user_error!("Need keystore in order to sign apk") unless params[:keystore_path]
sign_cmd = ["jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1"]
sign_cmd << ["-keystore #{params[:keystore_path]}" ] if params[:keystore_path]
sign_cmd << ["#{params[:apk_path]}"] if params[:apk_path]
sign_cmd << ["#{params[:alias]}"] if params[:alias]
sign_cmd << ["-keypass #{params[:keypass] ? params[:keypass] : params[:storepass]}"] if params[:keypass] || params[:storepass]
sign_cmd << ["-storepass #{params[:storepass]}"] if params[:storepass]
sign_cmd << ["-tsa #{params[:tsa]}"] if params[:tsa]
if params[:signed_apk_path]
sign_cmd << ["-signedjar #{params[:signed_apk_path]}" ]
Actions.lane_context[SharedValues::SIGNED_APK_PATH] = "#{params[:signed_apk_path]}"
elsif params[:apk_path].include?("unsigned")
sign_cmd << ["-signedjar #{params[:apk_path].gsub('-unsigned', '')}"]
Actions.lane_context[SharedValues::SIGNED_APK_PATH] = "#{params[:apk_path].gsub('-unsigned', '')}"
end
Fastlane::Actions.sh(sign_cmd, log: true)
end
#####################################################
# @!group Documentation
#####################################################
def self.description
"Sign a Android apk with a java keystore"
end
def self.available_options
apk_path_default = Dir["*.apk"].last || Dir[File.join("app", "build", "outputs", "apk", "*release-unsigned.apk")].last
[
FastlaneCore::ConfigItem.new(key: :apk_path,
env_name: "apk_path",
description: "Path to your APK file that you want to sign",
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] || apk_path_default,
optional: true),
FastlaneCore::ConfigItem.new(key: :signed_apk_path,
env_name: "SIGNED_APK_PATH",
description: "Path to the signed APK file",
optional: true,
is_string: true),
FastlaneCore::ConfigItem.new(key: :keystore_path,
env_name: "KEYSTORE_PATH",
description: "Path to java keystore",
optional: true),
FastlaneCore::ConfigItem.new(key: :alias,
env_name: "ALIAS",
description: "The alias of the certificate in the keystore to use to sign the apk",
is_string: true),
FastlaneCore::ConfigItem.new(key: :keypass,
env_name: "KEY_PASS",
description: "The password used to protect the private key of the keystore entry addressed by the alias specified. If not specified storepass will be used",
optional:true,
is_string: true),
FastlaneCore::ConfigItem.new(key: :storepass,
env_name: "STORE_PASS",
description: "The password which is required to access the keystore",
is_string: true),
FastlaneCore::ConfigItem.new(key: :tsa,
env_name: "TIME_STAMPING_AUTHORITHY",
description: "The url of the Time Stamping Authority (TSA) used to timestamp the apk signing",
optional:true,
is_string: true)
]
end
def self.output
['SIGN_APK_PATH', 'Path to your APK file']
end
def self.authors
"nomisRev"
end
def self.is_supported?(platform)
platform == :android
end
end
end
end