还不错 评分等级到达了B 最好的是A
提示的几处问题 都不是大问题。。
iteye给力噢。。
1.加上ant编译功能。
android update project --name $ProjectName -t 3 -p $ProjectPath
此时会在项目根目录自动生成一个名为build.xml的ant脚本。
2.加入混淆
第一步在命令行中已经可以使用ant进行编译了。因为Android中是这样的,在输入命令ant debug的时候会自动调用{${AndroidSDK}\tools\ant\main_rules.xml目录下的规则文件,所以无需自己写ant脚本了。既然它会调用默认的规则文件(默认文件没有加入混淆功能),那么我们想要混淆,直接在这个规则文件上修改就好了。在名为-dex的target加入一个target,代码如下:
<target name="optimize" depends="compile">
<jar basedir="${out.classes.absolute.dir}" destfile="temp.jar"/>
<java jar="${AndroidSDK}/tools/proguard/lib/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="-injars temp.jar"/>
<arg value="-outjars optimized.jar"/>
<arg value="-libraryjars '${android.jar}'"/>
<!-- <arg value="-libraryjars ${library-jar}/some_lib_used.jar"/> -->
<arg value="-dontpreverify"/>
<arg value="-dontoptimize"/>
<arg value="-dontusemixedcaseclassnames"/>
<arg value="-repackageclasses"/>
<arg value="-allowaccessmodification"/>
<arg value="-keep public class * extends android.app.Activity"/>
<arg value="-keep public class * extends android.app.Service"/>
<arg value="-keep public class * extends android.content.BroadcastReceiver"/>
<arg value="-keep public class * extends android.content.ContentProvider"/>
<arg value="-keep public class * extends android.view.View"/>
<arg value="-optimizationpasses 1"/>
<arg value="-verbose"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-dontskipnonpubliclibraryclassmembers"/>
<arg value="-ignorewarning"/>
</java>
<delete file="temp.jar"/>
<delete dir="${out.classes.absolute.dir}"/>
<mkdir dir="${out.classes.absolute.dir}"/>
<unzip src="/blog_article/optimized.jar" dest="${out.classes.absolute.dir}"/>
<delete file="optimized.jar"/>
</target>
接着在名为-dex的target中进行一个混淆依赖:
<target name="-dex" depends="compile, optimize, -post-compile, -obfuscate"
unless="do.not.compile">
<if condition="${manifest.hasCode}">
<then>
<dex-helper />
</then>
<else>
<echo>hasCode = false. Skipping...</echo>
</else>
</if>
</target>
TableLayout表格布局,将子元素的位置分配到行或列中。TableLayout布局由许多的TableRow(行) 组成,它没有列的概念,列是由行中的控件数目决定的。TableLayout布局也是实际中常用的布局方式。
TableLayout布局不会显示行、列 、单元格的边框线。TableLayout布局应用如图7-17所示。
图7-17 TableLayout1
TableLayout布局文件请参考代码清单7-20,完整代码请参考chapter7_5工程中tablelayout1.xml代码部分(chapter7_5/res/layout/tablelayout1.xml)。
【代码清单7-20】
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TableRow> <TextView android:text="@string/row1_1" android:padding="3dip" /> <TextView android:text="@string/row1_2" android:padding="3dip" /> <TextView android:text="@string/row1_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row2_1" android:padding="3dip" /> <TextView android:text="@string/row2_2" android:padding="3dip" /> <TextView android:text="@string/row2_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row3_1" android:padding="3dip" /> <TextView android:text="@string/row3_2" android:padding="3dip" /> <TextView android:text="@string/row3_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row4_1" android:padding="3dip" /> <TextView android:text="@string/row4_2" android:padding="3dip" /> <TextView android:text="@string/row4_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row5_1" android:padding="3dip" /> <TextView android:text="@string/row5_2" android:padding="3dip" /> <TextView android:text="@string/row5_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row6_1" android:padding="3dip" /> <TextView android:text="@string/row6_2" android:padding="3dip" /> <TextView android:text="@string/row6_3" android:padding="3dip" /> </TableRow> </TableLayout>
下面再看一个合并单元格TableLayou布局应用图7-18所示。
图7-18 TableLayout2
TableLayout布局文件请参考代码清单7-21,完整代码请参考chapter7_5工程中tablelayout2.xml代码部分(chapter7_5/res/layout/tablelayout2.xml)。
【代码清单7-21】
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="0,1,2"> <TableRow> <TextView android:text="@string/row1_1" android:padding="3dip" /> <TextView android:text="@string/row1_2" android:padding="3dip" /> <TextView android:text="row1_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row2_1" android:padding="3dip" /> <TextView android:text="@string/row2_2" android:padding="3dip" android:layout_span="2" android:background="#ff0060" /> </TableRow> <TableRow> <TextView android:text="@string/row3_1" android:padding="3dip" /> <!-- android:layout_column="1" --> <TextView android:text="@string/row3_2" android:padding="3dip" /> <TextView android:text="row3_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row4_1" android:padding="3dip" /> <TextView android:text="@string/row4_2" android:padding="3dip" /> <TextView android:text="row4_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row5_1" android:padding="3dip" /> <TextView android:text="@string/row5_2" android:padding="3dip" /> <TextView android:text="row5_3" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/row6_1" android:padding="3dip" /> <TextView android:text="@string/row6_2" android:padding="3dip" /> <TextView android:text="row6_3" android:padding="3dip" /> </TableRow> </TableLayout>
TableLayout标签内的android:stretchColumns="0,1,2"属性是第一列、第二列、第三列自动调节列宽。<TableRow>内的TextView控件中的属性android:layout_span="2"是合并一个单元格,如图7-18显示的粉色背景就是合并的单元格。
出自《Android开发案例驱动教程》第七章