刷了氧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里竟然没有?
从网上下载了一个装上,按步骤完成,又可以愉快得刷公交卡啦。
评论