이클립스에서 개발중 실행할 때는 문제 없이 정상적으로 실행 되던 앱이

Export Signed Apllication Package 하여 구글플레이에 APK 업로드한 후 다운로드한후 실행해보니,

아래 이미지 처럼 "로또관리(이)가 중지되었습니다. 확인/신고" 라는 에러 메시지와 함께 중지되어 버리는 경우가 발생함.



PC에 연결하여 이클립스 logcat 에러 메세지를 보니, 아래와 같은 빨간색 에러메시지가 뜸.

02-15 13:44:58.790: E/AndroidRuntime(9412): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo

{com.sociallottowork.sociallottowork_m/com.sociallottowork.sociallottowork_m.MainActivity}:

 java.lang.ClassNotFoundException: com.sociallottowork.sociallottowork_m.MainActivity


원인(추정): Export Signed Apllication Package 명령에 의해 SampleActivityNew000.apk 파일이 빌드되면서, 무언가 꼬여 버림.

해결책:
1. 재빌드하여 새버전으로 업로드.
2. 프로젝트 clean 먹인후 재빌드하여 새버전으로 업로드.
3. AndroidManifest.xml 파일 내용을 아무곳이나 일부 수정하여 저장한 후, 원래대로 복구하여 다시 저장하여 재빌드하여 새버전으로 업로드.


추가: 

이클립스 Help 메뉴 - Installation Details - Installation History 탭 을 확인해보니,

2015.1.13 에 (Android Development Tools) ADT 23.0.4.1468518  가 업데이트 된 것으로 확인.

위의 오류를 경험 한 날이 2015.1.15 이므로, ADT 23.0.4 업데이트 와 관련이 있지 않을까 생각 중.




Posted by 잇힝2012
,

아래의 분할 압축된 파일 3개를 다운로드 받으시면 됩니다.


sociallottowork.part01.rar


sociallottowork.part02.rar


sociallottowork.part03.rar

Posted by 잇힝2012
,

lotto006.cpp

#include <stdio.h>      /* printf, scanf, puts, NULL */

#include <stdlib.h>     /* srand, rand */

#include <time.h>       /* time */

#include <algorithm>    // std::sort, std::find, std::copy

#include <vector>       // std::vector


void getRandomLottoWin(int *r) // 당첨번호+보너스번호(7수) 랜덤 생성 

{

std::vector<int> vv; // vector vv 선언(중복검사, 정렬 등의 작업이 편하다) 

while(true) {

int temp = rand()%45 + 1; // 1~45 사이의 랜덤값 추출

if(std::find(vv.begin(), vv.end(), temp)==vv.end()) { // 벡터 vv 에 temp 값이 없다면 

vv.push_back(temp); // 벡터 vv 에 temp 값을 추가 

if(vv.size()==7) break; // 7수 모두를 얻었다면 while 루프를 빠져 나감 

}

}

std::sort(vv.begin(), vv.begin()+6); // 정렬(보너스번호 빼고) 

std::copy(vv.begin(), vv.end(), r); // 복사 

}


void getRandomLotto(int *r) // 로또번호(6수) 랜덤 생성 

{

std::vector<int> vv; // vector vv 선언(중복검사, 정렬 등의 작업이 편하다) 

while(true) {

int temp = rand()%45 + 1; // 1~45 사이의 랜덤값 추출

if(std::find(vv.begin(), vv.end(), temp)==vv.end()) { // 벡터 vv 에 temp 값이 없다면

vv.push_back(temp); // 벡터 vv 에 temp 값을 추가 

if(vv.size()==6) break; // 6수 모두를 얻었다면 while 루프를 빠져 나감

}

}

std::sort(vv.begin(), vv.end()); // 정렬

std::copy(vv.begin(), vv.end(), r); // 복사

}


int checkWin(int *r1, int *r2)

{

for(int i=0; i<7; i++) {

if(r1[i]<1 || 45<r1[i]) return 0; // 로또번호+보너스볼의 무결성 체크 #1

if(i==6) break;

for(int j=i+1; j<7; j++) {

if(r1[i]==r1[j]) return 0; // 로또번호+보너스볼의 무결성 체크 #2

}

}

for(int i=0; i<6; i++) {

if(r2[i]<1 || 45<r2[i]) return 0; // 로또번호의 무결성 체크 #1

if(i==5) break;

for(int j=i+1; j<6; j++) {

if(r2[i]==r2[j]) return 0; // 로또번호의 무결성 체크 #2

}

}

// 등수 확인

int smallCount=0, bonusCount=0;

for(int i=0;i<7;i++) {

for(int j=0;j<6;j++) {

if(r1[i]==r2[j]) {

if(i==6) bonusCount++;

else smallCount++;

}

}

}

int winLevel=0;

if(smallCount<3) {

winLevel=0;

} else if(smallCount==3) {

winLevel = 5;

} else if(smallCount==4) {

winLevel = 4;

} else if(smallCount==5 && bonusCount==1) {

winLevel = 2;

} else if(smallCount==5 && bonusCount!=1) {

winLevel = 3;

} else if(smallCount==6) {

winLevel = 1;

}

return winLevel;

}


int main(int argc, char *argv[])

srand((unsigned)time(NULL));


int r1[7]; // 랜덤으로 생성된 로또번호+보너스번호 를 저장할 배열 

int r2[6]; // 랜덤으로 생성된 로또번호를 저장할 배열 

for(int i=0; i<100; i++) {

getRandomLottoWin(r1);

getRandomLotto(r2);

int winLevel = checkWin(r1, r2);

printf("%02d,%02d,%02d,%02d,%02d,%02d / %02d", r1[0],r1[1],r1[2],r1[3],r1[4],r1[5],r1[6]);

printf("   :::   %02d,%02d,%02d,%02d,%02d,%02d", r2[0],r2[1],r2[2],r2[3],r2[4],r2[5]);

if(1<=winLevel && winLevel<=5)

printf("   ===   %d", winLevel);

printf("\n");

}

printf("\n");


getchar();

return 0;

}


당첨번호+보너스번호(7수)를 랜덤으로 생성한 후

구매번호(6수)를 랜덤으로 생성하여

이를 비교하여 등수를 계산하여 출력하는 소스코드입니다.


Posted by 잇힝2012
,