2019.08.17 15:18


가끔 내 폰에 설치된 앱이 어느 마켓에서 설치되었는지 알아보고 싶을 때가 있다.

apk의 설치 출처 말이다.

당연히 대부분은 Google Play Store 이겠지만, 또 한국의 이통사에서 유통한 단말이라면 당연히 원스토어도 설치되어 있을 것이므로 그것도 고려대상.

이러저러한 이유로 결국 알아낼 수 있는 방법이 있으면 좋겠다는 생각에 알아본 코드와 함께

각 코드별 어떠한 스토어와 연결되어 있는지도 함께 적어봤으면 좋겠다는 생각에 포스팅을 하게 되었다.

 

public String getFromInstalledMarket(Context context, String targetPkg) {
PackageManager pkgMgr = context.getPackageManager();
return pkgMgr.getInstallerPackageName(targetPkg);
}

view rawSplashViewPresenter.java hosted with ❤ by GitHub

 

컨텍스트에서 가져올 수 있는 저 정보가 중요한 정보인 것이다.

그렇다면, 이 코드의 실행 결과는??

한국에서 출시한 삼성 단말이라면 다음에서 언급한 예시에 대부분 해당이 될 것 같다.

아래의 경우 이외에도 null이 리턴되는 경우가 있으니 null 유효성 처리는 필수!

각 이름의 아래는 패키지명이므로, switch-case 문으로 구분해놓으면 멋진 판독기가 동작하리라!

 

1) Google Play Store(구글 플레이스토어)

com.android.vending

 

2) ONE STORE(원스토어)

com.skt.skaf.A000Z00040

 

3) Galaxy Apps(갤럭시 앱스)

com.sec.android.app.samsungapps

 

4) Samsung Smart Switch

com.sec.android.easyMover.Agent

 

5) Android Package Installer

com.google.android.packageinstaller

 

6) Samsung Mate Agent

com.samsung.android.mateagent


출처: https://blog.soobinpark.com/152 [happy 빈이 라이프스토리]




Posted by injunech
2019.06.26 23:43


아래 에러 발생시에 해결 방법

 java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 

Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 


java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:	
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:	
com.android.tools.r8.CompilationFailedException: Compilation failed to complete	
com.android.tools.r8.utils.AbortException: Error: Program type already present: com.android.vending.billing.IInAppBillingService	

 

해결 방법: 

 

multidex용 앱 구성

multidex 구성을 사용하도록 앱 프로젝트를 설정하려면 앱이 지원하는 최소 Android 버전에 따라 앱 프로젝트에서 다음 내용을 변경해야 할 수 있습니다.

minSdkVersion이 21 이상으로 설정되어 있을 경우 아래와 같이 모듈 수준의 build.gradle 파일에서 multiDexEnabled를 true로 설정하기만 하면 됩니다.

android {
    defaultConfig
{
       
...
        minSdkVersion
21
        targetSdkVersion
28
       
multiDexEnabled true
   
}
   
...
}

 

그러나 minSdkVersion이 20 이하로 설정되어 있으면 다음과 같이 multidex 지원 라이브러리를 사용해야 합니다.

  • multidex를 활성화하고 multidex 라이브러리를 종속성으로 추가할 수 있도록 아래와 같이 모듈 수준 build.gradle 파일을 변경합니다.

    android {
        defaultConfig
    {
           
    ...
            minSdkVersion
    15
            targetSdkVersion
    28
           
    multiDexEnabled true
       
    }
       
    ...
    }

    dependencies
    {
     
    compile 'com.android.support:multidex:1.0.3'
    }

     

  • Application 클래스 재정의 여부에 따라 다음 중 하나를 수행합니다.
    • Application 클래스를 재정의하지 않을 경우 매니페스트 파일을 편집하여 <application> 태그에서 android:name을 다음과 같이 설정합니다.

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         
      package="com.example.myapp">
         
      <application
                 
      android:name="android.support.multidex.MultiDexApplication" >
              ...
         
      </application>
      </manifest>

       

    • Application 클래스를 재정의할 경우 다음과 같이 MultiDexApplication을 확장하도록 변경합니다(해당할 경우).

      public class MyApplication extends MultiDexApplication { ... }

       

    • 또는 Application 클래스를 재정의하지만 기본 클래스를 변경할 수 없을 경우 attachBaseContext() 메서드를 재정의하고 MultiDex.install(this)을 호출하여 multidex를 활성화합니다.

      public class MyApplication extends SomeOtherApplication {
       
      @Override
       
      protected void attachBaseContext(Context base) {
           
      super.attachBaseContext(base);
           
      MultiDex.install(this);
       
      }
      }

       

앱을 빌드할 때 Android 빌드 도구는 기본 DEX 파일(classes.dex)과 지원하는 DEX 파일(classes2.dex, classes3.dex 등)을 필요에 따라 구성합니다. 그 후 빌드 시스템이 모든 DEX 파일을 APK로 패키징합니다.

