지식메모

반응형

ImageIcon img = new ImageIcon("이미지경로");

해당프레임.setIconImage(img.getImage());

반응형
반응형




현재 프로젝트에 lib 폴더가 있고 start.exe 파일을 참조하게 하고 싶다면



File path = new  File("lib"+File.separator+"start.exe");



이렇게 해주면 된다.

그런데 프로젝트 실행할 땐 잘되는데 실행가능한 jar 파일로 export 하여 해보니 안된다..ㅠㅠ



반응형
반응형




자바 스윙에서 JTextArea 에서 스크롤바 자동으로 설정하는 방법


1
2
3
4
5
6
JTextArea area= new JTextArea();
JScrollPane scrollPane = new JScrollPane(area);  //스크롤판 추가
JPane.add(scrollPane); //화면에 추가
 
area.append(log);  // 출력로그 JTextArea 출력
area.setCaretPosition(txtLog.getDocument().getLength());  // 이 코드를 append 밑에 추가해주면 항상 아래로 스크롤 된다
cs


반응형
반응형




이 방법을 시도해보기 전에 더 간단한 방법이 있으므로 시도해보길 추천함

안드로이드 apk 쉽게 재서명 resign 하기

http://yonoo88.tistory.com/808




이미 릴리즈 된 안드로이드 apk 를 내 개인 서명키로 바꾸는 방법

여기서는 이미 있는 debug.keystore 파일을 이용하여 해보았다.


우선 재서명할 apk를 준비한다.


압축프로그램이 있다면 우클릭을 하고 압축을 푼다. (ex. astro apk)





압축을 풀고 나서 해당 폴더에 들어가면 파일이 많이 있는데 여기서 



META-INF 폴더를 삭제한다. 이 폴더에 서명관련한 파일들이 있기 때문이다.



삭제한 다음 다시 이 폴더를 압축하는데 꼭 폴더 내부로 들어가서 모든파일 선택 후 압축을 해야한다.!





그럼 압축파일이 생기는데 보기 편한 곳으로 이동시켜놓고




확장자를 ,apk로 바꿔준다.



그럼 위처럼 apk 로 변경된다 (기존 apk와 이름이 같아 resign으로 변경해주었다)


혹시 뒤에 확장자가 안보이면 폴더옵션에서

알려진 파일 형식의 파일 확장명 숨기기를 체크 해제 해준다.







그럼 cmd 창을 연다.


해당 폴더가 있는 경로로 진입한다. 여기서는 d:\astro 이다


그리고 서명할 키가 있어야 하는데 여기서는 debug.keystore를 이용하겠다.


이 키스토어는 C:\Users\Administrator\.android 폴더에 위치하고 있다.





그럼 이제 서명을 해줘야 하는데 명령어는 다음과 같다.


출처

http://developer.android.com/tools/publishing/app-signing.html


$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
-keystore my-release-key.keystore my_application.apk alias_name


jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [키스토어경로] [서명할apk경로] [키스토어별명]


여기서 jarsigner 경로가 환경변수에 등록되어 있어야한다.


하지만 자바를 처음 설치할 때 


%JAVA_HOME%\jdk\bin


이런 식으로 환경변수를 등록해주므로 아마 이미 되었을 것이다.


기본 경로는 다음과 같다(64비트)


C:\Program Files\Java\jdk1.8.0_05\bin




이렇게 해주면 된다.


