Android 안드로이드2014. 11. 22. 10:27

복사 붙여넣기

카피앤드파스트

평소 붙여넣기 빠르게 하고자 여기에 만들어서 등록.



ClipboardManager mClipboardManager;
mClipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);


String getTextFromClipboard(){
if(IsDebugging) Log.d(TAG, "getTextFromClipboard()");

String strPasted = null;
ClipData clipData = mClipboardManager.getPrimaryClip();

if(!(mClipboardManager.hasPrimaryClip())){
Toast.makeText(this, "hasPrimaryClip()", Toast.LENGTH_SHORT).show();

} else if (!(mClipboardManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))) {
Toast.makeText(this, "pcd()", Toast.LENGTH_SHORT).show();

ClipData.Item item = clipData.getItemAt(0);
strPasted = item.getText().toString();
} else {
Toast.makeText(this, "pt()", Toast.LENGTH_SHORT).show();

ClipData.Item item = clipData.getItemAt(0);
strPasted = item.getText().toString();
}

return strPasted;
}



CPCEditText et = (CPCEditText) findViewById(R.id.et_sourcetext);
et.setText(mSourceText);
et.setOnCCPListener(new CPCEditText.OnCCPListener() {
@Override
public void onCut() {
if(IsDebugging) Log.d(TAG, "onCut()");
if(IsDebugging) Toast.makeText(mStaticContext, "onCut()", Toast.LENGTH_SHORT).show();
}

@Override
public void onCopy() {
if(IsDebugging) Log.d(TAG, "onCopy()");
if(IsDebugging) Toast.makeText(mStaticContext, "onCopy()", Toast.LENGTH_SHORT).show();
}

@Override
public void onPaste() {
if(IsDebugging) Log.d(TAG, "onPaste()");
if(IsDebugging) Toast.makeText(mStaticContext, "onPaste()", Toast.LENGTH_SHORT).show();

String strPasted = getTextFromClipboard();

insertSomeText(strPasted);
}
});



Posted by 코드버무려
Android 안드로이드2014. 11. 22. 10:10

안드로이드 스튜디오

안드로이드스튜디오

안드로이드스투디오

안드로이드스튜이도

android studio

androidstudio


안드로이드 스트디오를 깔고 실행해 본 느낌은 좋다라는 인상이다. 실행해서 키보드 타입이 가능한 에디터 창이 뜰 때 까지 시간이 좀 오래걸렸다. 이 부분에서는 이클립스만큼 빠르지 못했고 최적화가 더 필요해 보인다.


안드로이드 스튜디오에 물리디바이스를 물렸다. 프로젝트 템플릿으로 제공하는 몇 가지를 만들고 스마트폰에 올렸다. 이상없이 작동했다.


AVD를 켜고 컴파일해서 실행하니 에러가 났다. 런타임오류다. AVD에 올려놓은 기존 앱을 실행했더니 실행오류가 발생했다. 이클립스에서 만들어 놓은 AVD를 android studio에 열어서 생기는 문제 같다. 피씨를 끄고 이클립스를 통해서 AVD를 돌리니 잘 돌아갔다.


AVD는 안드로이드 스트디오에 맞는 것으로 새로 만들어야 하나보다!!!