런타임에서 multidex API는 특수 클래스 로더를 사용하여 (기본 classes.dex 파일)에서만 검색하는 대신) 메서드에서 사용할 수 있는 모든 DEX 파일을 검색합니다.

multidex 지원 라이브러리의 제한사항

multidex 지원 라이브러리에는 몇 가지 알려진 제한사항이 있으며, 이 라이브러리를 앱 빌드 구성에 통합할 때 이러한 제한사항을 파악하고 테스트해야 합니다.

  • 시작 중에 기기 데이터 파티션에 DEX 파일을 설치하는 작업은 복잡하며, 보조 DEX 파일이 큰 경우 ANR(Application Not Responding) 오류가 발생할 수 있습니다. 이 경우, ProGuard로 코드 축소를 적용하여 DEX 파일의 크기를 최소화하고 미사용 코드를 제거해야 합니다.
  • Dalvik linearAlloc 버그(Issue 22586) 때문에, Android 4.0(API 레벨 14) 미만의 플랫폼 버전이 실행 중인 기기에서는 multidex를 사용하는 앱이 시작되지 않을 수도 있습니다. API 레벨 14 미만을 대상으로 하는 경우, 시작 시나 특정 클래스 그룹이 로드될 때 앱에 문제가 있을 수 있으므로, 이러한 플랫폼 버전에서 테스트를 수행해야 합니다. 코드 축소는 이러한 잠재적 문제들을 줄이거나 완전히 없앨 수도 있습니다.
  • multidex 구성을 사용하는 앱이 매우 큰 메모리 할당을 요청하는 경우에는, Dalvik linearAlloc 제한(Issue 78035)으로 인해 런타임 중에 이 애플리케이션이 다운될 수도 있습니다. Android 4.0(API 레벨 14)에서는 할당 제한이 늘어났지만, Android 5.0(API 레벨 21) 미만의 Android 버전에서는 앱이 이 제한에 걸릴 수도 있습니다.

참고 : https://developer.android.com/studio/build/multidex.html?hl=ko

 



Posted by injunech
2019.06.26 21:37


 

AdMob 모바일 광고 SDK

 

https://developers.google.com/admob/android/quick-start?hl=ko

 

시작하기  |  Android  |  Google Developers

Android 앱을 제작 중인 Google AdMob 게시자를 위한 모바일 광고 SDK입니다.

developers.google.com

 



Posted by injunech
2019.06.16 22:59


Context is removed when activity called onDestroy().

So when after called context, It goes to error.

So please reference next solution code.

 

# Example Resolution Code

if ( context instanceof Activity ) {
    Activity activity = (Activity)context;
    if ( activity.isFinishing() ) {
        return;
    }
}
Toast.makeText(context, "I'll do things here that depend on my context and views being valid", Toast.LENGTH_SHORT).show();

 

 

#Reference Link

https://stackoverflow.com/questions/7856103/how-can-i-tell-if-my-context-is-still-valid



Posted by injunech
2019.06.15 10:37


Exo 2.0 폰트는 Exo 폰트의 업그레이드 버전으로 
사이버틱하면서 미래적인 느낌을 힘있으면서도 세련되게 표현된 폰트 입니다.
 sf영화에 잘 어울릴것 같은 느낌이죠?

IT 기기에 관한 디자인이나 미래적인 느낌의 이미지와 함께 사용하기에 좋을것 같습니다.
9가지 두께가 준비되어 있고 각 두께마다 기울임글꼴(italic)을 가지고 있어
총 18가지의 다양한 스타일이 준비되어 있습니다.



Exo 2.0 Thin
Exo 2.0 Extra Light
Exo 2.0 Light
Exo 2.0 Regular
Exo 2.0 Medium
Exo 2.0 Semi Bold
Exo 2.0 Bold
Exo 2.0 Extra Bold
Exo 2.0 Black

X

각각의 기울임꼴(ITALIC)



Exo 2.0 폰트 굵기별 미리보기

Exo 2.0 기본 9가지 굵기 Thin~Black 
굵은 글꼴로 갈수록 사이버틱한 느낌이 더해지는 것 같습니다.

Exo 2.0 기울임 글꼴 9가지 굵기 Thin~Black 

Exo 2.0 기본 글꼴 9가지 굵기 Thin~Black  숫자
숫자 폰트 역시 사이버틱,미래적인 느낌으로 
각종 IT관련 디자인에 유용하게 쓰일것 같네요.


Exo 2.0 기울임 글꼴 9가지 굵기 Thin~Black  숫자



Exo 2.0 폰트 무료 다운로드

상업적으로 이용할수 있습니다.
원하시는 분들은 아래 링크를 클릭하시면 다운받을수 있습니다.
http://www.1001fonts.com/exo-2-0-font.html

Exo 2.0 Font Family · 1001 Fonts

www.1001fonts.com

 


