2009-06-12 3 views
52

테스트 서버 및 프로덕션 서버에 데이터를 업로드하는 Android 라이브러리가 있습니다. 이 라이브러리를 사용하는 개발자는 개발시 테스트 서버를 사용하고, 프로덕션 서버는 Android 마켓에서 응용 프로그램을 다운로드 할 때 사용하고 싶습니다.Android 마켓에서 앱을 다운로드 한 경우 검색

앱이 출처 (시장 또는 비 시장)를 알릴 수 있습니까? 나는 서명 된 JAR 파일의 존재를 감지 할 수 있다고 생각합니다.

+0

앱이 게시되었는지 아니면 최종 사용자가 앱을 다운로드했는지 알고 싶습니까? 마찬가지로 사용자가 시장에서 앱을로드 했으므로 시장 앱이 프로덕션 서버를 사용하거나 앱이 게시되어 해당 앱의 모든 사본이 프로덕션 앱이됩니다. – Grant

+0

그랜트, 내가 찾고있는 차이점은 개발자 시간 대 프로덕션 시간이므로 개발자의 복사본을 테스트 서버에 남기고 싶습니다. 프로덕션 서버를 사용하기 위해 "야생에서"다운로드 한 모든 앱을 원할뿐입니다. – sehugg

+0

아무 것도하지 않는 다른 응용 프로그램을 만든 다음 디버그 빌드를 나타내는 존재 여부를 테스트하십시오. 개발 용 휴대 전화에 앱을 설치하십시오. – OJW

답변

38

예, 서명을 사용할 수 있습니다. 개발 중에 앱에 서명하기 위해 디버그 키를 사용하고 앱을 시장에 업로드 할 때 릴리스 키를 사용하면 앱이 서명 된 서명을 확인하고 해당 테스트 또는 프로덕션 서버 사용을 기반으로 확인할 수 있습니다.

try { 
     PackageManager manager = context.getPackageManager(); 
     PackageInfo appInfo = manager.getPackageInfo(
      YOUR_PACKAGE_NAME, PackageManager.GET_SIGNATURES); 

     // Now test if the first signature equals your debug key. 
     boolean shouldUseTestServer = 
      appInfo.signatures[0].toCharsString().equals(YOUR_DEBUG_KEY); 

    } catch (NameNotFoundException e) { 
     // Expected exception that occurs if the package is not present. 
    } 

가 YOUR_PACKAGE_NAME가 'com.wsl.CardioTrainer'과 같이해야합니다 : 다음은 앱 서명을 읽을 수있는 작은 코드 조각이다. AndroidManifest.xml에서 사용한 패키지 이름이어야합니다. API 5를 시작으로 행운

마르크

+1

YOUR_RELEASE_KEY를 (를) 하드 코딩하는 것이 좋습니다. 리버스 엔지니어링에서이를 나타낼 수 있습니까? – Thushan

+4

그게 문제를 해결할 수도 있지만 내가 너라면 내 개인 키를 절대 쓰지 않을거야. 어쩌면 20 자 이하의 키를 사용하여 도망 갈 수 있습니까? –

+5

당신의 키에 어떤 종류의 해시를 사용하고 하드 코딩을 해놓은 다음 패키지 정보에 저장된 키를 해시 한 다음 리버스 엔지니어링 된 경우 누군가가 실제 키를 보지 못하게 할 것입니다. –

1

구성을 프로덕션 환경으로 기본 설정하고 구성을 테스트 환경으로 설정하는 사용자 지정 Instrumentation을 사용할 수 있습니다. 계측은 안드로이드 마켓에 게시하기 전에 제거해야합니다.

3

마켓 응용 프로그램이 시장에서 다운로드되었다고 말하는 응용 프로그램에 "플래그"를 붙일 수 있다고 나는 말할 수 없습니다.

이 문제는 다른 Android 라이브러리에서 다른 방식으로 접근하는 것으로 나타났습니다. AdMob Android SDK는 on their wiki과 같이 무료로 다운로드하여 사용할 수 있습니다. 이 라이브러리는 광고를 제공하므로 개발자가 현재 실행중인 응용 프로그램을 테스트하고 있거나 "와일드"상태로 사용 중인지 여부를 확인할 수 있기를 원하는 동일한 욕구가 있습니다. 그들의 접근 방식은 개발자가 XML에서 "테스트"속성을 설정하거나 라이브러리에서 "setTesting (boolean)"함수를 호출하여 라이브러리에서 어떤 광고를 제공할지 알 수 있도록하는 것이 었습니다. 이는 개발자가 게시하기 전에 한 줄의 코드 또는 XML을 변경하는 수동 방법에 더 가깝습니다.

+1

그래, 그게 하나의 접근법이야. 문제는 게시 할 때 다시 변경하는 것을 기억하기가 어렵다는 것이다. 나는 자동적 인 방법을 찾고 있었다. 오 잘. – sehugg

+1

'build.xml' Ant 빌드 스크립트를 커스터마이징하여 릴리즈와 디버그 빌드 사이에서 변수를 바꿀 수 있습니다. 페이스 북과 트위터 키용 구성 클래스와 Google Maps 용 리소스 파일이 자동으로 바뀌는 방식으로이 작업을 수행했습니다. –

0

아마도 "개발자 모드"에 대한 설정을 앱에 추가 할 수 있습니다.

또 다른 가능성은 SD 카드에서 특수한 파일이나 구성 파일을 찾은 것입니다.

10

, 당신은 PackageManager.getInstallerPackageName(String)를 사용할 수 있습니다. 문서에서 :

패키지를 설치 한 응용 프로그램의 패키지 이름을 검색하십시오. 패키지가 출시 된 시장을 식별합니다.

Android 마켓 패키지를 받으려면 this post이 도움이 될 수 있습니다.

관련 문제