且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

APK Expansion Files调查笔记

更新时间:2022-08-26 13:48:28

最近在调查APK Expansion Files的使用方法,在此过程中遇到不少问题,在此做一个总结

重要参考资料:

  http://developer.android.com/google/play/expansion-files.html
  http://blog.chengyunfeng.com/?p=342
  http://yunfeng.sinaapp.com/?p=343#ixzz1oKclZQjT
  http://blog.csdn.net/tonyfield/article/details/11739035
  http://android-developers.blogspot.com/2012/03/android-apps-break-50mb-barrier.html
  http://www.iteye.com/news/24446

  Thank you very much


利用官方示例测试时候需要修改的地方
1 程序的包名即manifest中的package.否则无法上传
2 将SampleDownloaderService中的BASE64_PUBLIC_KEY替换为自己的
3 将org.goodev.expansion.downloader.SampleDownloaderActivity中的xAPKS
  修改为自己的.注意此处的大小请以本地obb文件大小为准.不要以上传Google play
  后网页显示的obb大小为准

 


Bug描述及其修改:

1 在运行示例代码时程序崩溃,发现是mRemoteService为空,服务没有启动
  以下资料亦提到该问题但是没有给出解答
  http://***.com/questions/17706064/expansion-file-download-feature-not-working
  http://www.techques.com/question/1-10591136/onServiceConnected-sometimes-not-called-after-bindService-on-some-devices
  http://qnundrum.com/answer.php?q=81809
  http://***.com/questions/18847294/onserviceconnected-never-called-in-android-with-apk-expansion-files
  http://android.win8usa.com/question-39147/apk-expansion-file-and-bindservice-if-false.html
  https://devnet.madewithmarmalade.com/questions/10612/apk-expansion-realization.html

  解决方式:
  在DownloaderClientMarshaller类中
  即com.google.android.vending.expansion.downloader.DownloaderClientMarshaller类中的
  public void connect(Context c)()方法中:
  应该使用if ( !c.bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE) )
  而不是:
  if ( !c.bindService(bindIntent, mConnection, Context.BIND_DEBUG_UNBIND) )


2 在修改以上bug后程序不会崩溃,但是没有执行下载.
  发现APK Expansion Files中的几个服务均只执行了create()却没有执行commandStart()

  解决办法:
  http://www.nowherenearithaca.com/2012/03/android-apk-expansion-files-how-to.html

  Thank you very much

  具体代码:
  在方法:
  com.google.android.vending.expansion.downloader.impl.DownloaderService.startDownloadServiceIfRequired()
  应该把:
  String packageName = serviceClass.getPackage().getName();
  改成
  String packageName =   context.getPackageName();

 


其余问题:
1 设备需要支持谷歌服务,比如你采用国产的oppo手机运行时会产生证书问题
2 第一次上传apk的时候是无法上传obb文件的.只有在第二次及其以后上传apk
  时才有上传obb文件的选项.
  参考资料:
  http://***.com/questions/15109191/how-to-upload-apk-expansion-files-in-new-developer-console
  http://blog.csdn.net/tonyfield/article/details/11739035
3 上传obb文件不能立马测试.需要等待一段时间

 

残留问题:
通过以上的准备和修改已经可以下载obb文件,但是进度条等UI信息的显示不正常.

参考资料:
1 http://***.com/questions/13826001/android-expansion-file-wont-trigger-ondownloadstatechanged
2 http://arora-janu1991.blogspot.com/2013/09/apk-expansion-files-testing-sample.html
3 http://code.google.com/p/android/issues/detail?id=29554&q=APK%20Expansion%20Files&colspec=ID Type Status Owner Summary Stars
4 http://***.com/questions/9807048/download-expansion-files-on-tablet
5 http://code.google.com/p/android/issues/detail?id=27953&q=APK%20Expansion%20Files&colspec=ID Type Status Owner Summary Stars
  Thank you very much
改问题还未解决,需要进一步的调查.


关于APK Expansion Files的其余疑似bug和问题可以参阅:
http://code.google.com/p/android/issues/detail?id=30767