본문 바로가기

Android

안드로이드 앱 난독화 도구 ‘안드로이드엔브(AndroidEnv)’ 안드로이드용 앱을 개발할 때 보통 Java를 사용한다. Java는 원래부터 디컴파일이 가능한 언어이다. C와 같은 다른 언어는 컴파일하면, 디컴파일하여 소스코드를 알아낼 수 없다. 따라서 C로 개발된 소프트웨어는 컴파일하여 exe, dll 형태로 배포되어도 소스코드 유출을 걱정할필요가 없다. 하지만 Java는 이와 반대이다. Java는 컴파일해도 기계코드가 아닌 중간 형태의 바이트코드(Byte code)이기 때문에 이것을디컴파일하면 쉽게 소스코드를 알아낼 수 있다. 안드로이드 앱도 마찬가지 보안 문제가 생겨난다. 역시 java로 개발되기 때문이다. 그래서 보통 안드로이드 앱 개발자들은 Proguard라고하는 오픈소스 난독화 도구를 사용한다. Proguard도 계속해서 업그레이드되고는 있지만 보안 도구라고.. 더보기
안드로이드 구글맵 안드로이드 구글맵이 v2로 변경되면서 기존 mapkey 가져오는 부분이 없어지고 apikey로 통합해서 서비스 되는것을 알게 되었다. 물른 바뀐지는 좀됐지만 이제 알게 되었으니...;;; 맵을 사용하기 위해서는 google play service 를 SDK Manager에서 받아야 한다. 그리고 저장한 SDK 폴더에서 extra -> google 에 가보면 service 폴더가 만들어져 있고 라이브버리 파일을 복사해서 프로젝트에 추가하면 사용준비가 완료된다. 이걸 보면서 geofences라는 것도 알게 됐는데 설정해놓은 좌표 주변에 가면 홍보나 쿠폰 발행 같은 행위를 하기 위해 만든 것 같다. 재밌는 기능! ㅋ 언제 한번 해봐야지~~ 참조 : http://blog.hansune.com/466, http:.. 더보기
안드로이드/Android 픽셀(pixel), 디피(dp) 계산법 ~! 1) pixel = dp * (density / 160) 2) dp = px * (160 / density) 더보기
안드로이드/Android 해상도 관련 API 모음 (단말 가로/세로 해상도, Density, dp -> px, px-> dp) /** * 단말기 density 구함 * @param con * 사용법 : if(getDensity(context) == 2f && (float으로 형변환해서 사용 해야함.) */public static float getDensity(Context con) { float density = 0.0f; density = con.getResources().getDisplayMetrics().density; Log.d(TAG, "density = " + density); return density;} /** * px을 dp로 변환 * @param con * @param px * @return dp */public static int getPxToDp(Context con, int px) { float densi.. 더보기
[안드로이드] LayoutInflater inflate 사용하기 1. LayoutInflater ? 안드로이드에서 어떤 뷰가 화면에 보일려면 반드시 객체화(인스턴스) 되어 있어야 하는데요. 안드로이드에서 뷰 객체를 생성하는 과정은 크게 2가지가 있습니다. 직접 코드상에서 아래와 같이 생성하는 방법이 있고 Button b = new Button(this) // this 는 Context 를 의미 그리고 xml 파일을 통해서 객체를 생성하는 방법이 있습니다. 인플레이트라는 것은 xml 파일을 통해서 객체화를 시키는 것을 말합니다. 2. LayoutInflater 사용시 주의 사항 LayoutInflater inflate 사용할때 parameter의 의미에 주의해서 처리해야합니다. String service = Context.LAYOUT_INFLATER_SERVICE; L.. 더보기
Android: Intent 활용 사례 안드로이드 Intent에서 앱을 호출하는 방법을 정리 합니다. 연락처 Intent 연락처 조회 intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId()))); startActivity(intent); 연락처 등록 intent = new Intent(Intent.ACTION_INSERT, Uri.parse("content://contacts/people")); startActivity(intent); 연락처 수정 intent = new Intent(Intent.ACTION_EDIT, Uri.parse("content://contacts/people/" + Strin.. 더보기
안드로이드 표준코딩스타일 가이드 20개 정도 규칙이 있으며 출처는 source.android.com에서 좀 더 자세한 내용을 볼 수 있다. build된 sdk에는 없지만 sdk 소스를 다운받으면 이클립스용 코딩 포맷과 import순서가 정보가 적힌 xml파일도 같이 받을 수 있는데, 이 글에 첨부했다. android-formatting.xml은 "Window › Preferences › Java › Code Style > Formatter 에 import하고, android.importorder "Organize Imports에 import하면 Shift+command+F로 자동포멧정리 기능을 안드로이드에 맞게 사용할 수 있다. Java Language Rules Exceptions: 예외 무시하지말고 처리하기. Exceptions: .. 더보기
파일명으로 리소스 가져오기 Bitmap testImg = BitmapFactory.decodeResource(res, R.drawable.testRes0); 이런식으로 파일 ID로 리소스를 읽어와 사용하고 있었습니다. 그런데 리소스가 많을 경우 testImg = new Bitmap[10]; for(int i = 0; i < 10; i++) testImg[i] = BitmapFactory.decodeResource(res, R.drawable.testRes0+i); 이런식으로 ID로 연산을 하여 읽어오다보면 ID가 꼬이는 경우 문제가 발생할 여지가 많더군요. 파일명이 순차적으로 되어 있다고 하더라도 이런식의 접근은 안좋은 방법인것으로 알고 있습니다. 이럴경우 int tmpID; testImg = new Bitmap[10]; for(.. 더보기
구글 음성검색을 텍스트화 시키기 public class Speech extends Activity implements OnClickListener { private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; private ListView mList; TextView text1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button speakButton = (Button) findViewById(R.id.btn_speak); text1 = (TextView) findViewById(R.id.text.. 더보기
안드로이드 android javascript 연동하기 1. Android에서 Javascript함수 호출하기 webView.loadUrl("javascript:callJS('Hello from Android')"); 다음과 같은 방식으로 javascript:methodname 과 같은 문자열을 넣어 WebView.loadUrl 메소드의 인자로 호출한다. 2. Javascript에서 Android 호출하기 /** Object exposed to JavaScript */ private class AndroidBridge { public void callAndroid(final String arg) { // must be final handler.post(new Runnable() { public void run() { Log.d(TAG, "callAndroid.. 더보기