Android 안드로이드2015. 2. 18. 09:59












서피스 뷰를 테스트한다.

화면을 외쫀에서 우로 녹색원이 가로지른다.

화면 오른쪽을 빠져나가고 바로 왼쪽에서 시작한다.

일시정지로 화면 밖을 나갈경우 복귀 후 마지막위치에서 시작한다

왼쪽에서 우로 반복한다.

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()는 setContentView() 앞에 놓인다 // requestWindowFeature(Window.FEATURE_NO_TITLE); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "onCreate()"); TestView surfaceEvent = new TestView(getApplicationContext()); setContentView(surfaceEvent); Log.d(TAG, "onCreate() out"); } } class TestView extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder mHolder; public TstThread mThread; Context mContext; int mStrX, mStrY; float mRadius; public TestView(Context context) { super(context); Log.d(TAG_sfvw, "__TestView() "); mContext = context; mHolder = getHolder(); mHolder.addCallback(this); mStrX = 0; mStrY = 150; mRadius = 50.0f; } @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "__surfaceCreated() "); mThread = new TstThread(mHolder, mContext, mStrX); mThread.setRunning(true); mThread.start(); Log.d(TAG_sfvw, "__surfaceCreated() out"); } @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() "); boolean retry = true; mThread.setRunning(false); while (retry) { try { mThread.join(); retry = false; } catch (InterruptedException e) { Log.d(TAG_sfvw, "catch(InterruptedException e) & repeat while(done){8888888}"); e.printStackTrace(); } } Log.d(TAG_sfvw, "__surfaceDestroyed() end"); } public class TstThread extends Thread { SurfaceHolder mHolder; boolean bIsRunning; int mWidth; int mHeight; public TstThread(SurfaceHolder holder, Context context, int mStrX) { Log.d(TAG_sfvw, "ImageThread() "); this.mHolder = holder; DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mWidth = metrics.widthPixels; mHeight = metrics.heightPixels; } public void setRunning(boolean run) { Log.d(TAG_sfvw, "setRunning(" +run+ ")"); this.bIsRunning = run; } @Override public void run() { Log.d(TAG_sfvw, "__run() "); while(bIsRunning) { android.graphics.Canvas cnvs = null; try { cnvs = getHolder().lockCanvas(null); synchronized(mHolder) { android.graphics.Paint pnt = new android.graphics.Paint(); //이전화면을 지워 이돟효과를 마련 pnt.setColor(android.graphics.Color.BLACK); cnvs.drawRect(new Rect(0,0, mWidth, mHeight), pnt); mStrX++; if(mStrX > mWidth+mRadius+2) mStrX= 0; //화면을 빠져나가자마자 왼쪽에서 pnt.setColor(android.graphics.Color.GREEN); cnvs.drawCircle(mStrX, mStrY, mRadius, pnt); } } finally { if(cnvs != null) getHolder().unlockCanvasAndPost(cnvs); } } //while(true) Log.d(TAG_sfvw, "__run() end"); } } }



Posted by 코드버무려
Android 안드로이드2015. 2. 13. 13:11


서비스에서 알림창을 먼전 띄우고 매로리 해제된 activity를 띄움 


Context context = getApplicationContext();

