PageSourceSearch

https://apktool.org/assets/js/9161ef65.29465db5.js

js apktool.org collected 2026-10-03 21:02:15 UTC 5,793 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkapktool_org=self.webpackChunkapktool_org||[]).push([["3069"],{517(e,n,i){i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var s=i(2283),t=i(4848),r=i(8453);let o={slug:"apktool-1.4.0",title:"Apktool 1.4.0",authors:"broo2s",tags:["release"]},l,a={authorsImageUrls:[void 0]},d=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Changes",id:"changes",level:3}];function c(e){let n={a:"a",code:"code",h3:"h3",li:"li",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Upgrade Apktool to v1.4.0"}),"\n",(0,t.jsxs)(n.li,{children:["update install package to ",(0,t.jsx)(n.code,{children:"r04-brut1"})," or update your aapt manually","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["then remove ",(0,t.jsx)(n.code,{children:"$HOME/apktool/framework/1.apk"})," or install your own framework from Honeycomb/Gingerbread"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"changes",children:"Changes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Added Honeycomb support (3.1, API 12).","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"support for mipmaps and xlarge, xhdpi resource qualifiers"}),"\n",(0,t.jsx)(n.li,{children:"updated builtin framework to 3.1 (API 12)"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["completely rewritten mechanism of enclosing/escaping strings in XML files:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["fixed legendary ",(0,t.jsx)(n.a,{href:"https://github.com/iBotPeaches/Apktool/issues/211",children:"#211"})," bug"]}),"\n",(0,t.jsx)(n.li,{children:"fixed a lot of other bugs discovered when writing integration tests"}),"\n",(0,t.jsxs)(n.li,{children:["string format is simpler and more compact now: ",(0,t.jsx)(n.code,{children:"&#x20;"})," instead of ",(0,t.jsx)(n.code,{children:"\\u0020"}),", ",(0,t.jsx)(n.code,{children:"&quot;"})," instead of ",(0,t.jsx)(n.code,{children:'\\"'}),", etc."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["fixed incompatibilities between newer aapt and apks built by older one.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"New aapt is more restrictive, some apps can't be built using it, even if you would have sources."}),"\n",(0,t.jsxs)(n.li,{children:["Apktool tries to convert/fix these incompatibilities: it adds ",(0,t.jsx)(n.code,{children:'formatted="false"'})," for ",(0,t.jsx)(n.code,{children:"<string />"})," tags and enumerates substitutions for plurals."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["updated smali to ",(0,t.jsx)(n.code,{children:"v1.2.6"})]}),"\n",(0,t.jsx)(n.li,{children:"added automatic integration tests for resource decoding and building"}),"\n",(0,t.jsx)(n.li,{children:"first official release of apktool built using Maven from open source"}),"\n",(0,t.jsxs)(n.li,{children:["sort framework ids before storing them in apktool.yml.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"aapt command requires you to include frameworks in order."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"zero-padding of MCC resource qualifier"}),"\n",(0,t.jsxs)(n.li,{children:["prefer to use raw values when decoding XML attrs.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"This could make decoded XMLs a little more similar to original ones."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"close apktool.yml file handler after generating it"}),"\n",(0,t.jsx)(n.li,{children:"added error message about missing input file when decoding"}),"\n",(0,t.jsx)(n.li,{children:"added more info messages during decoding."}),"\n",(0,t.jsxs)(n.li,{children:["do not decode res-references as ",(0,t.jsx)(n.code,{children:"<item />"}),".","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Now they're decoded as e.g. ",(0,t.jsx)(n.code,{children:'<string name="test">@android:string/ok</string>'})," instead of ",(0,t.jsx)(n.code,{children:'<item type="string" name="test">@android:string/ok</item>'}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"changed encoding of generated XML files from UTF-8 to utf-8 - it's more consistent with Android SDK"}),"\n",(0,t.jsx)(n.li,{children:"add new line at the end of generated XML files."}),"\n"]})]})}function u(e={}){let{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453(e,n,i){i.d(n,{R:()=>o,x:()=>l});var s=i(6540);let t={},r=s.createContext(t);function o(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}},2283(e){e.exports=JSON.parse('{"permalink":"/blog/apktool-1.4.0","editUrl":"https://github.com/iBotPeaches/apktool.org/blob/main/blog/2011/2011-05-15-release140.mdx","source":"@site/blog/2011/2011-05-15-release140.mdx","title":"Apktool 1.4.0","description":"Prerequisites","date":"2011-05-15T00:00:00.000Z","tags":[{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"hasTruncateMarker":false,"authors":[{"name":"Ryszard Wi\u015Bniewski","title":"Creator of Apktool","url":"https://github.com/broo2s","imageURL":"https://github.com/broo2s.png","key":"broo2s","page":null}],"frontMatter":{"slug":"apktool-1.4.0","title":"Apktool 1.4.0","authors":"broo2s","tags":["release"]},"unlisted":false,"prevItem":{"title":"Apktool 1.4.2","permalink":"/blog/apktool-1.4.2"},"nextItem":{"title":"Apktool 1.4.1","permalink":"/blog/apktool-1.4.1"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.