解决:安卓7.0以上自动更新无法安装问题
我是做unity開發的,當需要調用安卓原生的功能的時候往往會遇到很多權限的問題,沒有系統的去學過安卓,遇到這樣的問題只能去百度、google,但是解決這樣問題的博客太多了,好多說的也都不對,要么有的只解決了7.0的,現在我給大家介紹一下我這邊怎么解決的,包括安卓8.0。
我主要針對unity開發人員說一下,其它的應該都差不多,只是調用方式有區別。
對于unity開發人員,怎么調用安卓,我在這里也不做過多的說明,不會的可以看一下雨松MOMO的博客,或者其它博客,我現在假設大家都已經創建了一個最基本安卓項目了,在你現有的項目上來寫這個功能。我們需要的調用安卓的功能其實很簡單,就是調用一下安裝命令,我們只要在unity中給這個方法傳過去文件的路徑就可以了,其它自動更新邏輯完全可以在unity中寫完了。下面我們來寫一下添加步驟:
1、我們需要在我們的AndroidManifest.xml 標簽中加入
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />這個代碼< manifest/>的子標簽,不要加到< application/>中,這個權限是8.0必須的,不加這個權限,在7.0下是沒問題的,然后我們解決7.0中的問題,7.0做了很大的變動,所以變動也比較大,我們還是先說文件中需要添加什么,我們要在< application> 標簽中加入
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.XXX.XXX.fileprovider"android:grantUriPermissions="true"android:exported="false"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>在這里我們需要注意兩個地方,
android:authorities="com.XXX.XXX.fileprovider" //這個值最好是你的包名,當然可以隨便寫,下面還會提到,需要和這個保持一致 android:resource="@xml/file_paths" //這個需要在你自己添加,需要在你的安卓項目目錄結構中res文件夾下面創建xml文件,并創建file_paths.xml file_paths.xml文件中的內容為: <?xml version="1.0" encoding="utf-8"?> <resources><paths><external-path path="" name="updateversion_apkfile" /></paths> </resources>2、下面就是在安卓項目中添加的java代碼
public void install(String dir, String apkName) {Uri uri = null;File file = new File(dir, apkName);Intent intent = new Intent(Intent.ACTION_VIEW);if(Build.VERSION.SDK_INT >= 24){ // try{ //這種方式直接可以適配到7.0,8.0的不會報錯,但是安裝不成功 // Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); // m.invoke(null); // }catch(Exception e){ // e.printStackTrace(); // }uri = FileProvider.getUriForFile(getCurrentContext(), "com.XXX.XXX.fileprovider", file); //這個里面第二個參數就是上面提到的,需要和AndroidManifest文件中配置的要一直,不然會報錯,其實這個是安卓做的一個安全機制,用這個名字代替你要訪問的真是路徑,大家可以打log看一下} else {uri = Uri.fromFile(file);}intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setDataAndType(uri, "application/vnd.android.package-archive");startActivity(intent);}public static Context getCurrentContext() {if (mContext == null) {mContext = UnityPlayer.currentActivity.getApplicationContext();}return mContext;}這里我只貼出了部分代碼,其它的都和你普通安卓項目一樣,為了大家方便,我可以給大家打好jar包,上傳到我的csdn資源上去。到現在安卓項目寫完了,大家可以打jar包放到你的unity項目中,并配置你unity項目中的AndroidManifest.xml文件和你res/xml/file_paths.xml文件。下面我給大家貼出我安卓項目中的目錄結構圖:
好了,到這里一般做unity的開發人員應該都沒有問題,但是有的人可能會閑麻煩,直接就想要一個jar包,然后在unity項目里面直接調用就可以了,為了方便這些人,我這里給出相關jar包和相關配置,現在給大家做一個使用步驟:
1、修改AndroidManifest.xml 文件,按照上面的修改,將android:authorities="com.XXX.XXX.fileprovider"
改為android:authorities="com.autoinstall.fileprovider" jar包里面調用的也是這個,添加file_paths.xml文件到res/xml中,沒有文件的自己創建即可。文件下載路徑為:所需資源jar包
2、下面是unity中調用jar包中install方法的代碼說明:
總結
以上是生活随笔為你收集整理的解决:安卓7.0以上自动更新无法安装问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [yueqian_scut]蓝牙防丢器原
- 下一篇: 《小说朗读器》又增新功能