구글링으로 정말 그런 것인지 찾아보지 않았으나 지금으로서는 여기까지가 추측할 수 있는 단계다. 안드로이드스투디오 비하여 이클립스는 속도가 빠르고 가벼웠음을 새삼 발견했다. 그러나 eclipse에서는 잔가지 오류를 익숙하지 못하면 접할 수 있다. 그 내용은 여기서 ( http://santerminal.tistory.com/entry/sdfa-1 ) 볼 수 있다. 조금만 손을 더 보면 될 것 같은데 Google는 이클립스와 ANT 개선을 중지하고 Android Studio와 Gradle로 간다고 한다.


지금 안드로이드 스튜디오 모습은 내일 언제가는 더 가볍고 빨라질 것이다. 구글 힘이 밀고있으니까.

Posted by 코드버무려
Android 안드로이드2014. 11. 21. 07:50


역코드난독화 

코드 난독화 

proguard 

역난독화 

dex2jar Jad 

자바디컴파일러 

classes.dex Dalvik 

DeObfuscate 

Obfuscate  

Obfuscation  

DeObfuscation



안드로이드 앱을 작성하고 업로드하면서 이 번에 코드 난독화에 대하여 생각해보았다.


3개월 이상 시간이 흘렀다. 개괄적인 형태로 살이 붙지 않는 앱이라 넓게 내놓기에는 다듬어야 할 부분이 많지만 기본은 다 갖춘 앱이다. 지금까지는 코드 난독화가 불필요했지만 이제는 심도있게 생각해볼 때 이다. 그래서 만들어 놓은 apk파일을 역코드난독화 했더니 일부 에러를 빼고는 그대로 나왔다. 역난독화를 처음 시도해보는 것이라 에러가 나왔으나 경험자가 했으면 100% 나왔으리. 이클립스에 안드로이드 개발툴 ADT가 제공하는기본적인 proguard도 적용하지 않았다. 지금부터는 적용하고 업하는 쪽으로 정책을 잡았다.


만들어놓은 코드를 난독화 해제하는 과정이다. 다음에 반복할 일을 간단히 정리하였다.



dex2jar 

: Dalvik에서 작동하는 classes.dex 파일을 Class압축파일을 포함한 jar 파일로 변환

: https://code.google.com/p/dex2jar/downloads/list 



Jad : 자바디컴파일러 

http://varaneckas.com/jad/



디컴파일할 apk파일의 확장자를 zip으로 바꾸고 압축해제해서 classes.dex 파일을 얻는다.



콘솔 창에 d2j-dex2jar.bat classes.dex를 실행

또는 

콘솔 창에 dex2jar.bat classes.dex를 실행

같은 폴더에 classes-dex2jar.jar 파일이 생성된다.

# d2j-dex2jar.bat과 dex2jar.bat의 결과는 비슷하다. 사용해보고 에러가 적은 쪽을 택하자.




class파일을 사람이 읽고 이해할 수 있는 java 텍스트 파일로 만들자.

콘솔 창에 jad -o -sjava MainActivity.class를 실행



MainActivity.java가 생긴다. 텍스트 편집기로 열어서 읽고 편집할 수 있다.

Posted by 코드버무려
카테고리 없음2014. 11. 14. 11:54













SurfaceView와 그 부속 함수 사용 정리가 필요하다.

이것 저것 테스트한 코드를 쌓았다.

public class MySurfaceVwActy extends Activity { private static final String TAG = MySurfaceVwActy.class.getSimpleName(); SurfaceView surfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); //setContentView 앞|뒤에 오면? 에러!! // setContentView(R.layout.activity_my_surface_view); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); TestView surfaceEvent = new TestView(getApplicationContext()); // TestView surfaceEvent = new TestView(MyTestViewActy.this); // surfaceEvent.setZOrderOnTop(true);     // surfaceEvent.getHolder().setFormat(PixelFormat.TRANSPARENT); // addContentView(surfaceEvent, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); setContentView(surfaceEvent); Button buttonStartCameraPreview = (Button)findViewById(R.id.startcamerapreview); Button buttonStopCameraPreview = (Button)findViewById(R.id.stopcamerapreview); Log.d(TAG, "onCreate() end"); } } class TestView extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder mHolder; public TestView(Context context) { super(context); Log.d(TAG_sfvw, "Surface() "); mHolder = getHolder(); mHolder.addCallback(this); }

@Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceCreated() "); android.graphics.Canvas cnvs = null; try { cnvs = getHolder().lockCanvas(null); synchronized(getHolder()) { android.graphics.Paint pnt = new android.graphics.Paint(); pnt.setColor(android.graphics.Color.GREEN); cnvs.drawCircle(100, 100, 50, pnt); } } finally { if(cnvs != null) getHolder().unlockCanvasAndPost(cnvs); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG_sfvw, "surfaceChanged() "); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceDestroyed() "); } }






Posted by 코드버무려
Android 안드로이드2014. 10. 25. 23:07

에디트텍스트에 텍스트를 붙여넣기

EditText지정한 위치에 글자를 붙여넣기 가능

텍스트에서 특정한 글자가 선택되어도 붙여넣기할 수 있다.


private void insertSomeText(String st){
if(IsDebugging) Log.d(TAG, "insertSomeText()");

EditText et = (EditText)findViewById(R.id.et_sourcetext);
/** http://stackoverflow.com/questions/3609174/android-insert-text-into-edittext-at-current-position */
int start = Math.max(et.getSelectionStart(), 0);
int end = Math.max(et.getSelectionEnd(), 0);
et.getText().replace(Math.min(start, end), Math.max(start, end), st);
}








Posted by 코드버무려