Intent intent = new Intent(context, MnActy.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

context.startActivity(intent);


Bundle bundle = new Bundle();

bundle.putString("BeReady", "You are almost next one!");

Intent popupIntent = new Intent(getApplicationContext(), AlertDialogActivity.class);


popupIntent.putExtras(bundle);

PendingIntent pendingIntent= PendingIntent.getActivity(getApplicationContext(), 0, popupIntent, PendingIntent.FLAG_ONE_SHOT);

try {

pendingIntent.send();

} catch (CanceledException e) {

e.printStackTrace();

}

Posted by 코드버무려
Android 안드로이드2014. 12. 28. 15:11















public class MySurfaceVwActy extends Activity { private static final String TAG = MySurfaceVwActy.class.getSimpleName(); SurfaceView surfaceView; SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); // setContentView(R.layout.activity_my_surface_view); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); Log.d(TAG, "*********************************************************"); SurfaceVw surfaceEvent = new SurfaceVw(MySurfaceVwActy.this); surfaceEvent.setZOrderOnTop(true); surfaceEvent.getHolder().setFormat(PixelFormat.TRANSPARENT); addContentView(surfaceEvent, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); Log.d(TAG, "onCreate() end"); } } class SurfaceVw extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG_sfvw = MySurfaceVwActy.class.getSimpleName(); private SurfaceHolder holder; public TstThread mThread; public SurfaceVw(Context context) { super(context); Log.d(TAG_sfvw, "Surface() "); holder = getHolder(); holder.addCallback(this); mThread = new TstThread(holder, context); } @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG_sfvw, "surfaceCreated() "); mThread.setRunning(true); mThread.start(); } @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() "); //TODO thread stop boolean done = true; mThread.setRunning(false); while (done) { try { mThread.join(); done = false; } catch (InterruptedException e) { Log.d(TAG_sfvw, "catch(InterruptedException e) & repeat while(done){8888888}"); e.printStackTrace(); } } } public class TstThread extends Thread { SurfaceHolder mHolder; boolean m_run; int mStrX; int mStrY; int mWidth; int mHeight; public TstThread(SurfaceHolder holder, Context context) { Log.d(TAG_sfvw, "TstThread() "); this.mHolder = holder; DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mWidth = metrics.widthPixels; mHeight = metrics.heightPixels; mStrX = 0; mStrY = 0; } public void setRunning(boolean run) { Log.d(TAG_sfvw, "setRunning() "); this.m_run = run; } @Override public void run() { Bitmap Img = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); int w = Img.getWidth(); int h = Img.getHeight(); Log.d(TAG_sfvw, "run() "); while (m_run) { Canvas canvas = null; try { canvas = mHolder.lockCanvas(); synchronized (mHolder) { Rect src = new Rect(0, 0, w, h); mStrX += 1; if(mStrX > mWidth) mStrX= 0; mStrY += 1; if(mStrY > mHeight) mStrY= 0; Rect dst = new Rect(mStrX, mStrY, mStrX+w, mStrY+h); canvas.drawBitmap(Img, src, dst, null); } } catch (Exception e) { // Log.d(TAG_sfvw, " "); e.printStackTrace(); } finally { if (canvas != null) { Log.d(TAG_sfvw, "while (m_run): finally"); mHolder.unlockCanvasAndPost(canvas); } } } } } }


Posted by 코드버무려
Android 안드로이드2014. 12. 28. 14:11


역코드난독화 

코드 난독화 

proguard 

역난독화 

dex2jar Jad 

자바디컴파일러 

classes.dex Dalvik 

DeObfuscate 

Obfuscate  

Obfuscation  

DeObfuscation

jd-gui

disassemble



앱을 만들고 업로드 전에 난독화 과정을 거친다.

이클립스와 안드로이드 스튜디오에 기본으로 포함된 proguard를 사용한다. 난독화 과정 obfuscation이 이상없이 실행되었는 가를 검증보다 눈으로 확인을 해보자.

구글플레이서비스나 여러 외부라이브러리를 포함하면 프로가드로 난독화를 거치며 release를 할 때 오류를 겪을 수 있다. 이런 면을 감안해 난독화 과정을 디어샘블을 해보는 과정을 거치며 내 코드가 어떤 상태로 산출되었는가를 확인해본다.



[ABC.apk로 이름 붙은 안드로이드 앱 설치파일을 역난독화]

dex2jar.bat 에 ABC.apk파일(또는 ABC.apk파일 내에 있는 ABC.dex파일) 을 끌어다 놓는다.

ABC_dex2jar.jar파일이 만들어진다.

jd-gui( http://jd.benow.ca/ )를 실행하고 ABC_dex2jar.jar을 열어본다.

내가 만든 코드와 다른 알 수 없는 코드가 죽 나왔으면 난독화 잘 이루어진 것이다.


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

안드로이드 난독화 Obfuscation & 자바 소스 디컴파일러

http://programcode.tistory.com/140

Posted by 코드버무려
자바 Java2014. 12. 24. 20:28






















String getWhatToday() {

Calendar cal = Calendar.getInstance( );

StringBuffer strBffr = new StringBuffer( );

int iDay = cal.get(Calendar.DAY_OF_WEEK);

switch(iDay) {

case 1:

strBffr.append("i"); break;

case 2:

strBffr.append("M"); break;

case 3:

strBffr.append("H"); break;

case 4:

strBffr.append("W"); break;

case 5:

strBffr.append("T"); break;

case 6:

strBffr.append("F"); break;

case 7:

strBffr.append("s"); break;

}

return strBffr.toString( );

}

'자바 Java' 카테고리의 다른 글

WriteRecentCoordinate  (0) 2016.11.22
ReadRecentCoordinate  (0) 2015.09.22
Thread interrupt  (0) 2014.12.05
입력 문자열에서 숫자를 뽑아 문자로 반환  (0) 2014.11.26
자바 환경 변수 설정 CLASSPATH, JAVA_HOME, Path  (0) 2014.07.24
Posted by 코드버무려