1. Android Open Source Project Site 에서 FullSource를 받는당(검색 검색)


2.  경로에 android 폴더와 com 폴더가 있는 폴더를 찾는다 


3. android-sdk-windows\platforms\android-8(자신이 현재 사용 중 인 SDK version) 폴더에 들어가서
    sources 라는 이름의 폴더를 만들어 준다.

4. sources 라는 폴더 안에 아까 압축을 풀었던 android 폴더와 com 폴더를 복사해서 붙여넣는다.


5. 사용 중인 프로젝트를 close project 한 후 다시 open project 한다.


Android Proguard 설정법 libs 라이브러리 포함

android 2011. 12. 27. 20:31 Posted by jiddong
프로가드가 많이 바뀌었다..
요즘적용을 안하다보니... 최신기준으로 수정 작성함

기본 프로젝트 생성을 하면

proguard-project.txt  = 프로가드 세팅 파일
project.properties = 프로젝트 세팅파일

project.properties 프로젝트 세팅파일에  프로가드 사용 여부 주석을 해제 하자
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
해제방법은 # 을 삭제

안드로이드 signkey 로 바이너리를 만들면  

자동으로  Proguard 설정되어짐 확인방법은

android proguard 폴더 아래 4개의 File 생성되야 적용된것임

  • dump.txt :  어플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보를 
  • mapping.txt :  난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록. 난독화 된 어플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해서 꼭 챙겨 두셔야 합니다.
  • seeds.txt : 난독화 되지 않은 클래스와 멤버들의 목록입니다.
  • usage.txt : 사용되지 않기 때문에, apk 파일에서 제거된 코드들의 목록입니다. 혹시 제거되서는 안되는 메서드나 클래스가 제거되었는지 꼭 확인

  


문제가 생길시 파일 설정방법(라이브러리 추가나 메소드가 변경되어 메소드등이 없다고 나올때)

project.properties  File

#프로가드 사용여부

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

#프로젝트  지정 sdk 본인의 프로젝트에 알맞은 sdk 사용

target=android-17 


proguard-project.txt  File


-verbose //로그 봄
-dontoptimize // 압축 하지 않음 그냥 하지말자... 
-dontshrink  //사용하지 않는 메소드를 유지하라

-dontwarn org.apache.**  
-dontwarn (Warnig이 나온 클래스).** 
// 빌드시 can't find superclass or interface // can't find referenced class 등의  Warnig 이 나올경우
//클래스 Warnig 을 무시 한다 

-libraryjars libs/android-support-v4.jar // 라이브러리 추가
-libraryjars libs/json-simple-1.1.1 .jar

-keep public class * { public protected *; } 
//public class 와   protected class 의 경우 를 난독화 하지 않는다. 
//public class 를 난독화 할경우 메소드 호출중 문제가 될수 있음....

-keep class org.apache.http.** //org.apache.http.하위 클래스를 전부 난독화 하지 않음 
-keep interface org.apache.http.** //org.apache.http.  하위 인터페이스를 난독화 하지 않는다

