<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Android on Dapeng Zhang</title><link>https://zhangdapeng.dev/tags/android/</link><description>Recent content in Android on Dapeng Zhang</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 30 Jul 2025 11:44:33 +0800</lastBuildDate><atom:link href="https://zhangdapeng.dev/tags/android/index.xml" rel="self" type="application/rss+xml"/><item><title>Android开发之Kotlin语法remember和when使用记录</title><link>https://zhangdapeng.dev/p/android-kai-fa-zhi-kotlin-yu-fa-remember-he-when-shi-yong-ji-lu/</link><pubDate>Wed, 30 Jul 2025 11:44:33 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-kai-fa-zhi-kotlin-yu-fa-remember-he-when-shi-yong-ji-lu/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android开发之Kotlin语法remember和when使用记录" /&gt;&lt;p&gt;kotlin语法remember使用记录&lt;/p&gt;
&lt;p&gt;语法示例&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Kotlin" data-lang="Kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; currentStep &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; remember {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mutableStateOf(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;创建变量 currentStep 默认值为1&lt;/p&gt;
&lt;p&gt;when使用记录&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Kotlin" data-lang="Kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; description = &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; (currentStep) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.string.lemon_squeeze_title
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.string.lemon_drink_description
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当currentStep变量被更改之后，description的值也会随着变化&lt;/p&gt;
&lt;p&gt;在composble中，我理解为是变量的绑定，组件中通过更改currentStep会导致对应的变量和相应的逻辑发生变化&lt;/p&gt;
&lt;p&gt;完整的代码示例&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Kotlin" data-lang="Kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;@Composable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Lemon&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; currentStep &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; remember {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mutableStateOf(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; squeezeCount &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; remember {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mutableStateOf(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; imageResource = &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; (currentStep) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.drawable.lemon_restart
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.drawable.lemon_drink
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; description = &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; (currentStep) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.string.lemon_squeeze_title
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;R&lt;/span&gt;.string.lemon_drink_description
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Column(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; horizontalAlignment = &lt;span style="color:#a6e22e"&gt;Alignment&lt;/span&gt;.CenterHorizontally,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; verticalArrangement = &lt;span style="color:#a6e22e"&gt;Arrangement&lt;/span&gt;.Center,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; modifier = &lt;span style="color:#a6e22e"&gt;Modifier&lt;/span&gt;.fillMaxWidth()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Text(text = stringResource(description))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Spacer(modifier = &lt;span style="color:#a6e22e"&gt;Modifier&lt;/span&gt;.height(&lt;span style="color:#ae81ff"&gt;32&lt;/span&gt;.dp))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Button(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; onClick = {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; currentStep = &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; (currentStep) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; squeezeCount = (&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;..&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;).random()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; squeezeCount&lt;span style="color:#f92672"&gt;--&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (squeezeCount &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; colors = &lt;span style="color:#a6e22e"&gt;ButtonDefaults&lt;/span&gt;.buttonColors(backgroundColor = &lt;span style="color:#a6e22e"&gt;Color&lt;/span&gt;.Magenta),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; shape = RoundedCornerShape(&lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;.dp)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Image(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; painter = painterResource(id = imageResource),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; contentDescription = stringResource(description),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; modifier = &lt;span style="color:#a6e22e"&gt;Modifier&lt;/span&gt;.wrapContentSize()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android基础 - XML解析之dom解析</title><link>https://zhangdapeng.dev/p/android-ji-chu-xml-jie-xi-zhi-dom-jie-xi/</link><pubDate>Wed, 30 Jul 2025 11:44:29 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-ji-chu-xml-jie-xi-zhi-dom-jie-xi/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android基础 - XML解析之dom解析" /&gt;&lt;p&gt;解析原理&lt;/p&gt;
&lt;p&gt;读取内容的情况下&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DocumentBuilderFactory-&amp;gt;DocumentBulder-&amp;gt;Document-&amp;gt;NodeList-&amp;gt;Node-&amp;gt;content&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;更改内容的情况下&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TransformerFactory-&amp;gt;Transformer-&amp;gt;transform(Source, Result)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;实例代码如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; com.gowhich.xmlparser;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.parsers.DocumentBuilder;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.parsers.DocumentBuilderFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.Result;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.Source;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.Transformer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.TransformerFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.dom.DOMSource;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; javax.xml.transform.stream.StreamResult;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.junit.Test;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.w3c.dom.Document;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.w3c.dom.Node;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.w3c.dom.NodeList;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DomXmlParserTest&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;domXmlParser&lt;/span&gt;() &lt;span style="color:#66d9ef"&gt;throws&lt;/span&gt; Exception {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		DocumentBuilderFactory builderFactory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; DocumentBuilderFactory.&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		DocumentBuilder documentBuilder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; builderFactory.&lt;span style="color:#a6e22e"&gt;newDocumentBuilder&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Document document &lt;span style="color:#f92672"&gt;=&lt;/span&gt; documentBuilder.&lt;span style="color:#a6e22e"&gt;parse&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;book.xml&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		NodeList nodeList &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;getElementsByTagName&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;书名&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Node node &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodeList.&lt;span style="color:#a6e22e"&gt;item&lt;/span&gt;(1);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		String content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; node.&lt;span style="color:#a6e22e"&gt;getTextContent&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(content);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;domXmlModifyParser&lt;/span&gt;() &lt;span style="color:#66d9ef"&gt;throws&lt;/span&gt; Exception {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		DocumentBuilderFactory documentBuilderFactory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; DocumentBuilderFactory.&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		DocumentBuilder documentBuilder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; documentBuilderFactory.&lt;span style="color:#a6e22e"&gt;newDocumentBuilder&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Document document &lt;span style="color:#f92672"&gt;=&lt;/span&gt; documentBuilder.&lt;span style="color:#a6e22e"&gt;parse&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;book.xml&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		NodeList nodeList &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;getElementsByTagName&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;书名&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 0; i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; nodeList.&lt;span style="color:#a6e22e"&gt;getLength&lt;/span&gt;(); i&lt;span style="color:#f92672"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			Node node &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodeList.&lt;span style="color:#a6e22e"&gt;item&lt;/span&gt;(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			String content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; node.&lt;span style="color:#a6e22e"&gt;getTextContent&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(content);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Node node &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodeList.&lt;span style="color:#a6e22e"&gt;item&lt;/span&gt;(1);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		node.&lt;span style="color:#a6e22e"&gt;setTextContent&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;书名2-改&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		TransformerFactory transformerFactory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; TransformerFactory.&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Transformer transformer &lt;span style="color:#f92672"&gt;=&lt;/span&gt; transformerFactory.&lt;span style="color:#a6e22e"&gt;newTransformer&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Source xmlSource &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; DOMSource(document);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Result outputTarget &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; StreamResult(&lt;span style="color:#e6db74"&gt;&amp;#34;book.xml&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		transformer.&lt;span style="color:#a6e22e"&gt;transform&lt;/span&gt;(xmlSource , outputTarget);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dom解析优缺点&lt;/p&gt;
&lt;p&gt;优点：因为分配了一个树形结构，很容易的进行增加、删除、更改操作&lt;/p&gt;
&lt;p&gt;缺点：如果要解析的文件过大，一次性在内存中分配一个树形结构，造成内存溢出&lt;/p&gt;</description></item><item><title>Android小知识 - 找不到符号 import android.support.v4.app.Fragment</title><link>https://zhangdapeng.dev/p/android-xiao-zhi-shi-zhao-bu-dao-fu-hao-import-android-support-v4-app-fragment/</link><pubDate>Wed, 30 Jul 2025 11:44:24 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-xiao-zhi-shi-zhao-bu-dao-fu-hao-import-android-support-v4-app-fragment/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android小知识 - 找不到符号 import android.support.v4.app.Fragment" /&gt;&lt;h3 id="问题"&gt;问题：
&lt;/h3&gt;&lt;p&gt;找不到符号 import android.support.v4.app.Fragment&lt;/p&gt;
&lt;p&gt;最近做安卓开发，遇到了如上的问题提示：&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;gradle.properties&lt;/code&gt;中把有关&lt;code&gt;AndroidX&lt;/code&gt;的设置全部注释掉，顺便初步了解下&lt;/p&gt;
&lt;p&gt;其原因应该是跟我在gradle.properties加入的几个配置项有关&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;android.&lt;span style="color:#a6e22e"&gt;useAndroidX&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; &lt;span style="color:#75715e"&gt;// 表示当前项目启用 androidx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;android.&lt;span style="color:#a6e22e"&gt;enableJetifier&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; &lt;span style="color:#75715e"&gt;// 表示将依赖包也迁移到androidx 。如果取值为false,表示不迁移依赖包到androidx，但在使用依赖包中的内容时可能会出现问题，当然了，如果你的项目中没有使用任何三方依赖，那么，此项可以设置为false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之所以加了这几个配置，是因为自己引入的第三方库里面要求使用androidx&lt;br&gt;
但是加完这两个配置我自己的项目就要大动干戈，于是恐于面对无数的调整，最后放弃了&lt;/p&gt;
&lt;h3 id="解决办法"&gt;解决办法
&lt;/h3&gt;&lt;p&gt;上面两个配置删除或者将true改为false&lt;/p&gt;
&lt;p&gt;另外参考文章：&lt;a class="link" href="https://cloud.tencent.com/developer/article/1459306" target="_blank" rel="noopener"
 &gt;点这里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;详细的support依赖库的新旧对应关系见下表：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持库的旧路径&lt;/strong&gt;&lt;br&gt;
com.android.support.constraint:constraint-layout&lt;br&gt;
com.android.support.test.espresso:espresso-core&lt;br&gt;
com.android.support.test:runner&lt;br&gt;
com.android.support:appcompat-v7&lt;br&gt;
com.android.support:cardview-v7&lt;br&gt;
com.android.support:design&lt;br&gt;
com.android.support:multidex&lt;br&gt;
com.android.support:palette-v7&lt;br&gt;
com.android.support:recyclerview-v7&lt;br&gt;
com.android.support:support-v4&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持库的新路径&lt;/strong&gt;&lt;br&gt;
androidx.constraintlayout:constraintlayout:1.1.2&lt;br&gt;
androidx.test.espresso:espresso-core:3.1.0&lt;br&gt;
androidx.test:runner:1.1.0&lt;br&gt;
androidx.appcompat:appcompat:1.0.0&lt;br&gt;
androidx.cardview:cardview:1.0.0&lt;br&gt;
com.google.android.material:material:1.0.0-rc01&lt;br&gt;
androidx.multidex:multidex:2.0.0&lt;br&gt;
androidx.palette:palette:1.0.0&lt;br&gt;
androidx.recyclerview:recyclerview:1.0.0&lt;br&gt;
androidx.legacy:legacy-support-v4:1.0.0&lt;/p&gt;
&lt;p&gt;详细的support控件的新旧对应关系见下表：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持控件的旧包名&lt;/strong&gt;&lt;br&gt;
android.support.v4.app.Fragment&lt;br&gt;
android.support.v4.app.FragmentActivity&lt;br&gt;
android.support.v4.app.FragmentManager&lt;br&gt;
android.support.v4.app.FragmentPagerAdapter&lt;br&gt;
android.support.v4.view.ViewPager&lt;br&gt;
android.support.v4.view.PagerAdapter&lt;br&gt;
android.support.v4.view.PagerTabStrip&lt;br&gt;
android.support.v4.view.PagerTitleStrip&lt;br&gt;
android.support.v7.app.AppCompatActivity&lt;br&gt;
android.support.v7.widget.Toolbar&lt;br&gt;
android.support.v7.widget.RecyclerView&lt;br&gt;
android.support.v7.widget.GridLayoutManager&lt;br&gt;
android.support.v7.widget.LinearLayoutManager&lt;br&gt;
android.support.v7.widget.StaggeredGridLayoutManager&lt;br&gt;
android.support.v7.widget.CardView&lt;br&gt;
android.support.v7.graphics.Palette&lt;br&gt;
android.support.v7.app.AlertDialog&lt;br&gt;
android.support.annotation.IdRes&lt;br&gt;
android.support.v7.app.ActionBar&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持控件的新包名&lt;/strong&gt;&lt;br&gt;
androidx.fragment.app.Fragment&lt;br&gt;
androidx.fragment.app.FragmentActivity&lt;br&gt;
androidx.fragment.app.FragmentManager&lt;br&gt;
androidx.fragment.app.FragmentPagerAdapter&lt;br&gt;
androidx.viewpager.widget.ViewPager&lt;br&gt;
androidx.viewpager.widget.PagerAdapter&lt;br&gt;
androidx.viewpager.widget.PagerTabStrip&lt;br&gt;
androidx.viewpager.widget.PagerTitleStrip&lt;br&gt;
androidx.appcompat.app.AppCompatActivity&lt;br&gt;
androidx.appcompat.widget.Toolbar&lt;br&gt;
androidx.recyclerview.widget.RecyclerView&lt;br&gt;
androidx.recyclerview.widget.GridLayoutManager&lt;br&gt;
androidx.recyclerview.widget.LinearLayoutManager&lt;br&gt;
androidx.recyclerview.widget.StaggeredGridLayoutManager&lt;br&gt;
androidx.cardview.widget.CardView&lt;br&gt;
androidx.palette.graphics.Palette&lt;br&gt;
androidx.appcompat.app.AlertDialog&lt;br&gt;
androidx.annotation.IdRes&lt;br&gt;
androidx.appcompat.app.ActionBar&lt;/p&gt;
&lt;p&gt;另外还有一篇可供参考，&lt;a class="link" href="https://www.jianshu.com/p/504857b51e93" target="_blank" rel="noopener"
 &gt;点这里&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Android小知识 - The specified Android SDK Build Tools version (28.0.3) is ignored</title><link>https://zhangdapeng.dev/p/android-xiao-zhi-shi-the-specified-android-sdk-build-tools-version-28-0-3-is-ignored/</link><pubDate>Wed, 30 Jul 2025 11:44:21 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-xiao-zhi-shi-the-specified-android-sdk-build-tools-version-28-0-3-is-ignored/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android小知识 - The specified Android SDK Build Tools version (28.0.3) is ignored" /&gt;&lt;p&gt;问题：&lt;/p&gt;
&lt;p&gt;Android代码打包编译遇到一个错误提示（Android Studio）&lt;/p&gt;
&lt;p&gt;“The specified Android SDK Build Tools version (28.0.3) is ignored, as it is below the minimum supported version (29.0.2) for Android Gradle Plugin 4.0.1.”&lt;/p&gt;
&lt;p&gt;解决办法：&lt;/p&gt;
&lt;p&gt;这个问题其实很好处理&lt;/p&gt;
&lt;p&gt;修改&lt;code&gt;app/build.gradle&lt;/code&gt;的&lt;code&gt;buildToolsVersion&lt;/code&gt;配置，将&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;buildToolsVersion 28.0.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;buildToolsVersion 29.0.2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android小知识 - “android.support.v4.content” that cannot be safely rewritten. for androidx</title><link>https://zhangdapeng.dev/p/android-xiao-zhi-shi-android-support-v4-content-that-cannot-be-safely-rewritten-for-androidx/</link><pubDate>Wed, 30 Jul 2025 11:44:18 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-xiao-zhi-shi-android-support-v4-content-that-cannot-be-safely-rewritten-for-androidx/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android小知识 - “android.support.v4.content” that cannot be safely rewritten. for androidx" /&gt;&lt;p&gt;遇到的问题：&lt;/p&gt;
&lt;p&gt;“android.support.v4.content” that cannot be safely rewritten. for androidx&lt;/p&gt;
&lt;p&gt;解决办法：&lt;/p&gt;
&lt;p&gt;参考：https://stackoverflow.com/questions/53484988/the-given-artifact-contains-a-string-literal-with-a-package-reference-android-s&lt;/p&gt;
&lt;p&gt;主要是添加一个依赖&lt;/p&gt;
&lt;p&gt;添加依赖&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dependencies &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; implementation &lt;span style="color:#e6db74"&gt;&amp;#39;com.jakewharton:butterknife:10.0.0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; annotationProcessor &lt;span style="color:#e6db74"&gt;&amp;#39;com.jakewharton:butterknife-compiler:10.0.0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android小知识 - “Android Error Building Signed APK”</title><link>https://zhangdapeng.dev/p/android-xiao-zhi-shi-android-error-building-signed-apk/</link><pubDate>Wed, 30 Jul 2025 11:44:14 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-xiao-zhi-shi-android-error-building-signed-apk/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android小知识 - “Android Error Building Signed APK”" /&gt;&lt;p&gt;问题：&lt;/p&gt;
&lt;p&gt;打包Android App的时候遇到 Android Error Building Signed APK: xxx.jks not found for signing config &amp;rsquo;externalOverride'&lt;/p&gt;
&lt;p&gt;原因：&lt;/p&gt;
&lt;p&gt;jks的路径错误原因导致&lt;/p&gt;
&lt;p&gt;解决：&lt;/p&gt;
&lt;p&gt;打包的时候重新选择一下就可以&lt;/p&gt;</description></item><item><title>Android 签名keystore/jks生成方式</title><link>https://zhangdapeng.dev/p/android-qian-ming-keystore-jks-sheng-cheng-fang-shi/</link><pubDate>Wed, 30 Jul 2025 11:44:07 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-qian-ming-keystore-jks-sheng-cheng-fang-shi/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android 签名keystore/jks生成方式" /&gt;&lt;h3 id="生成签名证书"&gt;生成签名证书
&lt;/h3&gt;&lt;p&gt;使用keytool -genkey命令生成证书：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkey -alias testalias -keyalg RSA -keysize &lt;span style="color:#ae81ff"&gt;2048&lt;/span&gt; -validity &lt;span style="color:#ae81ff"&gt;36500&lt;/span&gt; -keystore test.keystore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;testalias是证书别名，可修改为自己想设置的字符，建议使用英文字母和数字&lt;/li&gt;
&lt;li&gt;test.keystore是证书文件名称，可修改为自己想设置的文件名称，也可以指定完整文件路径&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;输入密钥库口令:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;再次输入新口令:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的名字与姓氏是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的组织单位名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的组织名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您所在的城市或区域名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您所在的省/市/自治区名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;该单位的双字母国家/地区代码是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;CN&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; [否]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的名字与姓氏是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的组织单位名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您的组织名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您所在的城市或区域名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;您所在的省/市/自治区名称是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;该单位的双字母国家/地区代码是什么?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;[Unknown]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;CN&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; [否]: 是&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;输入 &amp;lt;testalias&amp;gt; 的密钥口令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;(如果和密钥库口令相同, 按回车):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上命令运行完成后就会生成证书，路径为当前目录&lt;/p&gt;
&lt;h3 id="查看证书信息"&gt;查看证书信息
&lt;/h3&gt;&lt;p&gt;可以使用以下命令查看：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ keytool -list -v -keystore test.keystore
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入密钥库口令:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会输出以下格式信息：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;密钥库类型: JKS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;密钥库提供方: SUN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;您的密钥库包含 &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; 个条目
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;别名: testalias
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;创建日期: 2020-11-15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;条目类型: PrivateKeyEntry
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;证书链长度: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;证书&lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;所有者: CN&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, OU&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, O&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, L&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, ST&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, C&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;发布者: CN&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, OU&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, O&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, L&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, ST&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown, C&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Unknown
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;序列号: 3f43c8dc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;有效期开始日期: Sun Nov &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; 22:17:41 CST 2020, 截止日期: Tue Oct &lt;span style="color:#ae81ff"&gt;22&lt;/span&gt; 22:17:41 CST &lt;span style="color:#ae81ff"&gt;2120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;证书指纹:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 MD5: C7:23:DB:D6:09:CD:CA:77:77:FA:D8:2F:58:FB:83:0F
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 SHA1: E8:07:B6:F8:70:C1:0B:87:D8:C8:C5:64:43:C5:40:3A:0C:AA:E6:7F
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 SHA256: 82:18:C1:28:3C:E3:30:02:31:3F:E1:13:2A:2F:DC:75:A8:65:86:5D:97:F1:12:C7:A9:05:61:C2:E7:D5:5F:32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 签名算法名称: SHA256withRSA
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 版本: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;扩展:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#1: ObjectId: 2.5.29.14 Criticality=false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SubjectKeyIdentifier &lt;span style="color:#f92672"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;KeyIdentifier &lt;span style="color:#f92672"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0000: 9B FF CE 5E &lt;span style="color:#ae81ff"&gt;27&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;02&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;96&lt;/span&gt; E9 B3 &lt;span style="color:#ae81ff"&gt;44&lt;/span&gt; 8C &lt;span style="color:#ae81ff"&gt;80&lt;/span&gt; DF CE A5 ...^&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;.....D.....
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0010: ED 4C A4 &lt;span style="color:#ae81ff"&gt;81&lt;/span&gt; .L..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*******************************************
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*******************************************
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中证书指纹信息（Certificate fingerprints）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MD5 证书的MD5指纹信息（安全码MD5）&lt;/li&gt;
&lt;li&gt;SHA1 证书的SHA1指纹信息（安全码SHA1）&lt;/li&gt;
&lt;li&gt;SHA256 证书的SHA256指纹信息（安全码SHA245）&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Android 如何打包</title><link>https://zhangdapeng.dev/p/android-ru-he-da-bao/</link><pubDate>Wed, 30 Jul 2025 11:43:52 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-ru-he-da-bao/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android 如何打包" /&gt;&lt;p&gt;1、打开&lt;strong&gt;Android Studio&lt;/strong&gt;，进入需要打包&lt;strong&gt;apk&lt;/strong&gt;的项目工程；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;、找到 &lt;strong&gt;Android Studio&lt;/strong&gt; 顶部菜单栏里面的 &lt;strong&gt;Build&lt;/strong&gt; 选项，点击 **”Generate Signed Bundle/APK…”**选项进入；&lt;/p&gt;
&lt;p&gt;3、选择keyStore/jks&lt;/p&gt;
&lt;p&gt;如果没有keyStore/jks的话，需要点击&lt;strong&gt;Create new创建一个新的，如果已经有了可以直接选择Choose existing&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;针对有&lt;/strong&gt;有keyStore/jks的话按照下面来选择：&lt;/p&gt;
&lt;p&gt;如果已经新建有keyStore/jks文件，就直接选择对应的keyStore/jks文件即可。接着输入密钥密码、密钥别名、公钥密码，确认无误之后，点击&lt;strong&gt;Next&lt;/strong&gt;；&lt;/p&gt;
&lt;p&gt;针对没有keyStore/jks的话按照下面来选择：&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;Create new，进入创建&lt;/strong&gt;keyStore/jks界面，然后填入相关的信息，具体如何填写，其实没有固定要求，里面的内容尽量正规一些，方便记忆。&lt;/p&gt;
&lt;p&gt;4、进入选择生成&lt;strong&gt;apk&lt;/strong&gt;导出的文件路径，然后选择&lt;strong&gt;apk&lt;/strong&gt;的模式：&lt;strong&gt;release&lt;/strong&gt;，勾选下面的&lt;strong&gt;V1&lt;/strong&gt;和&lt;strong&gt;V2&lt;/strong&gt;，二者缺一不可，选择无误之后，点击&lt;strong&gt;Finish&lt;/strong&gt;按钮即可开始打包&lt;strong&gt;apk&lt;/strong&gt;；&lt;/p&gt;
&lt;p&gt;5、短暂的等待之后，在右下角会提示一个弹框，提示打包&lt;strong&gt;apk&lt;/strong&gt;成功，那么根据第&lt;strong&gt;4&lt;/strong&gt;步选择的&lt;strong&gt;apk&lt;/strong&gt;生成导出的文件夹（不知道的话，重新再走一遍）就可以看到打包好的&lt;strong&gt;apk&lt;/strong&gt;文件了。&lt;/p&gt;</description></item><item><title>Android 打包签名的几种方式</title><link>https://zhangdapeng.dev/p/android-da-bao-qian-ming-de-ji-zhong-fang-shi/</link><pubDate>Wed, 30 Jul 2025 11:43:49 +0800</pubDate><guid>https://zhangdapeng.dev/p/android-da-bao-qian-ming-de-ji-zhong-fang-shi/</guid><description>&lt;img src="https://res.cloudinary.com/dy5dvcuc1/image/upload/v1603808282/walkerfree/Ju3ceiZzGSSQacR2juGN98.png" alt="Featured image of post Android 打包签名的几种方式" /&gt;&lt;h3 id="android打包签名第一种方式通过ide比如eclipseandroid-studio"&gt;Android打包签名第一种方式：通过IDE，比如Eclipse、Android Studio
&lt;/h3&gt;&lt;p&gt;这种方式，也是比较普遍的方式，通过IDE -&amp;gt; Build -&amp;gt; Generate Signed Bundle / Apk&amp;hellip;&lt;/p&gt;
&lt;h3 id="android打包签名第二种方式通过gradle"&gt;Android打包签名第二种方式：通过gradle
&lt;/h3&gt;&lt;p&gt;gradle可以通过命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gradle aR
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gradle assembleRelease
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面命令打Release包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gradle aD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gradle assembleDebug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面命令打Debug包&lt;/p&gt;
&lt;h3 id="android打包签名第三种方式通过keytool工具"&gt;Android打包签名第三种方式：通过keytool工具
&lt;/h3&gt;&lt;p&gt;在终端签名，不过这种方式签名前要把包生成好&lt;/p&gt;</description></item><item><title>Android使用Intent传递数据的方式</title><link>https://zhangdapeng.dev/p/android-shi-yong-intent-chuan-di-shu-ju-de-fang-shi/</link><pubDate>Thu, 03 Jul 2025 11:58:47 +0000</pubDate><guid>https://zhangdapeng.dev/p/android-shi-yong-intent-chuan-di-shu-ju-de-fang-shi/</guid><description>&lt;p&gt;&lt;strong&gt;第一种，直接使用Intent去传递数据&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//传递数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, OtherActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;intent.&lt;span style="color:#a6e22e"&gt;putExtra&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//接收数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; getIntent();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; intent.&lt;span style="color:#a6e22e"&gt;getStringExtra&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第二种，使用Application/全局变量传递传递数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;创建一个Application的类&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MyApp&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; Application {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; String name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; String &lt;span style="color:#a6e22e"&gt;getName&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setName&lt;/span&gt;(String name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onCreate&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;super&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;onCreate&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; setName(&lt;span style="color:#e6db74"&gt;&amp;#34;maomao&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//使用并定义myApp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; MyApp myApp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//实例化Application，并传递数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myApp &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (MyApp)getApplication();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myApp.&lt;span style="color:#a6e22e"&gt;setName&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;maomaomao&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, ShowNameActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//接收数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; MyApp myApp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myApp &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (MyApp) getApplication();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; myApp.&lt;span style="color:#a6e22e"&gt;getName&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;这种方式千万别忘记要配置一下AndroidManifest.xml这个文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在application 添加&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;android:name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;.MyApp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里的MyApp 就是上面定义的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三种，使用剪切板传递数据&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//传递数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ClipboardManager clipboardManager &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (ClipboardManager) getSystemService(Context.&lt;span style="color:#a6e22e"&gt;CLIPBOARD_SERVICE&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clipboardManager.&lt;span style="color:#a6e22e"&gt;setText&lt;/span&gt;(name);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, ShowNameActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;//接收数据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ClipboardManager clipboardManager &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (ClipboardManager) getSystemService(Context.&lt;span style="color:#a6e22e"&gt;CLIPBOARD_SERVICE&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; clipboardManager.&lt;span style="color:#a6e22e"&gt;getText&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以使用剪切板的方式传递对象&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//创建对象MyData&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MyData&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; Serializable {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; age;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; String name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MyData&lt;/span&gt;(String name, &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; age){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;super&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;age&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; age;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getAge&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; age;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setAge&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; age) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;age&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; age;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; String &lt;span style="color:#a6e22e"&gt;getName&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setName&lt;/span&gt;(String name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; String &lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;MyData{&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;age=&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; age &lt;span style="color:#f92672"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;, name=&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; name &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;\&amp;#39;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;}&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//对象方式传数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MyData myData &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; MyData(&lt;span style="color:#e6db74"&gt;&amp;#34;mao&amp;#34;&lt;/span&gt;, 23);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//将对象转为字符串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ClipboardManager clipboardManager &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (ClipboardManager) getSystemService(Context.&lt;span style="color:#a6e22e"&gt;CLIPBOARD_SERVICE&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ByteArrayOutputStream byteArrayOutputStream &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ByteArrayOutputStream();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String base64String &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ObjectOutputStream objectOutputStream &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ObjectOutputStream(byteArrayOutputStream);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; objectOutputStream.&lt;span style="color:#a6e22e"&gt;writeObject&lt;/span&gt;(myData);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base64String &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Base64.&lt;span style="color:#a6e22e"&gt;encodeToString&lt;/span&gt;(byteArrayOutputStream.&lt;span style="color:#a6e22e"&gt;toByteArray&lt;/span&gt;(), Base64.&lt;span style="color:#a6e22e"&gt;DEFAULT&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; objectOutputStream.&lt;span style="color:#a6e22e"&gt;close&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#66d9ef"&gt;catch&lt;/span&gt; (Exception e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clipboardManager.&lt;span style="color:#a6e22e"&gt;setText&lt;/span&gt;(base64String);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, ShowNameActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//接收对象数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ClipboardManager clipboardManager &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (ClipboardManager) getSystemService(Context.&lt;span style="color:#a6e22e"&gt;CLIPBOARD_SERVICE&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String msg &lt;span style="color:#f92672"&gt;=&lt;/span&gt; clipboardManager.&lt;span style="color:#a6e22e"&gt;getText&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;byte&lt;/span&gt;&lt;span style="color:#f92672"&gt;[]&lt;/span&gt; base64Bype &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Base64.&lt;span style="color:#a6e22e"&gt;decode&lt;/span&gt;(msg, Base64.&lt;span style="color:#a6e22e"&gt;DEFAULT&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ByteArrayInputStream byteArrayInputStream &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ByteArrayInputStream(base64Bype);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ObjectInputStream objectInputStream &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ObjectInputStream(byteArrayInputStream);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyData myData &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (MyData) objectInputStream.&lt;span style="color:#a6e22e"&gt;readObject&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String str &lt;span style="color:#f92672"&gt;=&lt;/span&gt; myData.&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#66d9ef"&gt;catch&lt;/span&gt; (Exception e){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第四种，直接使用静态变量传递数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这种方式需要在接收数据的Activity中定义自己的属性变量&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//定义变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; age;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; String name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//传递数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;intent.&lt;span style="color:#a6e22e"&gt;setClass&lt;/span&gt;(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, ShowNameActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ShowNameActivity.&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;maomaomaomao&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ShowNameActivity.&lt;span style="color:#a6e22e"&gt;age&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 90;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//接收数据-直接使用变量的数据就好了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Log.&lt;span style="color:#a6e22e"&gt;in&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;name &amp;gt;&amp;gt;&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; name &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34; age&amp;gt;&amp;gt;&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; age);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android中Activity之间的跳转借助Intent</title><link>https://zhangdapeng.dev/p/android-zhong-activity-zhi-jian-de-tiao-zhuan-jie-zhu-intent/</link><pubDate>Thu, 03 Jul 2025 11:58:39 +0000</pubDate><guid>https://zhangdapeng.dev/p/android-zhong-activity-zhi-jian-de-tiao-zhuan-jie-zhu-intent/</guid><description>&lt;p&gt;相对于iOS要简单的多了。哈哈。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, OtherActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;intent.&lt;span style="color:#a6e22e"&gt;putExtra&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android中给按钮添加onClick的操作事件</title><link>https://zhangdapeng.dev/p/android-zhong-gei-an-niu-tian-jia-onclick-de-cao-zuo-shi-jian/</link><pubDate>Thu, 03 Jul 2025 11:58:34 +0000</pubDate><guid>https://zhangdapeng.dev/p/android-zhong-gei-an-niu-tian-jia-onclick-de-cao-zuo-shi-jian/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//第一步：声明一个button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; Button button;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//实例化这个button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;button &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (Button) &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;findViewById&lt;/span&gt;(R.&lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;button&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//给这个button添加onclick事件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;button.&lt;span style="color:#a6e22e"&gt;setOnclickListener&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; View.&lt;span style="color:#a6e22e"&gt;OnClickListener&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onClick&lt;/span&gt;(View view){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Intent intent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Intent(MainActivity.&lt;span style="color:#a6e22e"&gt;this&lt;/span&gt;, OtherActivity.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		intent.&lt;span style="color:#a6e22e"&gt;putExtra&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		startActivity(intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android webview中的页面出现的部分Bug及解决方案</title><link>https://zhangdapeng.dev/p/android-webview-zhong-de-ye-mian-chu-xian-de-bu-fen-bug-ji-jie-jue-fang-an/</link><pubDate>Thu, 03 Jul 2025 11:07:40 +0000</pubDate><guid>https://zhangdapeng.dev/p/android-webview-zhong-de-ye-mian-chu-xian-de-bu-fen-bug-ji-jie-jue-fang-an/</guid><description>&lt;p&gt;写移动页面时给一个图片添加样式如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;img&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;.05&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;rem&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;#5c0008&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border-radius&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在IOS上正常，部分安卓的手机却不能正常显示（例如vivo手机），查阅了资料后发现在安卓低版本的手机上border-radius这个css 属性确实存在该问题以及发现一些其他的问题，特此记下！&lt;/p&gt;
&lt;p&gt;一、Android2.3 自带浏览器不支持%&lt;/p&gt;
&lt;p&gt;通常我们实现一个圆只需要&lt;code&gt;border-radius：50%&lt;/code&gt;就可以了，但是在Android2.3中是不支持百分比的，要兼容的话我们只能使用一个较大值例如&lt;code&gt;border-radius：999px;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;二、Android及Safari低版本img的圆角问题（就是本文开头提到的问题）&lt;/p&gt;
&lt;p&gt;当img元素有border时设置border-radius会导致圆角变形（如图）&lt;/p&gt;
&lt;p&gt;border-radius在Android低版本的bug&lt;/p&gt;
&lt;p&gt;解决办法就是在外面嵌套一个父元素然后设置其border和border-radius即可解决。&lt;/p&gt;
&lt;p&gt;三、android 4.2.x背景色溢出和不支持border-radius 缩写&lt;/p&gt;
&lt;p&gt;在Android4.2.x系统自带浏览器中，同时设置了border-radius和背景色的时候，背景色会溢出到圆角外，需要使用&lt;code&gt;background-clip:padding-box;&lt;/code&gt;来修复。&lt;/p&gt;
&lt;p&gt;android 4.2.x不支持border-radius 缩写解决办法就是使用border-radius的四个扩写属性，缩写属性放在后面。如下(自己借了几个手机并没发现这个问题)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;s&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border-top-left-radius&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border-top-right-radius&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;border-&lt;/span&gt; bottom-right-radius: &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border-bottom-left-radius&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border-radius&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;999&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Android SDK Manager 下载缓慢解决办法</title><link>https://zhangdapeng.dev/p/android-sdk-manager-xia-zai-huan-man-jie-jue-ban-fa/</link><pubDate>Fri, 27 Jun 2025 14:14:40 +0000</pubDate><guid>https://zhangdapeng.dev/p/android-sdk-manager-xia-zai-huan-man-jie-jue-ban-fa/</guid><description>&lt;p&gt;在网上找了些资料，分析了下载Log，发现各个Package可以使用迅雷等工具下载。下载链接如下：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://dl-ssl.google.com/android/repository/" target="_blank" rel="noopener"
 &gt;https://dl-ssl.google.com/android/repository/&lt;/a&gt; + 包名&lt;/p&gt;
&lt;p&gt;包名命名方式：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Documentation for Android SDK: docs-xx_r0x.zip&lt;/p&gt;
&lt;p&gt;SDK Platform: android-xxx_r0x.zip&lt;/p&gt;
&lt;p&gt;Samples for SDK: samples-xx_r0x.zip&lt;/p&gt;
&lt;p&gt;ARM EABI v7a System Image: sysimg_armv7a-xx_r0x.zip&lt;/p&gt;
&lt;p&gt;Google API: google_apis-xx_r0x.zip&lt;/p&gt;
&lt;p&gt;Sources for Android SDK: sources-xx_r0x.zip&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;xx、x分别是API版本及版本号，例如 Android 4.4 API版本为19，版本号为1。那么其Sources for Android SDK对应的下载连接：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://dl-ssl.google.com/android/repository/sources-19_r01.zip" target="_blank" rel="noopener"
 &gt;https://dl-ssl.google.com/android/repository/sources-19_r01.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载好的包放入SDK下的temp目录，启动Android SDK Manager勾选对应的包，正常安装即可。&lt;/p&gt;</description></item><item><title>PHP针对iPhone和Android设备输出不同的viewport</title><link>https://zhangdapeng.dev/p/php-zhen-dui-iphone-he-android-she-bei-shu-chu-bu-tong-de-viewport/</link><pubDate>Fri, 13 Jun 2025 10:13:12 +0000</pubDate><guid>https://zhangdapeng.dev/p/php-zhen-dui-iphone-he-android-she-bei-shu-chu-bu-tong-de-viewport/</guid><description>&lt;p&gt;PHP针对iPhone和Android设备输出不同的viewport&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//if iphone
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$browser &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;strpos&lt;/span&gt;($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_USER_AGENT&amp;#39;&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#34;iPhone&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; $browser) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $browser &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;iphone&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//if android
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$android &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;strpos&lt;/span&gt;($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_USER_AGENT&amp;#39;&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#34;Android&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; $android) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $brower &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;android&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;html模版&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($browser &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;iphone&amp;#39;&lt;/span&gt;) { &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; &amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, minimum-scale=1.0, maximum-scale=1.0&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;lt;?php } elseif ($brower == &amp;#39;android&amp;#39;) { ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; &amp;lt;meta name=&amp;#34;HandheldFriendly&amp;#34; content=&amp;#34;true&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; &amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, height=device-height, user-scalable=no&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;lt;?php } ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>