如何使用googleplay应用包中的java按需加载android资产包?

qc6wkl3g  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(784)

如何使用googleplay应用包中的java按需加载android资产包?
我尝试过传递参数并在assetpackmanager中硬编码它。我认为我的问题与不理解接口有关。
一些链接
https://developer.android.com/guide/playcore/asset-delivery/integrate-java
play core java api提供assetpackmanager类,用于请求资产包、管理下载和访问资产。您可以根据要访问的资产包的交付类型来实现这个api。
https://developer.android.com/reference/com/google/android/play/core/assetpacks/assetpackmanager#getpacklocation
我的资产包(songsnw)结构与app处于同一级别

app  // my app
        src
           main
                java
                AndroidManifest.xml
            build.gradle

my app level build.gradle(上图)列出了我的资产包

android {
        other {
            ...
        }
        dynamicFeatures = [':....X', ':SongsNW', ':.....Y', ':.....Z']
    }
    dependencies {
        ....
    }

我的资产包(songsnw)

SongsNW 
        src
            main
                assets
                    NW folder with assets
                AndroidManifest.xml
            build.gradle

my androidmanifest.xml(在上面的songsnw下)

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:dist="http://schemas.android.com/apk/distribution"
        package="com.companyname.songsnw">

        <dist:module
            dist:instant="false"
            dist:title="@string/title_songsnw">
            <dist:delivery>
                <dist:on-demand/>
            </dist:delivery>
            <dist:fusing dist:include="false" />
        </dist:module>
    </manifest>

my build.gradle(在上面的songsnw下面)

apply plugin: 'com.android.asset-pack'

    assetPack {
        packName = "SongsNW" // Directory name for the asset pack
        dynamicDelivery {
            deliveryType = "on-demand"
        }
    }

loadassetpack.java(模块)

package com.companyname.appname;

    import android.util.Log;
    import com.google.android.play.core.assetpacks.AssetPackLocation;
    import com.google.android.play.core.assetpacks.AssetPackState;
    import com.google.android.play.core.assetpacks.AssetPackStates;
    import com.google.android.play.core.tasks.OnCompleteListener;
    import com.google.android.play.core.tasks.RuntimeExecutionException;
    import com.google.android.play.core.tasks.Task;

    import static android.content.ContentValues.TAG;

    interface AssetPackManager {
        // I am passing the assetPackName to here with this call:
        // AssetPackLocation assetPackLocation = AssetPackManager.getPackLocation("SongsNW");
        public static final String TAG = "LoadAssetPack";
        public static final String assetPackName = "";
        // public static final String assetPackName = "SongsNW";
        public static final AssetPackLocation assetPacklocation = null;

        public static final AssetPackLocation assetPackLocation = getPackLocation(assetPackName);

        public static AssetPackLocation getPackLocation(String assetPackName) {
            Log.d(TAG, "in AssetPackManager assetPackName:" + assetPackName);
                    AssetPackLocation assetPackLocation = getPackLocation(assetPackName);
            Log.d(TAG, "assetPackName:" + assetPackName + " assetPackLocation: " + assetPackLocation );
            return assetPackLocation;  // null if it isn't complete

        }

        // I need to run the following list, but first I need to understand what I am doing wrong.
        AssetPackStates cancel (List<String> packNames)
        Task<AssetPackStates> fetch (List<String> packNames)
        Task<AssetPackStates> getPackStates (List<String> packNames)
        void registerListener (AssetPackStateUpdateListener listener)
        Task<Void> removePack (String packName)
        Task<Integer> showCellularDataConfirmation (Activity activity)
        void unregisterListener (AssetPackStateUpdateListener listener)
    }

这不是上述问题的答案,但我相信它能更好地定义这些问题。
首先要能够看到原始的错误消息。
增加android studio logcat缓冲区大小以容纳16384 kb(默认1024 kb)
文件>设置>编辑器>常规>控制台>覆盖控制台循环缓冲区大小。
然后你可以在顶部看到错误。
logcat中的消息:
i/systemserver:initbeforestartservices
w/youtube:在批量初始化结束之前获取gservices键“disable\u binder\u callback\u flush”
w/primes:primes未初始化,返回默认(no op)primes示例,该示例将忽略所有调用。
请在使用任何primes api之前调用primes.initialize(…)。
谷歌上面的错误提供了:
播放服务尝试验证,过早关闭配置文件弹出窗口,失败#2362
https://github.com/playgameservices/play-games-plugin-for-unity/issues/2362
在下面的评论中,他们正在讨论googleplay服务。
... web客户端id是正确的方法。一旦我把它配置好,它就成功了。不直观的部分是重定向uri。对于任何因为googleapi控制台不太直观而遇到同样问题的人来说:在凭证部分,oauth同意屏幕选项卡下,底部是“授权域”部分。为了添加授权域,您需要在下面的example.com框中键入它。
这带来了很多额外的问题:
什么是web客户端id?这个证件区在哪里?什么是重定向uri?我的授权域是什么?真正的问题是,我为什么要创建和管理google云项目?我相信,答案是因为googleplay就是在这里存储我的应用程序包的。
正确管理项目的答案可能是:
https://cloud.google.com/resource-manager/docs/creating-managing-projects
我发现oauth的客户在
google play控制台>设置>开发者帐户>api访问
所以,我现在的问题是:“我需要在googleplay中填写什么来初始化系统服务器呢(这是我的第一个错误声明)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题