주의사항
상업적인 무료 폰트라 하더라도
모든 상업적 부분에서 사용할수 있는 무료 폰트는 아닐 수도 있습니다.
변형금지,재배포금지 등의 조건이 붙어 있을 수도 있고 
사용을 제한하는 특정 매체를 지정하기도 합니다.
상업적으로 사용하시기 전 정확한 라이센스를 꼭 확인 하세요.

 

 

[출처] EXO 2.0 사이버틱한 무료 영문 폰트(상업적이용가능)



Posted by injunech
2019.06.15 10:36


TTF와 OTF 파일 차이

  • TTF : 애플과 마이크로소프트가 함께 만든 폰트 파일 형식. 주로 문서작업에 유용. 비교적 속도가 빠르지만 곡선처리가 미흡.
  • OTF : 마이크로소프트와 어도비가 합작해 만든 폰트 파일 형식. 그래픽 디자인 출력에 유용. 비교적 속도가 느리지만 곡선표현이 섬세. (다만, 오히려 일반 모니터 화면에서는 곡선 구현방식으로 인해 다소 매끄럽지 않게 보일 수 있음)



상업용 무료 폰트를 써야하는 이유

보통 인터넷에 널린 폰트들은 ‘비상업적인’ 행위로 쓸 때만 무료인 폰트다. 즉, 그 폰트를 이용해 창작물을 만들어 인터넷, 출판, 간판, 혹은 그 어떤 곳에 배포할 경우 법무법인의 합의금 요구 전화를 받을 수 있다. 보통 100만 원 이상을 요구한다고 하니, (무죄로 나온 판례가 있다고 할지라도) 상업적으로도 무료 사용 가능한 폰트를 사용하도록 하자. 다만, 아래 폰트들도 상업적 사용 라이센스의 세부사항이 다르니 잘 살펴보고 사용하도록 하자.

 

* 명조체, 고딕체 계열들은 다 비슷비슷하게 생겼기 때문에 다른 페이지에 따로 몰아 넣어두었다. (☞ 바로가기)

 

 

 

윤디자인 시리즈

월인석보체(Wolin.TTF) | 다운로드 | #붓글씨


 

 

 

 

간이벽온방체(Kanibuk.TTF) | 다운로드 | #붓글씨


 

 

 

윤고래체(YunTaemin.ttf) | 다운로드 | #펜글씨


 

 

 

김남윤체(KimNamyun.ttf) | 다운로드 | #펜글씨


 

 

 

이숲체(LeeHyunJi.ttf) | 다운로드 | #펜글씨


 

 

 

한둥근제목 | 다운로드


 

 

 

독도체 | 다운로드 | #붓글씨


 

 

 

법정체 | 다운로드 | 법정스님의 붓글씨에서 따온 서체 #붓글씨


 

 

 

밝은체 | 다운로드 | 약간 해리포터 서체와 비슷한 느낌이다 #펜글씨


 

 

 

예쁜 손글씨 공모(다정) | 다운로드 | #펜글씨


 

 

 

예쁜 손글씨 공모(민준) | 다운로드 | #붓글씨


 

 

 

예쁜 손글씨 공모(세희) | 다운로드 | #펜글씨


 

 

 

예쁜 손글씨 공모(아혜) | 다운로드 | #펜글씨


 

 

 

예쁜 손글씨 공모(지영) | 다운로드 | #펜글씨


 

 

 

 

예쁜 손글씨 공모(지희) | 다운로드 | #펜글씨


 

 

 

예쁜 손글씨 공모(형오) | 다운로드 | #펜글씨


 

 

 

예쁜 손글씨 공모(흥수) | 다운로드 | #펜글씨


 

 윤디자인 시리즈 상세 라이센스


 

 

배달의 민족 시리즈

연성체 | 다운로드 | 옛날 간판 모티브 | #붓글씨


 

 

 

도현체 | 다운로드 | 옛날 간판 모티브


 

 

 

한나는11살체 | 다운로드 | 옛날 간판 모티브


 

 

 

한나체 Air | 다운로드


 

 

 

주아체 | 다운로드 | 옛날 간판 모티브


 

 

 

기랑해랑체 | 다운로드


 배달의 민족 시리즈 라이센스 상세보기


 

 

 

둥근모꼴+Fixedsys | 다운로드 | 옛날 80~90년대 pc통신, 오락기 등에 쓰이던 도트 폰트. 가끔 전광판에서도 쓰인다.


 둥근모꼴+Fixedsys 라이센스 상세보기

 

 

 

제주한라산체 | 다운로드  | #붓글씨


 제주서체 시리즈 라이센스 상세보기


 

 

 

스웨거체 | 다운로드 | 스웨거 로고에 직접 사용되는 폰트


 스웨거체 라이센스 상세보기

 

 

 

네이버 나눔 글꼴 시리즈

나눔바른펜 | 다운로드 | #펜글씨


 

 

 

나눔펜 | 다운로드 | #펜글씨


 

 

 