-keep class  org.apache.http.** {

public *;

// org.apache.http.하위 클래스중 public method 만 난독화 하지 않음

난독화후 어플리케이션 실행하여 돌려보면서 난독화 범위를 적용해야함.













Android Java Script를 이용하여 Android APP을 만들때 script file과 html file을 asset 에 저장을 해서

java script 를 사용할경우 

바이너리 배포시에 APK 파일안의 assets 폴더를 볼수있기때문에 보안적 이슈가 생깁니다.

예를 들어 key 값이나 로직등등~

예방할 방법은 하드코딩으로으로 Html 이나 Java script file를 String 으로 java class 안에 가지고 있고
스크립트 사용시   Html 이나 Java script file 을 local 에 생성하여 사용하면 됩니다.

Progard 를 적용한다 하여도 String 객체는 안적용된다는 말이있는데 확인을 해봐야할듯;; 

디컴 파일 해서 그렇게 까지 보고싶으면 어쩔수 없뜸 ㅋㅋ


그런데! 제가 하루동안 헤매인 이유는 local에 저장을 했을 경우 그 위치가 어디인가 입니다.

그 위치는

file:///data/data/패키지 이름/files/파일명입니다~

그리구 만약 스크립트 안의  src='script.js'  요런 부분 도
  src='file:///data/data/패키지/files/script.js'  요리 바꿔줘야겠죠~ ㅋ

아래는  String 을 local file 로 저장하는 함수

 

  1. /**
  2.          * java script html file  을 <br>
  3.          *file:///data/data/패키지명/files/ 위치에 생성해준다.<br>
  4.          *
  5.          * @param oContext
  6.          * @return String HTML 파일 위치 값
  7.          */
  8.         private String copyHTML(Context oContext){
  9.                  String sResult = null;
  10.                  try {
  11.  //기존 HTML file 삭제 file 양이 크지 않아 삭제후 재 복사하여도 속도에 이슈가 없어서
  12.  //훗날 업데이트시 스팸메일 변경을 대비하여 삭제하고 재 생성
    // 파일의 크기가 클경우 생성후 있으면 재생성하지 않는 로직 필요
  13.                          deleteHTML(oContext);
  14.                          
  15.                         oContext.getFilesDir();
  16.                 File oDir = oContext.getFilesDir();
  17.                 oDir.mkdir();
  18.                 File oFile = new File(oDir.getAbsolutePath()+"/" + FILE_NAME);
  19.                 String sPath = oFile.getAbsolutePath();
  20.                
  21.                 //파일이 있을경우
  22.                 if(oFile.exists()){
  23.                         sResult =  "file://" + sPath;
  24.                         return sResult;
  25.                 }
  26.                                                
  27.                 FileOutputStream fo = new FileOutputStream(oFile);                    
  28.                 OutputStreamWriter osw = new OutputStreamWriter(fo);
  29.                 BufferedWriter bw = new BufferedWriter(osw);
  30.                
  31.                 bw.write(SPAM_HTML); // local 에 저장할 문서 
  32.                 bw.flush();
  33.                
  34.                 bw.close();
  35.                 osw.close();
  36.                 fo.close();
  37.  
  38.                 sResult =  "file://" + sPath;
  39.                
  40.         } catch (FileNotFoundException e) {
  41.                 sResult = null;
  42.                 deleteHTML(oContext);
  43.                         e.printStackTrace();
  44.          } catch (IOException e) {
  45.                  sResult = null;
  46.                  deleteHTML(oContext);
  47.                   e.printStackTrace();
  48.          }
  49.                
  50.                 return sResult;
  51.          }
  52.  
  53.  
  54.         /**
  55.          * 파일 유무확인해 HTML 파일이 있을경우 삭제
  56.          * @param oContext
  57.          */
  58.         private void deleteHTML(Context oContext) {
  59.                 oContext.getFilesDir();
  60.                 File oDir = oContext.getFilesDir();
  61.                 oDir.mkdir();
  62.                 File oFile = new File(oDir.getAbsolutePath() + "/" + FILE_NAME);
  63.  
  64.                 // 파일이 있을경우
  65.                 if (oFile.exists()) {
  66.                         oFile.delete();
  67.                 }
  68.         }

만약 Android Javascript WebView client 를 모른다! 

http://developer.android.com/guide/webapps/webview.html 

디벨로퍼에 가시면 자세히 나와있습니다~~




Android TextView 안에 이미지 추가

android 2011. 10. 13. 11:25 Posted by jiddong
  1.     /**
  2.      *  텍스트 앞에 이미지가 추가 된다
  3.      *
  4.      * @param tv
  5.      * @param text
  6.      */
  7.     private void setTitle(TextView tv, String text, boolean isAdult) {
  8.         if(!isAdult) {
  9.             tv.setText(text);
  10.         } else {
  11.             tv.setText(Html.fromHtml("<img src=\"이미지름\"/>" + text, new ImageGetter()null));
  12.  
  13.         }
  14.     }
  15.  
  16.     private final String PACKAGE_NAME = "패키지명";
  17.  
  18.     public class ImageGetter implements Html.ImageGetter {
  19.  
  20.         @Override
  21.         public Drawable getDrawable(String source) {
  22.             int nID = 0;
  23.             nID = getResources().getIdentifier(source, "drawable", PACKAGE_NAME);
  24.             Drawable d = getResources().getDrawable(nID);
  25.             d.setBounds(00, d.getIntrinsicWidth() + 6, d.getIntrinsicHeight());
  26.             return d;
  27.         }
  28.     }

한글계정 Android avd 실행시 문제 해결

android 2011. 6. 21. 13:05 Posted by jiddong
C:\android-sdk-windows\platform-tools 환경 변수 추가
 
avd 가 동작하지 않는 폴더

C:\Documents and Settings\ XXX \.android\avd 에 가서
 
android move avd -n galtab -p c:/avd 라고 입력한다
 

android app label, name, package name 알아보기~

android 2011. 4. 27. 17:17 Posted by jiddong
함수 하나로 끝~

AppLabel 이 아이콘 아래나오는 앺이름~

public void getAppList(){
 
PackageManager packagemanager = this.getPackageManager();
List< ApplicationInfo > appList = packagemanager.getInstalledApplications( 0 );
Log.d(TAG, ""+ appList.size());
for (int i = 0; i < appList.size(); i++) {
Log.d(TAG, "=========================================================");

Log.d(TAG, "++ packageName  :: "+ appList.get(i).packageName);
Log.d(TAG, "++ processName  :: "+ appList.get(i).processName);
Log.d(TAG, "++ AppLabel  :: "+ appList.get(i).loadLabel(packagemanager));
Log.d(TAG, "++ AppIcon  :: "+ appList.get(i).loadIcon(packagemanager));
Log.d(TAG, "=========================================================");
Log.d(TAG, " ");
Log.d(TAG, " ");
}

Android System 정보 가져오기

android 2010. 11. 2. 17:27 Posted by jiddong
Android 시스템 정보를 거의다 가져온다 (ex 어플의 사용시간들,메모리 사용 량 등등등)

가저온 Line 의 이용은 알아서 하시길~

Runtime runtime = Runtime.getRuntime();
try {
Process p = runtime.exec("dumpsys");
//Process p = runtime.exec("dumpsys meminfo");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
  while ((line = br.readLine()) != null) {
Log.d("test", line);
}
        
       br.close();


} catch (Exception e) {

Log.d("Exception", e.toString());

}