1. IntelliJ 압축을 다운로드 한다.
링크:IntelliJ IDEA Community Edition 2021.1.3 - Windows ZIP Archive (zip)

2. Plugin > lombok 을 lombok.zip 으로 압축한다.

3. Android Studio Bumblebee 에서 Settings 로 진입(ctrl+alt+s)

4. Install 옆의 추가 메뉴(톱니바퀴모양)에서 Install Plugin from Disk... 를 선택한 다음 위에서 압축해 둔 lombok.zip 을 선택하여 설치한다.

5. Android Studio 를 재시작 한다.
(*. 재시작 후에도 되지 않는 경우 위 3, 4번을 한번 더 수행해 본다.)

 

File => Settings 진입

 - 'Build, Execution, eployment' 메뉴 => 'Build Tools' 확장 -> 'Gradle' 설정 화면에서 Gradle projects 항목에서 

'Gradle JDK' 항목을  11로 맞추어 준다.

 

AndroidX enable시켜주지 않아서 발생

Gradle Scripts - gradle.properties파일에서 아래 내용 추가

android.useAndroidX=true
android.enableJetifier=true

 

com.android.builder.errors.EvalIssueException: This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry.

- density-independent pixel 

- pixels = dips * (density / 160)

. 240dip : 1dip == 1.5pixel

Android Studio 로 개발 되지 않은 좀 예전의 Eclipse 로 만들어진 android project 에서 google play service 를 update 해야 하는 경우, SDK 폴더를 뒤져도 찾을 수 없어서 구글링 중 관련 프로젝트를 버전 별로 다운 받을 수 있는 곳이 있어 링크를 저장해 둔다.



라이브러리 버전만 바꿔야 하는 경우에는 굳이 eclipse(ADT)로 되어 있는 프로젝트를 Android Studio 로 import 하고 gradle 관련 작업도 하지 않아도 될듯 하다.



Error generating final archive: Debug certificate expired on (날짜가 찍힘)

 

-----------------------------------------------------------

 

정상적으로 Android application 을 추가하고, 별다른 작업을 하지 않은 경우에도 빌드가 되지 않으며, 위와 같은 에러 메시지가 뜨는 것을 볼 수가 있다.

 

본 문제는 Debug Certificate 가 만료되어 발생하는 문제이다.

해당 Certificate 는 만들어진 후 1년이 지나면 Expire 가 된다.

해결 방법은 갱신을 하면 되는 문제로서 갱신 방법은 만료된 debug.keystore 파일을 삭제하면 된다.

 

메뉴의 Window ==> Preferences ==> Android ==> Build 내 "Default debug keystore" 에서 확인이 가능하다.

path 의 한글 문제를 해결하기 위해서 실제 <.android> 폴더를 옮겼을 경우에는 실제 사용하는 폴더에서도 keystore 파일을 삭제해야 한다.

확인 해보면 에러에 뜨는 날짜와 keystore 파일의 생성일이 동일하게 보인다.


 




 

 

만약, 삭제 후에도 동일한 현상이 계속 나타나는 경우 clean 후 build 해보길 바란다.

메뉴의 Project ==> Clean 에서 해당 프로젝트에 대해서 clean 후 build 하게되면 정상동작함을 확인 할 수 있다.

 

 

 

1. 커맨드창을 오픈한다.

2. 다시 cmd /u 입력
3. chcp 65001
4. 콘솔창의 속성에서 폰트,를 Lucida Console 로 변경해준다.
5. adb logcat


콘솔창에서 한글이 출력되는 것을 확인 할 수 있다.

 


 
 
 
 

- 안드로이드 어플리케이션에서 배터리 상태를 체크하기 위한 방법 -

 

BatteryManager class 사용하여 구현

(developer site link)

http://developer.android.com/reference/android/os/BatteryManager.html

 

방법은 구현하고자 하는 app. 에 BroadcastReceiver 를 추가하여, 'ACTION_BATTERY_CHANGED' 가 올때, 필요한 값들을 체크하여 사용하면 된다.

(ACTION_BATTERY_CHANGED 관련 developer site link)

http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED

 

아래 샘플코드에서는 연결상태, 배터리상태, 배터리레벨 에 대해서 확인이 가능하도록 만들었다.

로그상 값만을 간단히 확인 가능하도록 만들었으며, 확장을 위해 context 등 불필요 코드가 몇가지 있으나, 실행에는 무관하다.

 

// 추가 : BroadcastReceiver 의 용법에 대해 주의해서 봐둔다.

 

UI 는 없으며, 아래 같이 로그에서만 확인이 가능함을 밝힌다.

 

 

--------------------------------------------------------------------------------------------------------------------------

 

 

 

Colorized version of the entered code

package com.BatteryChecker;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class BatteryCheckMain extends Activity
{
 private static final String tag = "BatteryChecker";
 private static final String filetag = "<BatteryCheckMain> / ";
 
 private Context context;
 private BroadcastReceiver mBatteryBroadcastReceiver;
 
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  
  context = this;
  
  initBroadcastReceiver(context);
  registerBatteryReceiver(context);
  
  Log.i(tag, filetag + "PLUGED:" + BatteryManager.EXTRA_PLUGGED + "/LEVEL:" + BatteryManager.EXTRA_LEVEL
    + "/STATUS:" + BatteryManager.EXTRA_STATUS);
  
  setContentView(R.layout.main);
 }
 

 @Override
 protected void onDestroy()
 {
  // TODO Auto-generated method stub
  super.onDestroy();
  Log.i(tag, filetag + "onDeatroy()");
  unregisterReceiver(mBatteryBroadcastReceiver);
 }


 @Override
 protected void onPause()
 {
  // TODO Auto-generated method stub
  super.onPause();
 }


 @Override
 protected void onResume()
 {
  // TODO Auto-generated method stub
  super.onResume();
 }





 
 // LOCAL FUNCTION -----------------------------------------------------------------------------
 
 
 // make battery broadcast receiver
 boolean initBroadcastReceiver(Context context)
 {
  mBatteryBroadcastReceiver = new BroadcastReceiver()
  {

   @Override
   public void onReceive(Context context, Intent intent)
   {
    
    final String action = intent.getAction();
    
    Log.i(tag, filetag + "mBatteryBroadcastReceiver - onReceive()/action:" +action);
    
    if(Intent.ACTION_BATTERY_CHANGED.equals(action))
    {
     Log.i(tag, filetag + "PLUG:" + intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)
       + " / STATUS:" + intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)
       + " / LEVEL:" + intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0));
    }
   }

   @Override
   public IBinder peekService(Context myContext, Intent service)
   {
    // TODO Auto-generated method stub
    return super.peekService(myContext, service);
   }
   
  };
  return true;
 } //initBroadcastReceiver
 
 boolean registerBatteryReceiver(Context context)
 {
  Log.i(tag, filetag + "registerBatteryReceiver()");
  
  IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  filter.addAction(Intent.ACTION_BATTERY_LOW);
  registerReceiver(mBatteryBroadcastReceiver, filter);
  return true;
 }
}


 

 

+ Recent posts