나눔손글씨 붓체 | 다운로드 | #펜글씨


 네이버 나눔 글꼴 시리즈 라이센스 상세보기


 

 

 

이순신 | 다운로드 | 이순신 난중일기의 한문서체를 모티브 | #붓글씨


 이순신체 시리즈 라이센스 상세보기

 

 

 

도서관체 | 다운로드 | 국립중앙도서관이 로고로 쓰는 폰트.


 도서관체 라이센스 상세보기

 

 

 

고양체 | 다운로드 | #펜글씨


 고양체 라이센스

 

 

 

김제시체 | 다운로드


 김제시체 라이센스 상세보기

 

 

 

만화진흥원체 | 다운로드 | #펜글씨


 만화진흥원체 라이센스 상세보기

 

 

 

포천서체 시리즈

포천 막걸리체 | 다운로드 | #붓글씨


 

 

 

포천 오성과 한음체 | 다운로드


 포천 막걸리체 라이센스 상세보기


 

 

 

부산바다체 | 다운로드 | 

 부산바다체.ttf | 기존 부산체의 문제점을 수정한 폰트(현대카드 폰트와 비슷한 느낌이다. 다만, 현대카드 폰트는 상업적 이용이 불가능하다)


 부산바다체 라이센스 상세보기

 

 

 

EBS 서체 시리즈

EBS 훈민정음 | 다운로드 훈민정음 창제와 더불어 목판으로 제작된 해례본체의 기본형과 주요특징을 유지 | #붓글씨


 

 

 

EBS 훈민정음 새론체 | 다운로드 ‘EBS 훈민정음’의 가독성을 보완하여 현대적으로 개선 | #붓글씨


 

 

 

EBS 주시경체 | 다운로드


 EBS 서체 시리즈 라이센스 상세보기


 

 

 

유토이미지 시리즈

유토이미지체 | 다운로드 | 회원가입 필요


 

 

 

유토이미지 나무체 | 다운로드 | 회원가입 필요


 

 

 

 

유토이미지 손글씨체 | 다운로드 | 회원가입 필요 | #펜글씨


 

 

 

123rf | 다운로드 | 회원가입 필요


 

 

 

제주감귤 | 다운로드 | 회원가입 필요


 

 

 

하르방 | 다운로드 | 회원가입 필요


 

 

 

봉숭아틴트 | 다운로드 | 회원가입 필요


 

 

 

플라워 | 다운로드 | 회원가입 필요


 

 

 

꼬마나비 | 다운로드 | 회원가입 필요


 

 

 

빨간우체통 | 다운로드 | 회원가입 필요


 

 

 

꽃보다 곰팅 | 다운로드 | 회원가입 필요


 

 

 

쇼콜라 라떼 | 다운로드 | 회원가입 필요


 

 

 

뉴욕커 | 다운로드 | 회원가입 필요


 

 

 

차오츄르 | 다운로드 | 회원가입 필요


 

 

 

별나라달님 | 다운로드 | 회원가입 필요


 

 

 

봄이조아 | 다운로드 | 회원가입 필요


 

 

 

미니콩다방 | 다운로드 | 회원가입 필요


 

 

 

리틀베어 | 다운로드 | 회원가입 필요


 유토이미지 시리즈 라이센스 상세보기


 

 

 

야놀자 야체 | 다운로드 | #펜글씨


 야체 라이센스 상세보기

 

 

 

가비아 폰트 시리즈

가비아 솔미체 | 다운로드 | #펜글씨


 

 

 

가비아 봄바람체 | 다운로드 | #펜글씨


 

 

 

가비아 납작블럭체 | 다운로드 | 납작펜으로 쓴듯한 캘리그라피 폰트 #펜글씨


 가비아 폰트 시리즈 라이센스 상세보기


 

 

 

미생체 | 다운로드 | #펜글씨


 미생체 라이센스 상세보기

 

 

 

고도 디자인 시리즈

고도체 | 다운로드


 

 

 

고도 라운디드체 | 다운로드


 

 

 

고도 마음체 | 다운로드


 고도체 라이센스 상세보기


 

 

 

롯데마트 행복체 | 다운로드 | 사업적 사용시 롯데마트의 명시적 승인이 필요함


 롯데마트 서체 시리즈 라이센스 상세보기

 

 

 

더페이스샵 잉크립퀴드체 | 다운로드 | #펜글씨


 잉크립퀴드체 라이센스 상세보기

 

 

 

티몬 글꼴 시리즈

티몬 몬소리체 | 다운로드


 

 

 

티몬 티움체 | 다운로드


 티몬 글꼴 시리즈 라이센스 상세보기


 

 

 

tvN 즐거운 이야기체 | 다운로드 | #펜글씨


 tvN 즐거운 이야기체 라이센스 상세보기

 

 

 

큐트신민상 | 다운로드 | #펜글씨


 큐트신민상 라이센스 상세보기

 

 

 

호국체 | 다운로드


 호국체 라이센스 상세보기

 

 

 

