美文网首页
React Native Android端点击Dev Setti

React Native Android端点击Dev Setti

作者: 林木_lker | 来源:发表于2018-08-16 18:33 被阅读0次

问题的背景是这个样子的:我们的项目里面集成了zxing库,今天开发人员发现,RN调试界面打开Dev Setting时居然打开的是zxing的配置界面(´⊙ω⊙`)
如下图:


zxing的配置界面

本人是iOS开发出身,Android代码只能是看得懂,原理什么的不清楚,大概方向就是两个页面的资源重复了,先查到Dev Setting打开的页面资源名

public class DevSettingsActivity extends PreferenceActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(getApplication().getResources().getString(R.string.catalyst_settings_title));
    addPreferencesFromResource(R.xml.preferences);
  }
}

全局搜索了一下,确实发现了react-native和zxing中都有preferences.xml文件,再查看app/build/intermediates/res/merged/debug/xml/preferences.xml,发现内容和zxing的preferences.xml一致,这么说来就是build相同名字资源文件时优先级的问题了。

于是我去看build.gradle的依赖配置,发现了zxing配置在react-native之前,猜想可能就是编译顺序问题了,调整了一下位置后,Dev Setting跳转回RN的配置界面了。

// 错误顺序
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':zxing')
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.facebook.react:react-native:+'
    ....
// 正确顺序
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.facebook.react:react-native:+'
    compile project(':zxing')
    ....

估计是编译时合并资源文件做了去重处理,先编译到的就先留下,后编译到的就抛弃。

相关文章

网友评论

      本文标题:React Native Android端点击Dev Setti

      本文链接:https://www.haomeiwen.com/subject/wdvobftx.html