본문 바로가기
안드로이드 자바

[Java][Android]Web3j 활용해 지갑 주소 생성하기

by teamnova 2025. 4. 11.
728x90

오늘은 web3j 라이브러리를 활용하여 지갑주소 생성하는 예시를 만들어 보겠습니다.

 

 

 

라이브러리 준비 및 그래들 설정

=> web3j는 자바 14버전 이후 부터 생긴 record 기능(14,15는 프리뷰, 16부터 정식 지원, 17은 해당 기능 지원하면서 LTS 버전)을 활용합니다. 해당 기능을 사용할 수 있도록 app 수준 build.gradle 파일에서 위 이미지와 같이 설정해주세요.

=> web3j는 Bouncy Castle, Jackson, OkHttp, RxJava, WebSocket 라이브러리들에 의존하는 라이브러리 입니다. 이에 따라web3j 포함 필요한 라이브러리들을 추가해주세요.

 

https://github.com/LFDT-web3j/web3j?tab=readme-ov-file

 

GitHub - LFDT-web3j/web3j: Lightweight Java and Android library for integration with Ethereum clients

Lightweight Java and Android library for integration with Ethereum clients - LFDT-web3j/web3j

github.com

 

 

 

레이아웃 xml 파일 코드(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Button
        android:id="@+id/btn_generate_wallet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="지갑 주소 생성" />

    <TextView
        android:id="@+id/tv_wallet_address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp" />

</LinearLayout>



 

액티비티 자바 코드

public class MainActivity extends AppCompatActivity {

    private TextView tvWalletAddress; //지갑 주소 보여줄 뷰
    private Button btnGenerateWallet; //지갑 주소 생성 버튼 뷰

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvWalletAddress = findViewById(R.id.tv_wallet_address);
        btnGenerateWallet = findViewById(R.id.btn_generate_wallet);

        // 지갑 주소 생성 버튼 눌릴시 이벤트 설정
        btnGenerateWallet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                generateWallet();
            }
        });
    }

    //지값 주소 생성 메서드
    private void generateWallet() {
        try {
            //SECP-256k1 기반 private key, public key를 가진 객체 생성
            ECKeyPair ecKeyPair = Keys.createEcKeyPair();

            // 생성한 키값 기반 지갑 주소 가져오기
            String walletAddress = Credentials.create(ecKeyPair).getAddress();

            // UI에 표시
            tvWalletAddress.setText("지갑 주소: " + walletAddress);

        } catch (Exception e) {
            Toast.makeText(this, "지갑 생성 오류: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            Log.e("에러", "에러 발생", e);
        }
    }
}

 

 

 

 

실행 결과

 

지갑 주소가 생성된 것을 확인할 수 있습니다