빛고을광주체 | 다운로드


 빛고을광주체 라이센스 상세보기

 

 

 

유미주의적 달필가 시리즈

Monopoly | 다운로드


 

 

 

HS봄바람체 2.0 | 다운로드


 

 

 

HS여름물빛체 | 다운로드


 

 

 

HS가을생각체 | 다운로드


 

 

 

HS겨울눈꽃체 | 다운로드


유미주의적 달필가 라이센스는 각 다운로드 페이지 참고


 

 

 

빙그레 시리즈

빙그레체 | 다운로드


 

 

 

빙그레체2 | 다운로드


 

 

 

빙그레 따옴체 | 다운로드


빙그레 시리즈 라이센스 상세보기


 

 

 

경기도 서체 시리즈

경기천년제목 | 다운로드


 

 

 

경기천년바탕 | 다운로드


 경기도 서체 시리즈 라이센스 상세보기


 

 

 

전주완판본체 각 | 다운로드1 다운로드2


 

 

 

전주완판본체 순 | 다운로드1 다운로드2


 전주완판본체 라이센스 상세보기

 

 

 

안경잡이체 | 다운로드


 안경잡이체 라이센스 상세보기

 

 

 

동그라미재단 서체 | 다운로드


 동그라미재단 서체 라이센스 상세보기

 

 

 

다래손글씨체 | 다운로드


다래손글씨체 라이센스는 다운로드 페이지 참고

 

 

 

Tlab font 시리즈

KCC 김훈체 | 다운로드1 다운로드2 | CC 규정에 따라 반드시 저작자 출처를 밝히고 사용할 것 #펜글씨


 

 

 

KCC 은영체 | 다운로드1 다운로드2 | CC 규정에 따라 반드시 저작자 출처를 밝히고 사용할 것 #펜글씨


 

 

 

Tlab 신영복 | 다운로드1 다운로드2


Tlab 폰트 시리즈 라이센스는 각 다운로드 페이지 참고


 

 

 

태시스템 시리즈

태으뜸 | 다운로드


 

 

 

태조각 | 다운로드


 

 

 

태흘림 | 다운로드 | #필기체


 태시스템 시리즈 라이센스 상세보기


 

 

 

넷마블체 | 다운로드


 

 

 

여기어때.잘난체 | 다운로드


 

 

 

다온 시리즈

다온 한글재미 | 다운로드


 

 

 

다온 한글조아 | 다운로드


 

 

 

다온 시원둥근고딕 | 다운로드


 

 

 

다온 한글소리 | 다운로드


 

 

 

다온 한글나무 | 다운로드


 

 

 

다온 한글내음 | 다운로드


 

 

 

다온 한글다움 | 다운로드


 

 

 

다온 한글튼튼 | 다운로드


 

 

 

다온 한글사랑 | 다운로드


 

 

 

철기시대 | 다운로드


 

 

 

남양주 다산 | 다운로드


 

 

 

GS칼텍스 시리즈

독립서체 윤봉길 | 다운로드


 

 

 

독립서체 윤동주 별헤는 밤 | 다운로드


 

 

 

독립서체 윤동주 서시 | 다운로드


 

 

 

독립서체 백범 김구 | 다운로드


 

 

 

독립서체 한용운 | 다운로드


 GS칼텍스 시리즈 라이센스


 

 

 

> 명조/고딕 계열 무료 폰트 더보기


출처: https://hellchosun.net/



Posted by injunech
2019.06.13 09:52


 Java로 작성할 프로그램을 exe 실행파일로 만들기입니다.

 

실행파일로 만들어주는 프로그램들중 제가 알고있는건 JSmooth, exe4j, Launch4j 3가지 인데요.

 

이 중에서 Launch4j가 작성한 프로그램을 완벽하게 wrapping 해주기 때문에 디코딩될 걱정을 덜어준다는 메리트가 있어서

 해당 프로그램을 사용해볼까 합니다.

 

 

 

1. 다운로드


 

