Android逆向开发合并res目录到apk中,处理values目录的values.xml文件

  • 如果给了一个apk,我们如何将另一个Apk或者aar里面的res资源合并到一起呢,首先我们必须了解res目录下都有些哪些目录和资源文件,我们找一个apk文件,然后将其拖进Android Studio里面就可以看到apk的目录结构,也可以使用apktool 命令解析apk来查看里面的结构,我们重点关注res目录,看下里面有哪些东西
  • res下主要就是drawable、layout、color、anim、values、xml等目录
  • 如果是将apk的res合并进母包apk,这个就很简单了,非values文件夹下的所有目录,直接拷贝过去就行了,如果有相同的文件,我们不覆盖,因为首先得保证母包里面的文件再保证合入的资源文件,如果是values下的资源文件则需要做特殊的处理了,因为在使用apktool进行解析的时候,values目录里面的资源文件已经被分类存放在不同的xml文件中了
  • 现在另一个apk解析后的values目录也是这样的,我们不能直接拷贝过来,而是需要将这些相同文件名称的xml文件进行合并处理,如果母包的res里面不存在相同名称的xml文件,则直接拷贝过来就行了
  • 相同xml资源文件的合并需要注意同名的资源ID需要保留母包的就行,当然合并xml可以使用dom4j等框架
  • 有一个比较特殊的资源文件就是declare-styleable了,这个标签的合并需要结合smali代码,请看这篇文章对Android的R$styleab.smali、declare-styleable标签自定义attr属性的还原与逆向开发实践_林慈桥的博客-CSDN博客
  • 如果我们需要将aar包当中的res目录合并到apk中去,应该怎么做呢,首先我们看下aar下的res目录有哪些目录和资源文件,还是拖动一个aar包到Android Studio中,看下里面res的结构
  • aar包的res目录与apk的res目录是差不多的,一般直接拷贝合并就行,现在我们主要看下values目录下的values.xml文件有哪些东西,下面是我在快手广告SDK的aar包里面找到的一个values.xml文件,里面的元素比较全,啥都有,来看看
    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:ns1="http://schemas.android.com/tools">
        <attr format="reference" name="loading_anim"/>
        <attr format="string" name="loading_text"/>
        <attr format="reference" name="refreshViewLayout"/>
        <color name="background_pressed">#F0F0F0</color>
        <color name="edit_orange">@color/p_color_orange</color>
        <color name="ksad_black_alpha20">#33000000</color>
        <color name="ksad_black_alpha50">#80000000</color>
        <color name="ksad_default_dialog_bg_color">#4D666666</color>
        <color name="ksad_default_privacy_link_color">#FFFFFF</color>
        <color name="ksad_jinniu_end_origin_color">#FF9C9C9C</color>
        <color name="ksad_main_color_orange">#FFFF4906</color>
        <color name="ksad_no_title_common_dialog_negativebtn_color">#666666</color>
        <color name="ksad_no_title_common_dialog_positivebtn_color">#5181FB</color>
        <color name="ksad_play_again_desc_text_color">#FF666666</color>
        <color name="ksad_play_again_desc_text_color_horizontal">#FFFFFFFF</color>
        <color name="ksad_play_again_horizontal_bg">#B3000000</color>
        <color name="ksad_play_again_horizontal_bg_light">#4D000000</color>
        <color name="ksad_play_again_title_text_color">#FF222222</color>
        <color name="ksad_play_again_title_text_color_horizontal">#FFFFFFFF</color>
        <color name="ksad_playable_pre_tips_icon_bg">#33FFFFFF</color>
        <color name="ksad_reward_main_color">#FFFE3666</color>
        <color name="ksad_reward_main_color_orange">#FFFF4906</color>
        <color name="ksad_reward_original_price">#FF666666</color>
        <color name="ksad_reward_undone_color">#FF9C9C9C</color>
        <color name="ksad_translucent">#00000000</color>
        <color name="loading_title_color">#c6c6c6</color>
        <color name="p_color_orange">#ff5000</color>
        <color name="popup_window_toast_bubble_background">#B3111111</color>
        <color name="text_default_color">#ffffff</color>
        <color name="text_orange_color_2">#ff5000</color>
        <color name="text_popup_window_toast_bubble_color">#ffffff</color>
        <dimen name="common_popup_view_min_top_offset">120dp</dimen>
        <dimen name="ksad_action_bar_height">44dp</dimen>
        <dimen name="ksad_coupon_dialog_height">304dp</dimen>
        <dimen name="ksad_coupon_dialog_value_prefix_text_size">32sp</dimen>
        <dimen name="ksad_coupon_dialog_width">263dp</dimen>
        <dimen name="ksad_install_tips_card_elevation">2dp</dimen>
        <dimen name="ksad_install_tips_card_height">80dp</dimen>
        <dimen name="ksad_install_tips_card_margin">8dp</dimen>
        <dimen name="ksad_install_tips_card_padding_left">10dp</dimen>
        <dimen name="ksad_install_tips_card_padding_right">12dp</dimen>
        <dimen name="ksad_interstitial_card_radius">8dp</dimen>
        <dimen name="ksad_interstitial_download_bar_height">70dp</dimen>
        <dimen name="ksad_interstitial_icon_radius">4dp</dimen>
        <dimen name="ksad_jinniu_light_sweep_margin_left">-72dp</dimen>
        <dimen name="ksad_jinniu_light_sweep_width">72dp</dimen>
        <dimen name="ksad_play_again_dialog_btn_height">48dp</dimen>
        <dimen name="ksad_play_again_dialog_card_margin_vertical">12dp</dimen>
        <dimen name="ksad_play_again_dialog_height">352dp</dimen>
        <dimen name="ksad_play_again_dialog_img_height">148dp</dimen>
        <dimen name="ksad_play_again_dialog_width">312dp</dimen>
        <dimen name="ksad_play_again_end_height">456dp</dimen>
        <dimen name="ksad_play_again_end_height_with_logo">482dp</dimen>
        <dimen name="ksad_play_again_end_icon_size">80dp</dimen>
        <dimen name="ksad_play_again_end_icon_size_download">100dp</dimen>
        <dimen name="ksad_play_again_end_icon_size_horizontal">54dp</dimen>
        <dimen name="ksad_reflux_back_height">200dp</dimen>
        <dimen name="ksad_reflux_card_left_height">106dp</dimen>
        <dimen name="ksad_reflux_card_left_inner_height">74dp</dimen>
        <dimen name="ksad_reflux_card_padding">16dp</dimen>
        <dimen name="ksad_reflux_card_top_img_height">195dp</dimen>
        <dimen name="ksad_reflux_icon_size">16dp</dimen>
        <dimen name="ksad_reflux_title_bar_corner">16dp</dimen>
        <dimen name="ksad_reward_apk_info_card_actionbar_text_size">15dp</dimen>
        <dimen name="ksad_reward_apk_info_card_height">156dp</dimen>
        <dimen name="ksad_reward_apk_info_card_icon_size">54dp</dimen>
        <dimen name="ksad_reward_apk_info_card_margin">16dp</dimen>
        <dimen name="ksad_reward_apk_info_card_step_area_height">79dp</dimen>
        <dimen name="ksad_reward_apk_info_card_step_divider_height">16dp</dimen>
        <dimen name="ksad_reward_apk_info_card_step_icon_radius">12dp</dimen>
        <dimen name="ksad_reward_apk_info_card_step_icon_size">12dp</dimen>
        <dimen name="ksad_reward_apk_info_card_step_icon_text_size">8sp</dimen>
        <dimen name="ksad_reward_apk_info_card_tags_height">18dp</dimen>
        <dimen name="ksad_reward_apk_info_card_width">343dp</dimen>
        <dimen name="ksad_reward_author_height">76dp</dimen>
        <dimen name="ksad_reward_author_icon_anim_start">22dp</dimen>
        <dimen name="ksad_reward_author_icon_inner_width">44dp</dimen>
        <dimen name="ksad_reward_author_icon_stroke_width">1dp</dimen>
        <dimen name="ksad_reward_author_icon_width">61dp</dimen>
        <dimen name="ksad_reward_author_width">61dp</dimen>
        <dimen name="ksad_reward_follow_author_icon_margin_bottom">242dp</dimen>
        <dimen name="ksad_reward_follow_card_height">64dp</dimen>
        <dimen name="ksad_reward_follow_card_margin">12dp</dimen>
        <dimen name="ksad_reward_follow_card_width_horizontal">351dp</dimen>
        <dimen name="ksad_reward_follow_dialog_card_height">222dp</dimen>
        <dimen name="ksad_reward_follow_dialog_height">243dp</dimen>
        <dimen name="ksad_reward_follow_dialog_icon_size">80dp</dimen>
        <dimen name="ksad_reward_follow_dialog_width">280dp</dimen>
        <dimen name="ksad_reward_follow_end_card_height">247dp</dimen>
        <dimen name="ksad_reward_follow_end_height">318dp</dimen>
        <dimen name="ksad_reward_follow_end_width">280dp</dimen>
        <dimen name="ksad_reward_follow_logo_margin_bottom">87dp</dimen>
        <dimen name="ksad_reward_followed_card_height">64dp</dimen>
        <dimen name="ksad_reward_followed_card_width">216dp</dimen>
        <dimen name="ksad_reward_jinniu_card_btn_height">40dp</dimen>
        <dimen name="ksad_reward_jinniu_card_height">105dp</dimen>
        <dimen name="ksad_reward_jinniu_card_height_full">155dp</dimen>
        <dimen name="ksad_reward_jinniu_card_icon_size">85dp</dimen>
        <dimen name="ksad_reward_jinniu_card_margin">12dp</dimen>
        <dimen name="ksad_reward_jinniu_card_padding">10dp</dimen>
        <dimen name="ksad_reward_jinniu_dialog_close_size">30dp</dimen>
        <dimen name="ksad_reward_jinniu_dialog_height">334dp</dimen>
        <dimen name="ksad_reward_jinniu_dialog_icon_size">58dp</dimen>
        <dimen name="ksad_reward_jinniu_dialog_width">286dp</dimen>
        <dimen name="ksad_reward_jinniu_end_height">344dp</dimen>
        <dimen name="ksad_reward_jinniu_end_icon_size">100dp</dimen>
        <dimen name="ksad_reward_jinniu_end_max_width">355dp</dimen>
        <dimen name="ksad_reward_jinniu_end_origin_text_size">12sp</dimen>
        <dimen name="ksad_reward_jinniu_logo_margin_bottom">125dp</dimen>
        <dimen name="ksad_reward_js_actionbar_height">120dp</dimen>
        <dimen name="ksad_reward_middle_end_card_logo_view_height">16dp</dimen>
        <dimen name="ksad_reward_middle_end_card_logo_view_margin_bottom">10dp</dimen>
        <dimen name="ksad_reward_native_normal_actionbar_height">90dp</dimen>
        <dimen name="ksad_reward_order_card_coupon_height">18dp</dimen>
        <dimen name="ksad_reward_order_card_height">102dp</dimen>
        <dimen name="ksad_reward_order_card_icon_size">82dp</dimen>
        <dimen name="ksad_reward_order_card_margin">12dp</dimen>
        <dimen name="ksad_reward_order_card_padding">10dp</dimen>
        <dimen name="ksad_reward_order_coupon_divider">4dp</dimen>
        <dimen name="ksad_reward_order_dialog_height">242dp</dimen>
        <dimen name="ksad_reward_order_dialog_icon_size">60dp</dimen>
        <dimen name="ksad_reward_order_dialog_width">280dp</dimen>
        <dimen name="ksad_reward_order_end_dialog_height">236dp</dimen>
        <dimen name="ksad_reward_order_end_dialog_width">280dp</dimen>
        <dimen name="ksad_reward_order_logo_margin_bottom">123dp</dimen>
        <dimen name="ksad_reward_order_original_price_size">12sp</dimen>
        <dimen name="ksad_reward_order_price_size">15sp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_default_margin_bottom">40dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_height">40dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_icon_padding">5dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_icon_size">34dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_margin_bottom">16dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_margin_bottom_without_actionbar">43dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_margin_right">-71dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_transx">-70dp</dimen>
        <dimen name="ksad_reward_playable_pre_tips_width">117dp</dimen>
        <dimen name="ksad_reward_task_dialog_height">264dp</dimen>
        <dimen name="ksad_reward_task_dialog_width">290dp</dimen>
        <dimen name="ksad_seek_bar_progress_text_margin">10dp</dimen>
        <dimen name="ksad_skip_view_divider_height">12dp</dimen>
        <dimen name="ksad_skip_view_divider_margin_horizontal">8dp</dimen>
        <dimen name="ksad_skip_view_divider_margin_left">52dp</dimen>
        <dimen name="ksad_skip_view_divider_margin_vertical">10dp</dimen>
        <dimen name="ksad_skip_view_divider_width">1dp</dimen>
        <dimen name="ksad_skip_view_height">32dp</dimen>
        <dimen name="ksad_skip_view_padding_horizontal">16dp</dimen>
        <dimen name="ksad_skip_view_radius">16dp</dimen>
        <dimen name="ksad_skip_view_text_size">14sp</dimen>
        <dimen name="ksad_skip_view_width">128dp</dimen>
        <dimen name="ksad_splash_actionbar_height">52dp</dimen>
        <dimen name="ksad_splash_actionbar_margin_bottom">20dp</dimen>
        <dimen name="ksad_splash_actionbar_width">280dp</dimen>
        <dimen name="ksad_splash_rotate_view_height">88dp</dimen>
        <dimen name="ksad_splash_rotate_view_margin_bottom">34dp</dimen>
        <dimen name="ksad_splash_rotate_view_margin_top">24dp</dimen>
        <dimen name="ksad_splash_rotate_view_width">88dp</dimen>
        <dimen name="ksad_splash_shake_animator_height">8dp</dimen>
        <dimen name="ksad_splash_shake_view_height">92dp</dimen>
        <dimen name="ksad_splash_shake_view_margin_bottom">30dp</dimen>
        <dimen name="ksad_splash_shake_view_margin_top">16dp</dimen>
        <dimen name="ksad_splash_shake_view_width">92dp</dimen>
        <dimen name="ksad_title_bar_height">45dp</dimen>
        <dimen name="kwai_loading_default_size">40dp</dimen>
        <dimen name="text_size_12">12sp</dimen>
        <dimen name="text_size_14">14sp</dimen>
        <dimen name="text_size_15">15sp</dimen>
        <item name="holder" type="id"/>
        <item name="loading_view" type="id"/>
        <item name="tk_animation" type="id"/>
        <item name="tk_node" type="id"/>
        <string name="app_name">KSecurityCore</string>
        <string name="ksad_ad_default_username_normal">可爱的广告君</string>
        <string name="ksad_data_error_toast">内容获取失败</string>
        <string name="ksad_deep_link_dialog_content">再次开启 【%s】</string>
        <string name="ksad_default_no_more_tip_or_toast_txt">更多内容请前往快手App查看</string>
        <string name="ksad_download_kwai_waiting">下载信息获取中,请稍后再试。</string>
        <string name="ksad_half_page_loading_error_tip">加载失败,请点击重试</string>
        <string name="ksad_half_page_loading_no_comment_tip">暂无评论,来抢沙发</string>
        <string name="ksad_half_page_loading_no_related_tip">无更多内容</string>
        <string name="ksad_install_tips">“ %1$s ”已下载完毕,请点击免费安装</string>
        <string name="ksad_launch_tips">您已安装“ %1$s ”,是否打开该应用</string>
        <string name="ksad_network_error_toast">网络错误</string>
        <string name="ksad_no_title_common_dialog_negativebtn_title">取消</string>
        <string name="ksad_no_title_common_dialog_positivebtn_title">确定</string>
        <string name="ksad_page_load_more_tip">上拉加载更多</string>
        <string name="ksad_page_load_no_more_tip">无更多内容</string>
        <string name="ksad_page_loading_data_error_sub_title">内容获取失败请点击重试</string>
        <string name="ksad_page_loading_data_error_title">空空如也</string>
        <string name="ksad_page_loading_data_limit_error_title">今日精彩内容已看完,请明日再来</string>
        <string name="ksad_page_loading_error_retry">重试</string>
        <string name="ksad_page_loading_network_error_sub_title">请检查网络连接后重试</string>
        <string name="ksad_page_loading_network_error_title">网络不给力</string>
        <string name="ksad_page_loading_no_more_data_error_title">暂无内容</string>
        <string name="ksad_request_install_content">安装后,可以在快手查看商品详情和下单</string>
        <string name="ksad_request_install_nagative">暂不开启</string>
        <string name="ksad_request_install_positive">去开启</string>
        <string name="ksad_request_install_title">授权安装快手</string>
        <string name="ksad_return_back">返回%1$s</string>
        <string name="ksad_reward_default_tip">后可领取奖励</string>
        <string name="ksad_reward_success_tip">领取奖励</string>
        <style name="Loading_More">
        <item name="android:id">@id/loading_view</item>
        <item name="loading_width">30dp</item>
        <item name="loading_hight">30dp</item>
        <item name="android:layout_gravity">center</item>
        <item name="loading_anim">@drawable/ksad_kwai_loading_view_gray</item>
      </style>
        <style name="Theme.Widget.Text" parent="@android:style/TextAppearance">
        <item name="android:textSize">@dimen/text_size_15</item>
        <item name="android:textColor">#434658</item>
        <item name="android:minHeight">10dp</item>
      </style>
        <style name="TransparentDialogActivity" parent="@style/Theme.AppCompat.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:backgroundDimAmount">0</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
      </style>
        <style name="ksad_RewardCardBtnInstall">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">44dp</item>
        <item name="android:background">@drawable/ksad_reward_install_btn_bg</item>
      </style>
        <style name="ksad_RewardCardTag">
        <item name="android:background">@drawable/ksad_reward_card_tag_bg</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">18dp</item>
        <item name="android:textColor">@color/ksad_reward_main_color</item>
        <item name="android:textSize">10sp</item>
        <item name="android:gravity">center</item>
      </style>
        <declare-styleable name="CustomRefreshLayout">
        <attr format="reference" name="refreshLayout"/>
        <attr format="dimension" name="refreshViewWidth"/>
      </declare-styleable>
        <declare-styleable name="KwaiLoadingView">
        <attr name="loading_anim"/>
        <attr name="loading_text"/>
        <attr format="dimension" name="loading_width"/>
        <attr format="dimension" name="loading_hight"/>
      </declare-styleable>
        <declare-styleable name="KwaiRefreshView">
        <attr name="loading_anim"/>
      </declare-styleable>
        <declare-styleable name="ShootRefreshView">
        <attr format="color" name="strokeColor"/>
        <attr format="dimension" name="strokeWidth"/>
        <attr format="color|reference" name="gradientStartColor"/>
        <attr format="color|reference" name="gradientEndColor"/>
      </declare-styleable>
        <declare-styleable name="ksad_ComplianceTextView"><attr format="dimension" name="ksad_width_in_landscape"/><attr format="color|reference" name="ksad_privacy_color"/></declare-styleable>
        <declare-styleable name="ksad_DividerView">
        <attr format="color" name="ksad_color"/>
        <attr format="dimension" name="ksad_dashLength"/>
        <attr format="dimension" name="ksad_dashGap"/>
        <attr format="dimension" name="ksad_dashThickness"/>
        <attr format="enum" name="ksad_orientation">
          <enum name="horizontal" value="0"/>
          <enum name="vertical" value="1"/>
        </attr>
      </declare-styleable>
        <declare-styleable name="ksad_DownloadProgressView">
        <!-- 下载启动前的文本颜色 -->
        <attr format="color" name="ksad_downloadTextColor"/>
        <!-- 下载进行中左侧的文本颜色 -->
        <attr format="color" name="ksad_downloadLeftTextColor"/>
        <!-- 下载进行中右侧的文本颜色 -->
        <attr format="color" name="ksad_downloadRightTextColor"/>
        <!-- 正常状态下的背景的drawable-->
        <attr format="reference" name="ksad_backgroundDrawable"/>
        <!-- 进度条的drawable-->
        <attr format="reference" name="ksad_progressDrawable"/>
        <!-- 内部所有的文本的大小 -->
        <attr format="dimension" name="ksad_downloadTextSize"/>
        <!-- 下载中显示进度的格式 -->
        <attr format="string" name="ksad_downloadingFormat"/>
    
      </declare-styleable>
        <declare-styleable name="ksad_JinniuCouponLayout">
        <attr format="dimension" name="ksad_outerRadius"/>
        <attr format="dimension" name="ksad_verticalRadius"/>
      </declare-styleable>
        <declare-styleable name="ksad_KSCornerImageView">
        <attr format="boolean" name="ksad_leftTopCorner"/>
        <attr format="boolean" name="ksad_topRightCorner"/>
        <attr format="boolean" name="ksad_rightBottomCorner"/>
        <attr format="boolean" name="ksad_bottomLeftCorner"/>
    
      </declare-styleable>
        <declare-styleable name="ksad_KSCouponLabelTextView">
        <attr format="dimension" name="ksad_labelRadius"/>
        <attr format="dimension" name="ksad_sideRadius"/>
        <attr format="color" name="ksad_strokeColor"/>
        <attr format="dimension" name="ksad_strokeSize"/>
    
      </declare-styleable>
        <declare-styleable name="ksad_KSLayout">
        <attr format="dimension" name="ksad_radius"/>
        <attr format="boolean" name="ksad_clipBackground"/>
        <attr format="float" name="ksad_ratio"/>
      </declare-styleable>
        <declare-styleable name="ksad_KSRatingBar" ns1:ignore="ResourceName">
        <attr format="dimension" name="ksad_starImageWidth"/>
        <attr format="dimension" name="ksad_starImageHeight"/>
        <attr format="dimension" name="ksad_starImagePadding"/>
        <attr format="integer" name="ksad_totalStarCount"/>
        <attr format="integer" name="ksad_starCount"/>
        <attr format="reference" name="ksad_starEmpty"/>
        <attr format="reference" name="ksad_starFill"/>
        <attr format="reference" name="ksad_starHalf"/>
        <attr format="boolean" name="ksad_clickable"/>
        <attr format="boolean" name="ksad_halfstart"/>
      </declare-styleable>
        <declare-styleable name="ksad_KsRadiusStrokeTextView">
        <attr format="color" name="ksad_textStrokeColor"/>
        <attr format="dimension" name="ksad_textRadius"/>
        <attr format="dimension" name="ksad_textLeftTopRadius"/>
        <attr format="dimension" name="ksad_textLeftBottomRadius"/>
        <attr format="dimension" name="ksad_textRightTopRadius"/>
        <attr format="dimension" name="ksad_textRightBottomRadius"/>
        <attr format="dimension" name="ksad_textStrokeWidth"/>
        <attr format="reference" name="ksad_textDrawable"/>
        <attr format="color" name="ksad_textNormalTextColor"/>
        <attr format="color" name="ksad_textSelectedTextColor"/>
        <attr format="boolean" name="ksad_textNoLeftStroke"/>
        <attr format="boolean" name="ksad_textNoRightStroke"/>
        <attr format="boolean" name="ksad_textNoTopStroke"/>
        <attr format="boolean" name="ksad_textNoBottomStroke"/>
        <attr format="color" name="ksad_textPressedSolidColor"/>
        <attr format="color" name="ksad_textNormalSolidColor"/>
        <attr format="boolean" name="ksad_textIsSelected"/>
      </declare-styleable>
        <declare-styleable name="ksad_KsShakeView">
        <attr format="color" name="ksad_outerStrokeColor"/>
        <attr format="dimension" name="ksad_outerStrokeWidth"/>
        <attr format="color" name="ksad_solidColor"/>
    
        <!--   是否显示内部圆形 -->
        <attr format="integer" name="ksad_shakeViewStyle"/>
        <!--   内部圆形的颜色 -->
        <attr format="color" name="ksad_innerCircleStrokeColor"/>
        <!--   内部圆形的描边宽度 -->
        <attr format="dimension" name="ksad_innerCircleStrokeWidth"/>
        <!--   内部圆形的padding -->
        <attr format="dimension" name="ksad_innerCirclePadding"/>
        <!--   摇一摇的图标 -->
        <attr format="reference" name="ksad_shakeIcon"/>
    
      </declare-styleable>
        <declare-styleable name="ksad_KsVerticalMarqueeTextView">
        <attr format="boolean" name="ksad_autoStartMarquee"/>
        <attr format="reference|integer" name="ksad_marqueeSpeed"/>
        <attr format="reference|string" name="ksad_text"/>
        <attr format="reference|dimension" name="ksad_textSize"/>
        <attr format="reference|color" name="ksad_textColor"/>
        <attr format="reference" name="ksad_textAppearance"/>
        <attr name="ksad_textStyle">
          <enum name="normal" value="0"/>
          <enum name="bold" value="1"/>
          <enum name="italic" value="2"/>
        </attr>
        <attr name="ksad_typeface">
          <enum name="normal" value="0"/>
          <enum name="sans" value="1"/>
          <enum name="serif" value="2"/>
          <enum name="monospace" value="3"/>
        </attr>
      </declare-styleable>
        <declare-styleable name="ksad_SeekBar">
        <attr format="color" name="ksad_SeekBarBackground"/>
        <attr format="color" name="ksad_SeekBarProgress"/>
        <attr format="color" name="ksad_SeekBarSecondProgress"/>
        <attr format="boolean" name="ksad_SeekBarDisplayProgressText"/>
        <attr format="boolean" name="ksad_SeekBarLimitProgressText100"/>
        <attr format="dimension" name="ksad_SeekBarProgressTextSize"/>
        <attr format="dimension" name="ksad_SeekBarProgressTextMargin"/>
        <attr format="dimension" name="ksad_SeekBarWidth"/>
        <attr format="dimension" name="ksad_SeekBarHeight"/>
        <attr format="dimension" name="ksad_SeekBarRadius"/>
        <attr format="dimension" name="ksad_SeekBarPaddingLeft"/>
        <attr format="dimension" name="ksad_SeekBarPaddingRight"/>
        <attr format="dimension" name="ksad_SeekBarPaddingTop"/>
        <attr format="dimension" name="ksad_SeekBarPaddingBottom"/>
        <attr format="reference" name="ksad_SeekBarThumb"/>
        <attr format="reference" name="ksad_SeekBarDefaultIndicator"/>
        <attr format="reference" name="ksad_SeekBarDefaultIndicatorPass"/>
        <attr format="boolean" name="ksad_SeekBarShowProgressText"/>
        <attr format="color" name="ksad_SeekBarProgressTextColor"/>
      </declare-styleable>
        <declare-styleable name="yoga"><attr format="enum" name="yg_alignContent">
        <enum name="auto" value="0"/>
        <enum name="flex_start" value="1"/>
        <enum name="center" value="2"/>
        <enum name="flex_end" value="3"/>
        <enum name="stretch" value="4"/>
        <enum name="baseline" value="5"/>
      </attr><attr format="enum" name="yg_alignItems">
        <enum name="auto" value="0"/>
        <enum name="flex_start" value="1"/>
        <enum name="center" value="2"/>
        <enum name="flex_end" value="3"/>
        <enum name="stretch" value="4"/>
        <enum name="baseline" value="5"/>
      </attr><attr format="enum" name="yg_alignSelf">
        <enum name="auto" value="0"/>
        <enum name="flex_start" value="1"/>
        <enum name="center" value="2"/>
        <enum name="flex_end" value="3"/>
        <enum name="stretch" value="4"/>
        <enum name="baseline" value="5"/>
      </attr><attr format="float" name="yg_aspectRatio"/><attr format="dimension" name="yg_borderLeft"/><attr format="dimension" name="yg_borderTop"/><attr format="dimension" name="yg_borderRight"/><attr format="dimension" name="yg_borderBottom"/><attr format="dimension" name="yg_borderStart"/><attr format="dimension" name="yg_borderEnd"/><attr format="dimension" name="yg_borderHorizontal"/><attr format="dimension" name="yg_borderVertical"/><attr format="dimension" name="yg_borderAll"/><attr format="enum" name="yg_direction">
        <enum name="inherit" value="0"/>
        <enum name="ltr" value="1"/>
        <enum name="rtl" value="2"/>
      </attr><attr format="enum" name="yg_display">
        <enum name="flex" value="0"/>
        <enum name="none" value="1"/>
      </attr><attr format="float" name="yg_flex"/><attr format="float|string" name="yg_flexBasis"/><attr format="enum" name="yg_flexDirection">
        <enum name="column" value="0"/>
        <enum name="column_reverse" value="1"/>
        <enum name="row" value="2"/>
        <enum name="row_reverse" value="3"/>
      </attr><attr format="float" name="yg_flexGrow"/><attr format="float" name="yg_flexShrink"/><attr format="dimension|string" name="yg_height"/><attr format="enum" name="yg_justifyContent">
        <enum name="flex_start" value="0"/>
        <enum name="center" value="1"/>
        <enum name="flex_end" value="2"/>
        <enum name="space_between" value="3"/>
        <enum name="space_around" value="4"/>
      </attr><attr format="dimension|string" name="yg_marginLeft"/><attr format="dimension|string" name="yg_marginTop"/><attr format="dimension|string" name="yg_marginRight"/><attr format="dimension|string" name="yg_marginBottom"/><attr format="dimension|string" name="yg_marginStart"/><attr format="dimension|string" name="yg_marginEnd"/><attr format="dimension|string" name="yg_marginHorizontal"/><attr format="dimension|string" name="yg_marginVertical"/><attr format="dimension|string" name="yg_marginAll"/><attr format="dimension|string" name="yg_maxHeight"/><attr format="dimension|string" name="yg_maxWidth"/><attr format="dimension|string" name="yg_minHeight"/><attr format="dimension|string" name="yg_minWidth"/><attr format="enum" name="yg_overflow">
        <enum name="visible" value="0"/>
        <enum name="hidden" value="1"/>
        <enum name="scroll" value="2"/>
      </attr><attr format="dimension|string" name="yg_paddingLeft"/><attr format="dimension|string" name="yg_paddingTop"/><attr format="dimension|string" name="yg_paddingRight"/><attr format="dimension|string" name="yg_paddingBottom"/><attr format="dimension|string" name="yg_paddingStart"/><attr format="dimension|string" name="yg_paddingEnd"/><attr format="dimension|string" name="yg_paddingHorizontal"/><attr format="dimension|string" name="yg_paddingVertical"/><attr format="dimension|string" name="yg_paddingAll"/><attr format="dimension|string" name="yg_positionLeft"/><attr format="dimension|string" name="yg_positionTop"/><attr format="dimension|string" name="yg_positionRight"/><attr format="dimension|string" name="yg_positionBottom"/><attr format="dimension|string" name="yg_positionStart"/><attr format="dimension|string" name="yg_positionEnd"/><attr format="dimension|string" name="yg_positionHorizontal"/><attr format="dimension|string" name="yg_positionVertical"/><attr format="dimension|string" name="yg_positionAll"/><attr format="enum" name="yg_positionType">
        <enum name="relative" value="0"/>
        <enum name="absolute" value="1"/>
      </attr><attr format="dimension|string" name="yg_width"/><attr format="enum" name="yg_wrap">
        <enum name="no_wrap" value="0"/>
        <enum name="wrap" value="1"/>
      </attr></declare-styleable>
    </resources>

    里面的元素标签太多了,主要就是attr 、color 、dimen 、string、style、declare-styleable、item 等,这个里面就是一个大杂烩,啥元素都有,apktool解析出来的values目录已经为我们分类好了,我们直接合并就行

  • 要合并aar的values目录下的values.xml文件,首先就需要将values.xml文件进行分解了,我们需要通过同的元素标签来进行分解,首先遍历values.xml 的所有元素,如果元素标签.xml文件,比如attrs.xml文件不存在,就创建一个attrs.xml文件,然后将这个元素添加进attrs.xml
  • 当元素标签是item的时候,需要读取标签的type属性值,然后创建type属性值s.xml文件,并将元素合并到里面
  • 当元素标签是array结尾的话,需要创建arrays.xml文件再进行合并元素
  • 对于declare-styleable的合并,并不需要做任何处理,按照上面的规则进行合并就行了
  • 当valuse.xml的分解完成后,就可以删除了,然后将生成的xml文件通过xml元素合并的方式进行合并就可以了
  • res 的合并和特殊处理的点很多,如果在apktool进行回编译的时候,如果回编译不过,需要根据具体的原因来分析处理,另外在合并资源文件后需要使用aapt工具重新生成R.java 文件,最后转成R.smali文件进行合并,资源文件有问题,重复或者遗漏的aapt都会报错的,所以需要小心处理

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值