一加氧OS9.0启用卡券的公交卡

刷了氧OS9.0后,发现卡券里没有公交卡了

于是把卡券的apk挖出来看了一下
位置在/system/app/card/card.apk,包名为com.oneplus.card

从公交卡关键字,

package com.oneplus.card.entity.activity;

public class MainActivity extends FragmentActivity {
    ...
    private void initViewPager(ViewPager viewPager2) {
        TabsAdapter adapter2 = new TabsAdapter(getSupportFragmentManager());
        if (CommonUtils.isH2OS()) {
            adapter2.addFragment(new CardListFragment());
            this.tabLayout.setVisibility(0);
        } else {
            this.mDefaultTab = 0;
            this.tabLayout.setVisibility(8);
        }
        adapter2.addFragment(CardPackageFragment.newInstance());
        viewPager2.setAdapter(adapter2);
        viewPager2.setOffscreenPageLimit(2);
        viewPager2.setCurrentItem(this.mDefaultTab);
    }
    ...

    private void refreshFloatBtnState() {
        if (CommonUtils.isH2OS()) {
            this.action_add_vipcard.setVisibility(8);
            this.multiple_actions.setVisibility(0);
            this.action_directions_bus.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    MainActivity.this.multiple_actions.collapse();
                    if (BuscardHelper.isAddBusCardActionExist()) {
                        BuscardHelper.startActionBuscardAdd(MainActivity.this.mContext);
                        return;
                    }
                    Builder builder = new Builder(MainActivity.this.mContext);
                    builder.setTitle((int) R.string.transport_card_install_title);
                    builder.setMessage((int) R.string.transport_card_install_massage);
                    builder.setPositiveButton((int) R.string.transport_card_install_gomarket, (OnClickListener) new OnClickListener() {
                        public void onClick(DialogInterface dialogInterface, int i) {
                            CommonUtils.jumpToMarket(MainActivity.this.mContext, BuscardHelper.PKG_BUSCARD);
                        }
                    });
                    builder.setNegativeButton((int) R.string.action_cancel, (OnClickListener) null);
                    builder.create().show();
                }
            });
            return;
        }
        this.multiple_actions.setVisibility(8);
        this.action_add_vipcard.setVisibility(0);
    }

}

一路追查,看到了下有如下代码:

package com.oneplus.card.utils;

public class CommonUtils {
    public static final String PKA_MARKET = "com.oneplus.market";
    public static final String PKA_MARKET_NEW = "com.oppo.market";
    private static final String TAG = CommonUtils.class.getSimpleName();
    private static Boolean isH2OS = null;

    public static boolean isH2OS() {
        if (isH2OS != null) {
            return isH2OS.booleanValue();
        }
        boolean isSupportChina = false;
        try {
            Class<?> tClass = Class.forName("android.util.OpFeatures");
            int[] opFeatureSkuChina = {tClass.getField("OP_FEATURE_SKU_CHINA").getInt(tClass)};
            isSupportChina = ((Boolean) tClass.getMethod("isSupport", new Class[]{int[].class}).invoke(null, new Object[]{opFeatureSkuChina})).booleanValue();
        } catch (ClassNotFoundException | IllegalAccessException | NoSuchFieldException | NoSuchMethodException | InvocationTargetException e) {
            e.printStackTrace();
        }
        isH2OS = Boolean.valueOf(isSupportChina);
        return isSupportChina;
    }
    ...

}

它会根据判断是否为氢OS,决定是否显示添加公交卡与公交卡界面的。

那当然二话不说,hook修改一下这个方法的返回值,直接返回true,

界面进去是有公交卡的选项了,但是提示要安装公交卡插件,要到一加商店下载安装,但是氧OS没有一加商店(捂脸)

其包名可以在上面的refreshFloatBtnState 方法中看到,BuscardHelper.PKG_BUSCARD这个就是,最后看到包名为cn.oneplus.wallet

本来想从氢os里提取一个,但发现9.0的氢os里竟然没有?

从网上下载了一个装上,按步骤完成,又可以愉快得刷公交卡啦。

评论

暂无

添加新评论