Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.

Commit 7c5a6ec

Browse files
committed
feat: resign action 구현
1 parent d4b8614 commit 7c5a6ec

File tree

6 files changed

+138
-0
lines changed

6 files changed

+138
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package kr.co.finda.androidtemplate.feature.resign
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
6+
class ResignAction : AnAction() {
7+
8+
override fun actionPerformed(e: AnActionEvent) {
9+
ResignDialog(e.project!!).show()
10+
}
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package kr.co.finda.androidtemplate.feature.resign
2+
3+
import com.intellij.openapi.project.Project
4+
import kr.co.finda.androidtemplate.type.AabType
5+
6+
interface ResignContract {
7+
interface View {
8+
fun showErrorDialog(message: String)
9+
fun onSuccess()
10+
}
11+
12+
interface Presenter {
13+
fun onResign(project: Project, aabType: AabType, password: String)
14+
}
15+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package kr.co.finda.androidtemplate.feature.resign
2+
3+
import com.intellij.openapi.project.Project
4+
import com.intellij.openapi.ui.ComboBox
5+
import com.intellij.openapi.ui.DialogWrapper
6+
import com.intellij.openapi.ui.showOkCancelDialog
7+
import com.intellij.openapi.ui.showOkNoDialog
8+
import com.intellij.ui.EnumComboBoxModel
9+
import com.intellij.ui.components.JBTextArea
10+
import com.intellij.ui.components.JBTextField
11+
import com.intellij.util.ui.FormBuilder
12+
import kr.co.finda.androidtemplate.type.AabType
13+
import kr.co.finda.androidtemplate.util.DeviceHelperImpl
14+
import javax.swing.JComponent
15+
16+
class ResignDialog(
17+
private val project: Project
18+
) : DialogWrapper(true), ResignContract.View {
19+
20+
private val presenter: ResignContract.Presenter by lazy {
21+
ResignPresenter(this)
22+
}
23+
24+
private val aabTypeModel = EnumComboBoxModel(AabType::class.java)
25+
26+
private val aabTypeComboBox = ComboBox(aabTypeModel)
27+
private val passwordTextField = JBTextField()
28+
private val panel = FormBuilder.createFormBuilder()
29+
.addLabeledComponent("Flavor 선택", aabTypeComboBox)
30+
.addLabeledComponent("비밀번호", passwordTextField)
31+
.addComponent(JBTextArea("OK버튼을 클릭한 후 한동안 에러가 뜨지 않으면 성공적으로 재서명을 실행한 것입니다."))
32+
.addComponent(JBTextArea("재서명이 완료될 때까지 해당 다이얼로그 동작이 멈출 수 있습니다."))
33+
.panel
34+
35+
init {
36+
init()
37+
title = "Re-sign finda aab"
38+
}
39+
40+
override fun createCenterPanel(): JComponent? {
41+
return panel
42+
}
43+
44+
override fun doOKAction() {
45+
presenter.onResign(
46+
project = project,
47+
aabType = aabTypeModel.selectedItem,
48+
password = passwordTextField.text
49+
)
50+
}
51+
52+
override fun showErrorDialog(message: String) {
53+
showOkNoDialog("에러가 발생했습니다", message, project)
54+
}
55+
56+
override fun onSuccess() {
57+
showOkNoDialog("재서명에 성공했습니다", "", project)
58+
}
59+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package kr.co.finda.androidtemplate.feature.resign
2+
3+
import com.intellij.execution.configurations.GeneralCommandLine
4+
import com.intellij.execution.process.OSProcessHandler
5+
import com.intellij.execution.process.ScriptRunnerUtil
6+
import com.intellij.execution.util.ExecUtil
7+
import com.intellij.openapi.project.Project
8+
import kr.co.finda.androidtemplate.type.AabType
9+
import kr.co.finda.androidtemplate.util.DeviceHelper
10+
import java.nio.charset.Charset
11+
12+
class ResignPresenter(
13+
private val view: ResignContract.View,
14+
) : ResignContract.Presenter {
15+
16+
override fun onResign(project: Project, aabType: AabType, password: String) {
17+
val command = if (aabType == AabType.Prd) PRD_RESIGN_COMMAND.format(password)
18+
else STAGE_RESIGN_COMMAND.format(password)
19+
val commandLine = GeneralCommandLine(command.split(" "))
20+
commandLine.charset = Charset.forName("UTF-8")
21+
commandLine.setWorkDirectory(project.basePath)
22+
23+
ExecUtil.execAndGetOutput(commandLine)
24+
val output = ScriptRunnerUtil.getProcessOutput(commandLine, ScriptRunnerUtil.STDOUT_OUTPUT_KEY_FILTER, 3000)
25+
26+
if (output.contains("error")) {
27+
view.showErrorDialog(output)
28+
} else {
29+
view.onSuccess()
30+
}
31+
}
32+
33+
companion object {
34+
private const val STAGE_RESIGN_COMMAND = "jarsigner -verbose -sigalg SHA256withRSA " +
35+
"-digestalg SHA-256 -keystore app/keystore/finda.jks -storepass %s " +
36+
"appsolid_unsigned_app-stg-release.aab key0"
37+
38+
private const val PRD_RESIGN_COMMAND = "jarsigner -verbose -sigalg SHA256withRSA " +
39+
"-digestalg SHA-256 -keystore app/keystore/finda.jks -storepass %s " +
40+
"appsolid_unsigned_app-prd-release.aab key0"
41+
}
42+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package kr.co.finda.androidtemplate.type
2+
3+
enum class AabType {
4+
Stg,
5+
Prd
6+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@
5555
icon="Icons.FindaLogo">
5656
<add-to-group group-id="ToolsMenu" anchor="last"/>
5757
</action>
58+
<action id="kr.co.finda.androidtemplate.feature.resign.ResignAction"
59+
class="kr.co.finda.androidtemplate.feature.resign.ResignAction" text="Re-sign Finda Aab "
60+
description="Re-sign finda aab">
61+
<add-to-group group-id="ToolsMenu" anchor="last"/>
62+
</action>
5863
</actions>
5964

6065
<extensions defaultExtensionNs="com.intellij">

0 commit comments

Comments
 (0)