기본적으로 debug.keystore 는 다음과 같은 정보를 가지고 있다


  • 키스토어 이름 : "debug.keystore"
  • 키스토어 비밀번호 : "android"
  • 키 별명 : "androiddebugkey"
  • 키 비밀번호 : "android"
  • CN: "CN=Android Debug,0=Android,C=US"

  • 키스토어 별명은 확인은


    keytool -list -v -keystore [키스토어경로] 


    로 확인할 수 있다.






    그럼 다음과 같이 입력 후 


    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore c:\.android\debug.keystore com.metago.resign.apk androiddebugkey


    실행하면 암호를 치라고 나오는데 android 라고 써준다.




    그럼 뭐가 좌르륵 나오면서 끝에 jar signed 라고 뜰 것이다.



    이제 서명은 되었고 apk를 다시 재정렬?시켜줘야 한다.


    그러기 위해서는 


    zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

    zipalign -v 4 [서명한apk] [apk 새이름]


    위 명령어를 실행해 줘야 하는데 zipalign 경로가 환경변수 Path에 추가 되어 있어야 한다.



    Path 변수 값 예시C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%JAVA_HOME%\bin;D:\backup\eclipse\adt-bundle-windows-x86_64-20140702\sdk\platform-tools;%ANDROID_HOME%\tools;%ANDROID_HOME%\build-tools\android-4.4W 



    zipalign 은 sdk 폴더에 buiild-tools 에서 안드로이드 아무 버전이나 폴더에 들어가면 있다.


    ex ) C:\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W




    그래서 


    zipalign -v 4 com.metago.astro.resign.apk astro.apk



    라고 실행해주면


    아까보다 더 많은 좌르륵이 나오면서 


    Verification succesful 





    이라고 뜰 것이다.



    해당 폴더에 가보면 apk 가 생성되어 있을 것이다.





    확인을 해보고 싶다면

    jarsigner -verify my_application.apk //간단히 서명확인할 때

    jarsigner -verify -verbose -certs my_application.apk //서명 외 다른 정보도 자세히 확인할 때


    다음과 같이 실행해준다.


    원본 apk 파일인 com.metago.astro.apk 의 서명 정보 확인


    jarsigner -verify -verbose -certs com.metago.astro.apk





    debug.keystore 로 재서명한 astro.apk


    jarsigner -verify -verbose -certs astro.apk




    재서명한 astro.apk를 보면 Android Debug로 바뀐게 보인다.


    그럼 재서명 완료!!



    반응형
    반응형




    자바 스윙에서 JPasswordField 필드를 사용하면 암호입력시 * 별표로 표시할 수 있는데 이 가려지 값을 가져오는 방법



    tf_pw = new JPasswordField();       
    tf_pw.setEchoChar('*');
    



    이런 식으로 암호 입력시 * 별표로 가려지게 한다음



     String pw = "";
      
    //tf_pw 필드에서 패스워드를 얻어옴, char[] 배열에 저장
    char[] secret_pw = tf_pw.getPassword(); 
    
    //secret_pw 배열에 저장된 암호의 자릿수 만큼 for문 돌리면서 cha 에 한 글자씩 저장
         for(char cha : secret_pw){         
             Character.toString(cha);       //cha 에 저장된 값 string으로 변환
           //pw 에 저장하기, pw 에 값이 비어있으면 저장, 값이 있으면 이어서 저장하는 삼항연산자
             pw += (pw.equals("")) ? ""+cha+"" : ""+cha+"";   
         }
    



    이렇게 저장한 후 System.out.println(pw)로 찍어보면 입력된 암호가 나타난다.



    반응형
    반응형





    필수 환경


    자바 설치

    자바 path 설정

    이클립스 설치

    android sdk 설치


    위 환경이 설치되어 있다는 가정하에 실행



    로보티움 튜토리얼 페이지


    https://github.com/RobotiumTech/robotium/wiki/Robotium-Tutorials


    위 링크에서

    환경 설치부터 예제 소스코드와 실행방법 pdf 파일까지 받을 수 있다.





    위와 같은 페이지가 나타나는데 


    우선 Calculator Source Code 와 


    아래 Black Box Testing 에서 Source Code를 내려받는다.


    그런 다음 이클립스에서 2개의 프로젝트를 import 한다음

    (Android 프로젝트 Exisiting Android Code Into Workspace로 import)


    에뮬레이터를 실행하거나 apk를 설치할 폰을 준비한다.


    AndroidCalculator 프로젝트 파일





    우선 Android Calculator 프로젝트 우클릭 > Run As > Android Application 을 실행하여 

    에뮬레이터나 연결된 폰에 Calculator 앱을 설치한다.



    설치가 되었으면 이제 BlackBox Testing 프로젝트를 실행해야 한다.


    testAndroidCalculatorBlackBox  프로젝트 모습




    위 Calculator와 다른 점은 robotium-solo-5.0.1.jar 라이브러리가 있다는 점이다.

    저게 있어야 테스팅이 가능하다.



    TestApk.java 파일을 보면



    package com.testcalculator;
    
    import com.robotium.solo.Solo;
    import android.test.ActivityInstrumentationTestCase2;
    
    @SuppressWarnings("unchecked")
    public class TestApk extends ActivityInstrumentationTestCase2 {
    
    	private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.calculator.Main"; // 꼭 확인
    	private static Class launcherActivityClass;
    	static {
    
    		try {
    			launcherActivityClass = Class
    					.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
    		} catch (ClassNotFoundException e) {
    			throw new RuntimeException(e);
    		}
    	}
    
    	public TestApk() throws ClassNotFoundException {
    		super(launcherActivityClass);
    	}
    
    	private Solo solo;
    
    	@Override
    	protected void setUp() throws Exception {
    		solo = new Solo(getInstrumentation(), getActivity());
    	}
    
    	public void testDisplayBlackBox() {
    		// Enter any integer/decimal value for first editfield, we are writing  10
    		solo.clearEditText(0);
    		solo.enterText(0, "10");
    		
    		// Enter any integer/decimal value for first editfield, we are writing  20
    		solo.clearEditText(1);
    		solo.enterText(1, "20");
    		
    		// Click on Multiply button
    		solo.clickOnButton("Multiply");
    
    		// Verify that resultant of 10 x 20
    		assertTrue(solo.searchText("200"));
    	}
    
    	@Override
    	public void tearDown() throws Exception {
    		solo.finishOpenedActivities();
    	}
    
    }
    


    예제 코드라 알아서 되어 있겠지만 패키지 네임을 꼭 확인한다. 이 패키지 네임은 테스트할 앱 내 클래스 파일명으로 해주어야 한다.


    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.calculator.Main";


    그래야 해당 앱을 실행해서 테스트가 가능하다.


    또 확인해야 할 것이 메니페스트 파일인데 열어보면



    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.testcalculator"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="10" />
    
        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.calculator" android:label="TestAndroidCalculatorBlackBox"/>
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <uses-library android:name="android.test.runner" />
        </application>
    
    </manifest>
    




    <manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="com.testcalculator" // 이 패키지명은 test프로젝트의 패키지 명이어야 하고


    <instrumentation

            android:name="android.test.InstrumentationTestRunner"

            android:targetPackage="com.calculator" android:label="TestAndroidCalculatorBlackBox"/>


    이 타겟 패키지명은 해당 앱 패키지명이어야 한다. 말 그대로 타겟이니 테스트할 앱 패키지명을 적어준다.


    위 프로젝트 사진을 보면 

    패키지명이 나와있다.



     AndroidCalculator 패키지명 : com.calculator

    testAndroidCalculatorBlackBox 패키지명 : com.testcalculator 

     

     



    확인이 끝났다면 

    testAndroidCalculatorBlackBox  프로젝트 우클릭 > Run As > Android Juit Test  을 클릭하여 테스트를 실행한다.


    물론 에뮬레이터에 앱을 설치헀으면 똑같이 에뮬레이터에서 실행하고 폰이면 폰에서 실행한다.


    폰으로 실행한 영상




    이렇게 자동으로 곱셈계산이 된다.


    마지막으로 요약하자면


    1. 로보티움 튜토리얼 페이지에서 AndroidCalculator  프로젝트와 testAndroidCalculatorBlackBox  프로젝트 파일을 내려받는다.


    2. 이클립스에서 두 프로젝트를 import 한다.


    3. 먼저 AndroidCalculator  을 실행하여 설치한다.


    4. testAndroidCalculatorBlackBox  프로젝트 패키지명 확인한 뒤 Run As > Android Juit Test 로 실행한다.


    나중에 apk 파일만 가지고 테스트 하는 방법을 알아보아야겠다.


    앱 서명문제 때문에 번거로운거 같다..







    반응형
    반응형


    해당링크

    http://dextto.tistory.com/180



    핵심 키워드 \D+


    문자열 배려 첫번째는 공백이므로 split[1] 값 부터 사용하기


    특히 특수문자 검색할 땐 앞에 백슬래쉬 요거 \ 추가하기


    ex) ""이름"" ( 에러뜸 ) ▶ "\"이름\"" ( 따옴표도 검색가능 )


    반응형
    반응형




    우선 아래와 같이 asset 폴더에 폰트파일을 추가해준다.





    폰트파일의 경로는 C:\Windows\Fonts 여기서 찾을 수 있다.


    그런 다음 폰트를 바꾸고 싶은 뷰에다 적용을 해주면되는데 개인적으로 버튼의 텍스트 폰트를 바꾸고 싶었다.



    Button btn2 = (Button)findViewById(R.id.button_custom);
    btn2.setOnClickListener(this);
    	
    Typeface typeFace = Typeface.createFromAsset(getAssets(), "fonts/NEXONFootballGothicB.ttf"));  //asset > fonts 폴더 내 폰트파일 적용
    btn2.setTypeface(typeFace);
    
    


    위와 같이 버튼에 폰트를 적용하였다.


    Typeface typeFace = Typeface.createFromAsset(getAssets(), "fonts/NEXONFootballGothicB.ttf")); // 폰트 설정 후

    btn2.setTypeface(typeFace); //btn2 버튼에 폰트 적용


    끝!


    반응형

    + Recent posts