(Lauch4J 공식 홈페이지 : http://launch4j.sourceforge.net/)

 

위의 링크를 통하여 Launch4J의 공식홈페이지로 가서 Download를 클릭합니다.

 

 

 

상단의 화면에서 자신의 OS에 맞게 다운로드를 합니다. (저는 상단의 Download launch4j-3.11-win32.exe 를 선택했습니다.)

 

 

 

2. 설치


 

다운로드가 완료됐습니다. 실행시킵니다.

 

다음!

 

동의함!

 

설치! 를 누르시면 설치가 진행되며 끝납니다.

 

 

 

3. 실행 (exe 만들기)


이전 포스팅에서 만들었던 jar 파일을 쓸 때가 왔습니다.

(참고 포스팅> CMD창에서 실행가능한 jar파일 생성하기 http://jinunthing.tistory.com/6)

 

Launch4j 를 실행시키면 나타나는 화면입니다.

 

 

Basic탭에서

Output file에는 exe파일이 나오게 될 경로를 적어주시면 되고

Jar에는 exe파일로 생성할 jar파일을 선택하시면 됩니다.

 

 

 

다음은 Classpath탭입니다.

 

Custom classpath 체크박스를 활성화 시키시면 작성이 가능합니다.

(저는 이미 전 포스팅때 설정을 해놓았기에 따로 적지 않았습니다.)

 

 

 

Header 탭입니다.

 

작성하신 프로그램이 GUI타입이라면 GUI를 콘솔타입이시라면 Console에 체크를 하셔야

프로그램이 정상적으로 실행됩니다.

 

 

 

JRE 탭입니다.

 

하단의 Min JRE version에 1.6.0 버전을 적었습니다.

해당 칸을 비울 시 exe파일로 변환이 되지 않습니다.

 

 

 

Version Info 탭입니다.

 

Add version information 체크박스를 활성화 시키면 기입이 가능하게 되며

굳이 적지 않으셔도 됩니다.

 

설정을 마치셨다면 왼쪽 위 톱니바퀴 버튼을 클릭합니다.

 

 

 

톱니바퀴 버튼을 누르고 나면 나오는 저장 화면 입니다.

 

지금까지 새롭게 입력한 값을 저장하는 화면입니다.

파일 이름을 적으시고 아무데나 저장하셔도 됩니다.

 

 

 

저장 버튼을 누르고 난 후 Launch4j 화면 하단의 Log창입니다.

 

Successfully created C:\Java\Server.exe 를 보실 수 있습니다.

 

 

 

※만약 실행하는 컴퓨터에 JRE가 설치되어있지 않다면 경고메시지가 뜨며 Java 홈페이지를 띄웁니다!

 

드디어 jar파일로 exe 파일 만들기를 마쳤습니다.

감사합니다^^

 

 

출처 : https://jinunthing.tistory.com/



Posted by injunech
2019.06.11 00:06


[VBS] Space 포함된 파일 실행하기

Space가 포함된 파일을 VBS 의 WScript.Run 을 수행하여 호출하면 정상적으로 동작이 수행되지 않고 에러가 발생한다.

이유는 파일 경로상에 공백이 존재하는 경우 이를 Script에서 인지하지 못하고 에러가 발생한다.

(VBS 문법 자체가 띄어쓰기만으로 매게변수를 구분함)

따라서 쌍따옴표 (Double Quotes) 로 묶어주면 정상적으로 동작이 가능하다.

 

아래 스크립트는 띄어쓰기가 포함된 파일명을 매게변수로 전달받으면

전체 띄어쓰기를 Argument 값에 넣지 못하므로 ::: 이라는 띄어쓰기 대체용 문자를 교체하고

파일 전체 경로 양쪽 끝에 Quote 으로 묶어서 수행해주는 동작을 하는 예제이다.

 

# Example.vbs

Set WshShell = WScript.CreateObject("WScript.Shell")

Dim ArgCount, FilePath, temp
Const Quote = """"

Set Arg = WScript.Arguments
ArgCount = WScript.Arguments.Count

If ArgCount >= 1 Then
	temp = Arg(0)
	FilePath = Replace(temp, ":::"," ")
End If

WshShell.Run(Quote & FilePath & Quote)
WScript.Sleep(2000)

Set WshShell = Nothing

 

 > Example.vbs C:\Users\choi\Desktop\Test 1 2 3\music.mp3

 위와같이 수행할 목적이나 띄어쓰기를 전송시에 Arguement 구분이 힘들기 때문에 아래와 같이 Space를 ::: 으로 변경해주는 사전 동작이 필요하다. (만약 띄어쓰기 포함된 Arguement 만으로 수행하려면 이와 다른 방안으로 구현 필요)

 > Example.vbs C:\Users\choi\Desktop\Test:::1:::2:::3\music.mp3

 위와 같이 변경해서 스크립트 수행시 잘 동작 한다.

 

'Computer > VBS (Visual Basic Script)' 카테고리의 다른 글

[VBS] Space 포함된 파일 실행하기  (0) 2019.06.11
[VBS] WshShell.SendKeys  (0) 2019.05.23
[VBS] Process Find and Activate  (0) 2019.05.23
VB스크립트란 (VBS란)  (0) 2019.05.22


Posted by injunech
2019.06.09 13:07


File 클래스 정리

java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다.

 

파일을 나타내는 객체를 생성하려면 다음과 같은 File 클래스의 생성자 함수를 이용한다.

 

* File 클래스의 생성자

File 클래스의 생성자 

 설명

File(File parent, String Child) 

 parent 객체 폴더의 child 라는 파일에 대한 File 객체를 생성한다.

File(String pathname) 

 pathname에 해당되는 파일의 File 객체를 생성한다. 

File(String parent, String, child) 

 parent 폴더 경로의 child라는 파일에 대한 File 객체를 생성한다.

File(URI uri)

 file uri 경로에 대한 파일의 File 객체를 생성한다. 

 

* File 클래스의 메소드

File 클래스의 메소드 

설명 

 File getAbsoluteFile()

 파일의 절대 경로를 넘겨준다. 

 String getAbsolutePath() 

 파일의 절대 경로를 문자열로 넘겨준다. 

 File getCanonicalFile() 

 파일의 Canonical 경로를 넘겨준다. 

 String getCanonicalPath()

 파일의 Canonical 경로를 문자열로 넘겨준다. 

 String getName()

 파일이나 폴더의 이름을 넘겨준다. 

 String getParent() 

 부모 경로에 대한 경로명을 문자열로 넘겨준다. 

 File getParentFile()

 부모 폴더를 File의 형태로 리턴한다. 

 String getPath() 

 파일의 경로를 문자열의 형태로 리턴한다. 

 long getTotalSpace() 

 하드디스크의 총 용량을 리턴한다.

 long getUsableSpace()

 하드디스크의 사용 가능한 용량을 리턴한다.

 long getFreeSpace()   하드디스크의 남은 공간을 리턴한다.

 int hashCode()

 hash code를 반환한다. 

 long lastModified() 

 해당 경로 파일의 최종 수정 일자를 반환한다. 

 long length()

 해당 경로 파일의 길이를 반환한다. 

 Path toPath()

 java.nio.file.Path 객체로 반환한다. 

 URI toURI() 

 URI 형태로 파일 경로를 반환한다. 

 File[] listRoots()

 하드디스크의 루트 경로를 반환한다. 

 String[] list() 

 경로의 파일들과 폴더를 문자열 배열로 반환한다. 

 String[] list(FilenameFilter filter) 

 filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다. 

 File[] listFiles() 

 해당 경로의 파일들과 폴더의 파일을 배열로 반환한다. 

 File[] listFiles(FileFilter filter) 

 filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. 

 File[] listFiles(FilenameFilter filter)

 filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. 

 

* File 생성/수정/삭제 메소드

File 생성 수정 삭제 메소드 

 설명

 boolean createNewFile()

 주어진 이름의 파일이 없으면 새로 생성한다.

 static File createTempFile(String prefix, String suffix) 

 default temporary-file 디렉토리에 파일 이름에 prefix와 suffix를 붙여  임시파일을 생성한다.

 static File createTempFile(String prefix, String suffix, File directory) 

 새로운 임시파일을 파일 이름에 prefix와 suffix를 붙여 directory 폴더에 생성한다.

 boolean delete()

 파일이나 폴더를 삭제한다. 단, 폴더가 비어있지 않으면 삭제할 수 없다. 

 void deleteOnExit() 

 자바가상머신이 끝날 때 파일을 삭제한다. 

 boolean mkdir()

 해당 경로에 폴더를 만든다. 

 boolean mkdirs() 

 존재하지 않는 부모 폴더까지 포함하여 해당 경로에 폴더를 만든다.

 boolean renameTo(File dest) 

 dest 로 File 이름을 변경한다. 

 

* File 체크 메소드

 File 체크 메소드 

 설명 

  boolean exists()

 파일의 존재 여부를 리턴한다. 

  boolean isAbsolute() 

 해당 경로가 절대경로인지 여부를 리턴한다.

  boolean isDirectory() 

 해당 경로가 폴더인지 여부를 리턴한다. 

  boolean isFile() 

 해당 경로가 일반 file 인지 여부를 리턴한다.

  boolean isHidden()

 해당 경로가 숨김 file 인지 여부를 리턴한다.

 

* File 권한 메소드

File 클래스 권한 관련 메소드 

설명 

 boolean canExecute()

 파일을 실행할 수 있는지 여부를 리턴한다.

 boolean canRead() 

 파일을 읽을 수 있는지 여부를 리턴한다. 

 boolean canWrite()

 파일을 쓸 수 있는지 여부를 리턴한다. 

 boolean setExecutable(boolean executable)

 파일 소유자의 실행 권한을 설정한다.

 boolean setExecutable(boolean executable, boolean ownerOnly) 

 파일의 실행 권한을 소유자 또는 모두에 대해 설정한다. 

 boolean setReadable(boolean readable) 

 파일의 소유자의 읽기 권한을 설정한다. 

 boolean setReadable(boolean readable, boolean ownerOnly)

 파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다. 

 boolean setReadOnly()

 파일을 읽기 전용으로 변경한다. 

 boolean setWritable(boolean writable)

 파일의 소유자의 쓰기 권한을 설정한다. 

 boolean setWritable(boolean writable boolean ownerOnly) 

 파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다. 

 

# 예제1 - 파일정보 가져오

import java.io.File;
import java.io.IOException;


public class FileTest {

    public static void main(String[] args) {
        
        // FileTest project 폴더에서 filefolder	est.txt  파일을 객체로 생성한다.
        // 는 이스케이프 문자로 인식되므로 \\ -> \ 로 사용한다.
        File file = new File("filefolder\\test.txt");

        // 경로에 파일이 존재하면
        if(file.exists()){
            
            try{
                
                System.out.println("getName: " + file.getName());  // 파일 이름 출력
                System.out.println("getPath: " + file.getPath());    // 파일 경로 출력 
                // 파일 절대 경로 출력              
                System.out.println("getAbsolutePath : "+ file.getAbsolutePath());  
                // 파일 정규 경로 출력
                System.out.println("getCanonicalPath : "+ file.getCanonicalPath()); 
                // 상위 폴더 출력
                System.out.println("getParent : " + file.getParent());   
                
           // 파일의 쓰기/읽기 권한 체크
          if(file.canWrite()) System.out.println(file.getName() + "은 쓸 수 있습니다.");
          if(file.canRead()) System.out.println(file.getName()+ "은 읽을 수 있습니다.");
                
                // 객체의 파일, 폴더 여부 체크
                if(file.isFile()){
                    System.out.println(file.getName() + "은 파일입니다.");
                }else if(file.isDirectory()){
                    System.out.println(file.getName() + "은 폴더입니다.");
                }else{
                    System.out.println(file.getName() + "은 파일도 폴더도 아닙니다.");
                }
                
          // 파일 내용 길이 출력
          System.out.println(file.getName() + "의 길이는 "+ file.length() + " 입니다.");
            
            }catch(IOException e){
                System.err.println(e);
            }
        
        }else{
            System.out.println("파일을 찾을 수 없습니다. ");
        }
    }
}

 

 

# 예제2 - 파일 목록 출력 예제

import java.io.File;


public class FileTest2 {

    public static void main(String[] args) {
        
        // 프로젝트 현재 폴더를 객체로 생성한다.
        File file = new File(".");
        
        // file이 존재하고 폴더일 경우
        if(file.exists() && file.isDirectory()){
            
            // 폴더의 파일/폴더 목록을 문자열 배열로 반환
            String[] fList = file.list();
            
            // 출력
            for(int i=0; i<fList.length; i++)
                System.out.println(fList[i]);
        
        }else{
            System.out.println("해당 경로는 폴더가 아닙니다.");
        }
    }
}

 

#예제3 - 하드디스크 정보 출력

import java.io.File;


public class FileTest3 {
    
    public static void main(String arg[]){
        
        String drive;
        double totalSpace, usedSpace, freeSpace, usableSpace;
        
        // 하드디스크의 루트 드라이버들을 배열로 반환한다.
        File[] roots = File.listRoots();
        
        for(File root : roots){
            
            // 루트 드라이버의 절대 경로
            drive = root.getAbsolutePath();
            
            // 하드디스크 전체 용량
            totalSpace = root.getTotalSpace() / Math.pow(1024, 3);
            // 사용가능한 디스크 용량
            usableSpace = root.getUsableSpace() / Math.pow(1024,3);
            // 여유 디스크 용량
            freeSpace = root.getFreeSpace() / Math.pow(1024,3);
            // 사용한 디스크 용량
            usedSpace = totalSpace - usableSpace;
            
            System.out.println("하드 디스크 드라이버 : " + drive);
            System.out.println("총 디스크 용량 : " + totalSpace + "GB");
            System.out.println("사용 가능한 디스크 용량 : " + usableSpace + "GB");
            System.out.println("여유 디스크 용량 : " + freeSpace + "GB");
            System.out.println("사용한 디스크 용량 : " + usedSpace+"GB");
            System.out.println();
            
        }
    }   
}

File[] roots = File.listRoots(); 는 하드디스크의 루트 드라이버를 배열로 반환한다.

- getUsableSpace()와 getFreeSpace() 는 결과가 같다.

- 사용한 디스크 용량은 총 용량에서 사용가능한 용량을 뺀 값이다.

- Math.pow(1024,3) 은 1024를 3승한 값이다.


출처: https://hyeonstorage.tistory.com/233 [개발이 하고 싶어요]

 



Posted by injunech
2019.06.06 23:13


 

[JAVA] getProperty()으로 시스템속성 구하기 (OS종류, 사용자ID 등)

자바로, 현재 운영체제 종류 등의 각종 시스템 속성을 구하는 방법입니다. getProperty() 메소드(함수)에, 구하고자 하는 속성의 이름을 문자열로서 지정하면 됩니다.

# 간단한 사용 예제

public class Foo {
  public static void main(String[] args) {

    System.out.println("운영체제 종류: " + System.getProperty("os.name") );

    System.out.println("자바 가상머신 버전: " + System.getProperty("java.vm.version") );

    System.out.println("클래스 버전: " + System.getProperty("java.class.version") );

    System.out.println("사용자 로그인ID: " + System.getProperty("user.name") );

  }
}

# 결과화면

운영체제 종류: Windows 2000
자바 가상머신 버전: 1.5.0_08-b03
클래스 버전: 49.0
사용자 로그인ID: Administrator

 

관련 API 함수 목록

 



Posted by injunech