這是一件非常有趣的事情。我有一個APK文件,com.company.app.apk。當使用Eclipse,使用下面的代碼來獲取apk文件的文件名安裝模擬器:從Market安裝後,apk文件中的代碼在哪裏?
String fileName = activity.getPackageManager().getApplicationInfo(
activity.getPackageName(), PackageManager.GET_META_DATA).publicSourceDir;
我得到這樣一個com.company.app-1.apk
路徑。文件大小與我製作的apk文件相同。
現在,當我將此應用發佈到Market並將其安裝到真實設備(Android 2.3)時,相同的代碼返回瞭如下路徑名:com.company.app-2.zip
。請注意,文件擴展名已更改爲.zip,最重要的是,文件大小遠小於原始大小。
現在,如果我將這兩個文件傳輸到我的電腦,並使用WinZip打開它們,我發現了一個十分有趣的現象:
的一個由Eclipse的安裝在仿真器具有完全按照我預想的一樣東西。即:代碼('com'文件夾),資源('res'文件夾),簽名('META-INF'文件夾),資產('assets'文件夾)和清單文件(AndroidManifest.xml)。然而,Market上安裝在真實設備上的只有兩個部分:資源和清單文件。
問題:我認爲從Market安裝時,.apk文件被分成兩個(或多個)文件。一個文件由ApplicationInfo.publicSourceDir
指向,其中只包含資源。我怎樣才能得到其他文件的路徑名?
添加:我有兩個版本的同一個應用程序,一個是使用Google的供應商許可服務付費的,另一個是免費的。上述現象只發生在付費版本上。爲什麼?
糾錯:當我說'com'文件夾存在於第一個安裝的apk文件中時,我應該會更清楚。代碼本身,* .java文件不在'com'文件夾中。事實上,'com'文件夾中只包含一些垃圾文件,這些文件在構建過程中無意中留在那裏。如果不是那些垃圾文件,我不認爲'com'文件夾會放在第一位。
這是非常有趣的,感謝解決它。它似乎是作爲反盜版措施的工作嗎? – edthethird 2013-05-10 02:20:26