콘텐츠로 건너뛰기

[핵테온 2025] bridge

libbridge_lib.so 라이브러리를 살펴보면 아래와 같이 2가지 함수가 존재한다.

  • Java_com_hacktheon_bridge_BridgeLib_encode
  • Java_com_hacktheon_bridge_BridgeLib_decode

Android Studio에서 아래와 같이 새 프로젝트를 생성.

  1. Phone and Tablet에서 Native C++ 선택
  2. Package Name = com.hacktheon.bridge, Language = JAVA로 지정.
  3. Android Studio에서 java/com/hacktheon/bridge 경로에 BridgeLib.java 자바 클래스 파일 생성.
package com.hacktheon.bridge;

public class BridgeLib {
    public native String decode(String input);
    public native String encode(String input);

    static {
        System.loadLibrary("bridge_lib");
    }
}
  1. 파일 탐색기에서 MyApplication2/app/src/main 경로에 jniLibs 디렉토리 생성.
    apk 압축풀어서 lib 폴더에 있는 4개 폴더 복붙.
  2. MainActivity.java 코드 수정: 암호문과 함께decode 메소드 호출하면 끝.
package com.hacktheon.bridge;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.hacktheon.bridge.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    // Used to load the 'bridge' library on application startup.
    static {
        System.loadLibrary("bridge");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;

        BridgeLib bridgeLib = new BridgeLib();
        String encodedText = "4658hg76<h85eed73ihghidi8ehf<78;";

        // 디코딩 메서드 호출
        String decodedText = bridgeLib.decode(encodedText);

        tv.setText(decodedText);
    }

    /**
     * A native method that is implemented by the 'bridge' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}