Difference between revisions of "Main Page"

From Contiki
Jump to: navigation, search
Line 20: Line 20:
 
== To-Do ==
 
== To-Do ==
 
* Find out how to input code lists with syntax highlighting. Install SyntaxHighlight extension (http://www.mediawiki.org/wiki/Extension:SyntaxHighlight) or ASHighlight extension (http://www.mediawiki.org/wiki/Extension:ASHighlight)
 
* Find out how to input code lists with syntax highlighting. Install SyntaxHighlight extension (http://www.mediawiki.org/wiki/Extension:SyntaxHighlight) or ASHighlight extension (http://www.mediawiki.org/wiki/Extension:ASHighlight)
−
 
−
<source lang="java">
 
−
              try {
 
−
                    AndroidAnalyzer analyzer = new AndroidAnalyzer(fileName);
 
−
 
−
                    Statement stmt = conn.createStatement();
 
−
                    ResultSet rs = stmt.executeQuery("select no from callgraph0 where no="+no);
 
−
 
−
                    if(!rs.next()) {
 
−
                        totalMethod = totalNativeMethods = totalClasses = packageMethods = packageNativeMethods = packageClasses = 0;
 
−
                        analyzer.buildCallGraph(false);
 
−
                        totalMethod = Scene.v().getReachableMethods().size();
 
−
                        QueueReader<MethodOrMethodContext> methods = Scene.v().getReachableMethods().listener();
 
−
                        Set<SootClass> classSet = new HashSet<SootClass>();
 
−
                        while (methods.hasNext()) {
 
−
                            SootMethod sm = methods.next().method();
 
−
                            classSet.add(sm.getDeclaringClass());
 
−
                            if (sm.isAndroidPackageMethod()) {
 
−
                                packageMethods++;
 
−
                            }
 
−
                            if (sm.isNative()) {
 
−
                                if (sm.isAndroidPackageMethod()) {
 
−
                                    packageNativeMethods++;
 
−
                                }
 
−
                                totalNativeMethods++;
 
−
                            }
 
−
                        }
 
−
 
−
                        for (SootClass sc : classSet) {
 
−
                            if (sc.isAPK()) {
 
−
                                packageClasses++;
 
−
                            }
 
−
                        }
 
−
                        totalClasses = classSet.size();
 
−
 
−
                        System.out.println("Reachable classes  = " + totalClasses);
 
−
                        System.out.println("Reachable package classes  = " + packageClasses);
 
−
                        System.out.println("Reachable methods  = " + totalMethod);
 
−
                        System.out.println("Reachable native methods  = " + totalNativeMethods);
 
−
                        System.out.println("Reachable package methods  = " + packageMethods);
 
−
                        System.out.println("Reachable package native methods  = " + packageNativeMethods);
 
−
 
−
                        try {
 
−
                            pstmt0 = conn.prepareStatement("insert into callgraph0(no,totalMethods,totalNativeMethods,totalClasses,packageMethods,packageNativeMethods,packageClasses) values(?,?,?,?,?,?,?)");
 
−
                            pstmt0.setString(1, no);
 
−
                            pstmt0.setInt(2, totalMethod);
 
−
                            pstmt0.setInt(3, totalNativeMethods);
 
−
                            pstmt0.setInt(4, totalClasses);
 
−
                            pstmt0.setInt(5, packageMethods);
 
−
                            pstmt0.setInt(6, packageNativeMethods);
 
−
                            pstmt0.setInt(7, packageClasses);
 
−
                            pstmt0.execute();
 
−
                            pstmt0.close();
 
−
                        } catch (Exception e) {
 
−
 
−
                        }
 
−
                    }
 
−
                    stmt.close();
 
−
                    rs.close();
 
−
 
−
 
−
                    stmt = conn.createStatement();
 
−
                    rs = stmt.executeQuery("select no from callgraph where no="+no);
 
−
                    if(!rs.next()) {
 
−
                        totalMethod = totalNativeMethods = totalClasses = packageMethods = packageNativeMethods = packageClasses = 0;
 
−
                        analyzer.buildCallGraph(true);
 
−
                        totalMethod = Scene.v().getReachableMethods().size();
 
−
                        QueueReader<MethodOrMethodContext> methods = Scene.v().getReachableMethods().listener();
 
−
                        Set<SootClass> classSet = new HashSet<SootClass>();
 
−
                        while (methods.hasNext()) {
 
−
                            SootMethod sm = methods.next().method();
 
−
                            classSet.add(sm.getDeclaringClass());
 
−
                            if (sm.isAndroidPackageMethod()) {
 
−
                                packageMethods++;
 
−
                            }
 
−
                            if (sm.isNative()) {
 
−
                                if (sm.isAndroidPackageMethod()) {
 
−
                                    packageNativeMethods++;
 
−
                                }
 
−
                                totalNativeMethods++;
 
−
                            }
 
−
                        }
 
−
 
−
                        for (SootClass sc : classSet) {
 
−
                            if (sc.isAPK()) {
 
−
                                packageClasses++;
 
−
                            }
 
−
                        }
 
−
                        totalClasses = classSet.size();
 
−
                        System.out.println("Reachable classes  = " + totalClasses);
 
−
                        System.out.println("Reachable package classes  = " + packageClasses);
 
−
                        System.out.println("Reachable methods  = " + totalMethod);
 
−
                        System.out.println("Reachable native methods  = " + totalNativeMethods);
 
−
                        System.out.println("Reachable package methods  = " + packageMethods);
 
−
                        System.out.println("Reachable package native methods  = " + packageNativeMethods);
 
−
                        try {
 
−
                            pstmt1 = conn.prepareStatement("insert into callgraph(no,totalMethods,totalNativeMethods,totalClasses,packageMethods,packageNativeMethods,packageClasses) values(?,?,?,?,?,?,?)");
 
−
                            pstmt1.setString(1, no);
 
−
                            pstmt1.setInt(2, totalMethod);
 
−
                            pstmt1.setInt(3, totalNativeMethods);
 
−
                            pstmt1.setInt(4, totalClasses);
 
−
                            pstmt1.setInt(5, packageMethods);
 
−
                            pstmt1.setInt(6, packageNativeMethods);
 
−
                            pstmt1.setInt(7, packageClasses);
 
−
                            pstmt1.execute();
 
−
                            pstmt1.close();
 
−
                        } catch (Exception e) {
 
−
 
−
                        }
 
−
                    }
 
−
                    stmt.close();
 
−
                    rs.close();
 
−
                } catch (Exception e) {
 
−
                    e.printStackTrace();
 
−
                }
 
−
</source>
 

Revision as of 12:42, 4 November 2014

Contiki Development at ANRG, University of Southern California

Team

Getting started

Useful links

To-Do