2012-10-03 2 views
4

Android 앱이 있습니다. 하나는 무료 '리더'앱이고 다른 하나는 자산의 하위 디렉토리에 텍스트 파일이있는 '데이터'앱에 대한 대가로 지불됩니다. 이것은 잘 작동되었지만 구글 플레이를 사용하여 젤리에 다운로드 응용 프로그램이 작동하지 않습니다Jelly Bean의 다른 Android 앱에 액세스하기

Intent myIntent = new Intent("myintent"); 
List<ResolveInfo> dataPacks = packageManager.queryIntentActivities(myIntent, 0); 
String packageName = dataPacks.get(0).activityInfo.packageName 
Resources res = packageManager.getResourcesForApplication(packageName); 
AssetManager assets = res.getAssets(); 
String[] dataFiles = assets.list("Data"); 

(데이터 파일을 비어) :

독자의 응용 프로그램은 데이터 응용 프로그램의 텍스트 파일에 액세스하려면 다음 코드를 사용합니다. 앱이 이메일에서 직접 설치되는 경우 문제가되지 않으므로 내 문제가 Google Play의 최근 보안 변경 사항과 관련이 있다고 의심됩니다. 그러나 이것들은 아직 풀리지 않았지만 여전히 문제가 있습니다.

누가 잘못 될지에 대해 밝히는 사람이 있습니까? (불행히도 나는 젤리 빈 장치가 없다)

또는 누군가가 데이터 애플 리케이션의 txt 파일에 액세스하기위한 더 나은 메커니즘을 제안 할 수 있습니까?

감사합니다.

답변

5

JB 기기의 유료 앱은 '전달 잠김'상태입니다. 즉, APK는 공개 리소스가있는 앱과 비공개 앱 및 코드로 분할되어 다른 앱에서 읽을 수 없습니다. 여기에 몇 가지 세부 정보가 있습니다. http://nelenkov.blogspot.com/2012/07/using-app-encryption-in-jelly-bean.html

파일을 분할하는 방법을 조사하지는 않지만 볼 수있는 문제는 일반적으로 API 키 등을 고정하므로 애셋이 비공개 APK의 일부임을 나타냅니다. 자산으로

따라서 ContentProvider 또는 원격 서비스와 같은 두 앱간에 정보를 공유하려면 더 간접적 인 방법을 사용해야합니다. 자신의 앱에서만 사용할 수 있도록하려면 서명 권한이 필요합니다.

+1

어제를 확인했습니다. 예상대로 애셋 (/ res/asset)은 APK의 비공개 부분에 패키지되어 있으므로 다른 앱에서 직접 액세스 할 수 없습니다. 에뮬레이터에서도 이것을 테스트 할 수 있습니다. '-l'(forward lock) 옵션을 사용하여 설치해야합니다 :'adb install -l myapp.apk ' –

+0

감사합니다. Nik. 대신 ContentProvider를 사용하도록 코드를 다시 작성했습니다. 그리고 그것은 나를 위해 일하고있다. .. Havent는 아직 야생으로 풀어 놓고, 그것이 나의 최초의 문제를 고치는 지에 관해 알 기회를 가지고 있었다. –

관련 문제