hey, are this can help me development an android kernel and an android custom rom? answer plz
Hi.
Simple question - when writing apps for Android, does it matter if it's in C++ or Java?
Can I have access to all Android resources (like phonebook, sounds, LED, vibration etc) from Java?
- An overview over a wide range of topics that are used by every programming language
So lets start ...A program be it in whichever language it always begins with one thing
>Importing necessary libraries
=What does it mean??
Lets say you have to get a door fixed by the carpenter..The carpenter would always need one thing to fix your door i.e. his toolbox. Similarly a Program written in any language would need its toolbox aka libraries to perform whatever task you have for it. Some languages require you to add the libraries required at the beginning of the program while some like python or bash do not need it
Note: In a bash script you need to add the lines #!/bin/bash to tell the interpreter that it is a bash script
In C/C++ this is how you include a library file
Note: A library file in C/C++ is actually called a header file and its extension is .h(You might have seen many .h files in any android source files(ROMs or Kernels)
Code:For C : #include<stdio.h> For C++ #include<iostream.h>
Please note that this is a single example where stdio.h(Full form: Standard input/output) file contains utilities that is used to print something on your monitor or scan whatever you type in your keyboard etc..
For java, you need to get the .jar files. However where do we have to put it is the tricky part. My suggestion as of now would be to use Eclipse and you will be able to see that when you create a java project, Eclipse directly creates the tree structure of your project with a tab called libraries. Just add the jar files there and you are good to go
or
trickier method is to create a lib folder or any folder in your project and add the jar files there and then you just have to set a path variable in your environment settings. Add a path of your jar files in your "PATH" variable(for windows)..in linux, just define and export the PATH in your bashrc file
Note: You will come across import functionality in Java. Import functionality is different and has nothing to with importing libraries. I will explain this at the end of this post
Ok,So lets assume your environment is set, your libraries have been defined...Now its time to start the actual coding
>Initializing variables
Prolly the most important step in this guide. What are variables??
in simple lay man terms, is something that is used in programming to store a value. Now the value can be a lot of things, value can be a number(eg:. 2), value can be a letter of English alphabet(eg: b), It can be a line of letters(eg: Abc), can be anything....
so basically a variable will be something like a=2;
where a is the variable name and 2 is the value...
similarly a = 'a' (where a would be the variable and the a in quotes would be the a character)
But its not that simple, in C,C++ and Java you need to explicitly specify what type of variable it is( The compiler allocates memory according to what you specify)
Note: Python and bash don't need such a declaration( a = 2 is good enough... )
So i C/C++ and Java, variable declaration must be something like
Code:int a; char b; float c; or int a=2; char b = 's'; float c= 2.00
Where int is integer value,b is character,c is float
Float is nothing but a decimal value is known as float.Please also note the semi colon( after every statement.semicolon in C,C++,java is used to terminate a statement(Except loop)
=Why it needs to be defined in c/c++/java and not in python/pearl/bash??
Every compiler is different. In C/C++/Java, when a variable is declared, memory is assigned to it. For eg. If you say int a then variable a is assigned 2 bytes, now you say char a, a is assigned 1 byte. In python/bash/pearl variable memory is dynamically allocated according to its value and therefore we do not need to specify its type.
So what happens if you assign an char variable(say char a) an integer value
eg:
Code:int a; a= 'a';
The next section will tell you what happens with the above code....
Type casting (You can skip this section and come back later if you feel its confusing you)...
What if you had to convert a float value to an int value or an int to float..or simple a char value to int(Will give its ASCII value which is your job to find out what that is) or as simple as taking input as char...like '0' and converting it to 0...
That is where type casting comes into picture
There are two types of type casting
Implicit and Explicit
Implicit type casting means that the type is changed automatically by the compiler itself. Explicit is just the opposite..Will show you all scenarios...
Code:int a=2; int b=3; float c; float c= a+b; // compiler automatically converts value of a and b to int and calculates(Implicit) --------------------------- float a = "10.00"; //float values float b = "20.50"; int c; c=(int)a+(int)b; //Explicit type casting printf("%d",c); -------------------------- char a= 'a'; int b = a; //implicit or int b = (int)a; //explicit Note: Where implicit is required you can use explicit type casting as well to be safe... ----------------------- now char a = '2'; int b= a - '0' //used to take number as character input and assign it to integer variable Again you can write this as int b = a; or int b = (int)a - '0'
Now how to know which one require explicit or implicit type casting
That is your job to find out....
Hint:
float to int causes truncation, i.e. removal of the fractional part;
double to float causes rounding of digit;
long int to int causes dropping of excess higher order bits
>Printing and scanning
Now for any program on this planet to work, you need one basic thing. The program should be able to display something on your monitor.
Now combine that with taking inputs from the user. You will get an interactive program that takes inputs from a user and prints the result accordingly. the command to print differs from language to language
Code:For C printf("Hello"); For C++ cout<< "Hello" ; For Java system.out.println("Hello"); For Python print "Hello" For bash echo "Hello"
All of these will give the same output on the screen:
Hello
Note: Please note that C/C++/Java requires brackets while python/bash don't.
Note: Check out the semi-colons again. Python/pearl/Bash don't require a semi-colon to end a statement
Now comes scanning part. Lets say you want to take two integer inputs from the user.Now we'll combine it with variable declaration and print statement so that u can understand better
Note: From here on i will mainly show you examples in C or C++ because it would get too confusing for you to handle all the syntaxes together. Once your C knowledge increases, you can easily learn the syntaxes of other languages and try programming
Code:C int a; int b; printf("Enter two numbers"); scanf("%d %d",&a,&b) C++ int a; int b; cout << "Enter two numbers"; cin>>a; cin>>b; Java (A bit complex and thats why i wont include Java/python or even bash after this) int a; int b; Scanner s=new Scanner(system.in); System.out.println("Enter two numbers"); a=s.next(); b=s.next();
Now in C you will notice two %d %d...%d tells the compiler that its an integer value..it is repeated two times because you take two input values.&a,&b will tell the compiler that store the first input in a and the second one in b. You could also have written it as
scanf("%d",&a);
scanf("%d",&b);
for int its %d
for char its %c
for float its %f
so in order to take character input the syntax will be
scanf("%c",&a)
>Now comes the operator part
Lets go over some basic operations : there are 4 operators in maths or Programming
sum,minus,division,multiplication
in programming it would be +, -, /, *
so a+b would give you the addition of integer values in a and b
I will write a simple C program with comments after # sign now to take two numbers as input and add them,subtract them, divide them and multiply them
Code:#include<stdio.h> // initializes the library for standard input/output #include<conio.h> // Another header file containing command to clear the screen void main() // for now just learn this,this is how you write the body of a C program,anything that you code inside is executed(no semi-colon here) { // Curly brackets are used to denote the start of your program body int a; // variable initializing int b; // variable initializing clrscr(); // module to clear screen,not really required but i used it to show how conio.h is included to make this module work printf("enter two numbers"); scanf("%d %d",&a,&b); #now we need to store the value of the result somewhere,so we define new variables int c,d,e,f; #to add c=a+b; #to subtract d=a-b; #to divide e=a/b; #to multiply f=a*b; #Now to print the result printf("the result is as follows %d,%d,%d,%d",c,d,e,f); } # curly bracket to end the program
Thats it......now variable e can be taken in float..because if you take it as int. and say a is 3 and b is 2 then 3/2 would give you 1.50,a float value
Modulus(%) operator
Modulus operator is used to calculate the remainder of two numbers if divided....
what are its uses?...Well one major use is you can find out if a number is odd or even
Code:int a=20; int b=10; int c=a%b; printf("%d",c); // would yield 0 as result so wen coupled with if if ( a%2 == 0 ) // Check next post to find out about if...:) would check if number is even if a is not even, then it would give a remainder wen divided by 2 and you can easily find out...
There is one slight problem with it though....what if you have a negative number and divide it with a positive number(non divisible numbers)...Then the remainder comes in negative...
say -7%3 should return remainder as 1
but it returns -1..So you have to be careful...Best it to check if remainder is non zero...than exact remainder
Continued in Post 3
Hi.
Simple question - when writing apps for Android, does it matter if it's in C++ or Java?
Can I have access to all Android resources (like phonebook, sounds, LED, vibration etc) from Java?
static struct pll pll2_tbl[] = {
{ 42, 0, 1, 0 }, /* 806 MHz */
{ 53, 1, 3, 0 }, /* 1024 MHz */
{ 125, 0, 1, 1 }, /* 1200 MHz */
{ 73, 0, 1, 0 }, /* 1401 MHz */
};
and
static struct clkctl_acpu_speed acpu_freq_tbl[] = {
{ 0, 24576, LPXO, 0, 0, 30720000, 900, VDD_RAW(900) },
{ 0, 61440, PLL_3, 5, 11, 61440000, 900, VDD_RAW(900) },
{ 1, 122880, PLL_3, 5, 5, 61440000, 900, VDD_RAW(900) },
{ 0, 184320, PLL_3, 5, 4, 61440000, 900, VDD_RAW(900) },
{ 0, MAX_AXI_KHZ, AXI, 1, 0, 61440000, 900, VDD_RAW(900) },
{ 1, 245760, PLL_3, 5, 2, 61440000, 900, VDD_RAW(900) },
{ 1, 368640, PLL_3, 5, 1, 122800000, 900, VDD_RAW(900) },
/* AXI has MSMC1 implications. See above. */
{ 1, 768000, PLL_1, 2, 0, 153600000, 1050, VDD_RAW(1050) },
/*
* AXI has MSMC1 implications. See above.
*/
{ 1, 806400, PLL_2, 3, 0, UINT_MAX, 1100, VDD_RAW(1100), &pll2_tbl[0]},
{ 1, 1024000, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW(1200), &pll2_tbl[1]},
{ 1, 1200000, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW(1200), &pll2_tbl[2]},
{ 1, 1401600, PLL_2, 3, 0, UINT_MAX, 1250, VDD_RAW(1250), &pll2_tbl[3]},
{ 0 }
};
{78, 1, 3, 0 }, /* 1516 MHz */
{83, 1, 3, 0 }, /* 1612 MHz */
{88, 1, 3, 0 }, /* 1708 MHz */
and
{ 1, 1516800, PLL_2, 3, 0, UINT_MAX, 1250, VDD_RAW(1250), &pll2_tbl[6]},
{ 1, 1612800, PLL_2, 3, 0, UINT_MAX, 1275, VDD_RAW(1275), &pll2_tbl[7]},
{ 1, 1708800, PLL_2, 3, 0, UINT_MAX, 1300, VDD_RAW(1300), &pll2_tbl[8]},
{ 1, 1804800, PLL_2, 3, 0, UINT_MAX, 1325, VDD_RAW(1325), &pll2_tbl[9]},
{ 0 }
};
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!
obj-$(CONFIG_CPU_FREQ_GOV_Governorname) += cpufreq_governorname.o
#btw check out the fact that we are adding .o file not .c, I will explain this later
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_Governorname)
extern struct cpufreq_governor cpufreq_gov_Governorname;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_Governorname)
config IOSCHED_SIO
tristate "Simple I/O scheduler"
default y
---help---
The Simple I/O scheduler is an extremely simple scheduler,
based on noop and deadline, that relies on deadlines to
ensure fairness. The algorithm does not do any sorting but
basic merging, trying to keep a minimum overhead. It is aimed
mainly for aleatory access devices (eg: flash devices).
obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
For C :
#include<stdio.h>
For C++
#include<iostream.h>
int a;
char b;
float c;
or
int a=2;
char b = 's';
float c= 2.00
int a;
a= 'a';
int a=2;
int b=3;
float c;
float c= a+b; // compiler automatically converts value of a and b to int and calculates(Implicit)
---------------------------
float a = "10.00"; //float values
float b = "20.50";
int c;
c=(int)a+(int)b; //Explicit type casting
printf("%d",c);
--------------------------
char a= 'a';
int b = a; //implicit
or
int b = (int)a; //explicit
Note: Where implicit is required you can use explicit type casting as well to be safe...
-----------------------
now char a = '2';
int b= a - '0' //used to take number as character input and assign it to integer variable
Again you can write this as
int b = a;
or
int b = (int)a - '0'
For C
printf("Hello");
For C++
cout<< "Hello" ;
For Java
system.out.println("Hello");
For Python
print "Hello"
For bash
echo "Hello"
C
int a;
int b;
printf("Enter two numbers");
scanf("%d %d",&a,&b)
C++
int a;
int b;
cout << "Enter two numbers";
cin>>a;
cin>>b;
Java (A bit complex and thats why i wont include Java/python or even bash after this)
int a;
int b;
Scanner s=new Scanner(system.in);
System.out.println("Enter two numbers");
a=s.next();
b=s.next();
#include<stdio.h> // initializes the library for standard input/output
#include<conio.h> // Another header file containing command to clear the screen
void main() // for now just learn this,this is how you write the body of a C program,anything that you code inside is executed(no semi-colon here)
{ // Curly brackets are used to denote the start of your program body
int a; // variable initializing
int b; // variable initializing
clrscr(); // module to clear screen,not really required but i used it to show how conio.h is included to make this module work
printf("enter two numbers");
scanf("%d %d",&a,&b);
#now we need to store the value of the result somewhere,so we define new variables
int c,d,e,f;
#to add
c=a+b;
#to subtract
d=a-b;
#to divide
e=a/b;
#to multiply
f=a*b;
#Now to print the result
printf("the result is as follows %d,%d,%d,%d",c,d,e,f);
} # curly bracket to end the program
int a=20;
int b=10;
int c=a%b;
printf("%d",c); // would yield 0 as result
so wen coupled with if
if ( a%2 == 0 ) // Check next post to find out about if...:)
would check if number is even
if a is not even, then it would give a remainder wen divided by 2 and you can easily find out...
#include<stdio.h>
void main()
{
int i;
for (i=1;i<=50;i++) // see the contents of the loop in brackets ( i=0 >> stores the value 0 in i; i<=50 >> this is the actual condition,so as long as i's
{ value is less or equal to 50 the loop's body will run; i++ >> this increments the value by 1 every time the loop is executed
printf("dark wraith"); // the body of the loop is executed as long as the condition is satisfied
} // The curly bracket denotes the end of the loop
}
int i=0;
while(i<=50)
{
i++;
printf("dark wraith");
}
#include<stdio.h>
void main()
{
char a;
printf("Do you want to print a name(y/n");
scanf("%c",&a); // stores user input in char variable a
if(a ="y" ) // checks if whatever user entered is y
{
printf("dark wraith");
else if (a = "n") // additional condition to check if user inputs n
{
printf("no name"); // Note that the statement inside a loop body is terminated by semi-colon
}
else // if user enters anything apart from y/n then this is used
{
printf("enter a valid choice");
}
}
} // the three brackets here are one for the last else, one for the if and the last bracket is for closing void main
#include<stdio.h>
#include<stdlib.h> //header file for exit and break functions
void main()
{
int i;
printf("Press 1 to say Hi");
printf("Press 2 to say Hello");
printf("Press 3 to display XDA on screen");
printf("Press 4 to exit");
scanf("%d",&i)
switch( i )
{
case 1: //Executed if input is 1
printf("Hi");
break; // Break statement is used to skip the block and go to the next line after the entire switch case block.It is mandatory except the last default case (Though its better to include in that as well)
case 2:
printf("Hello");
break;
case 3 :
printf("XDA");
break;
case 4 :
exit(0);
default :
printf("make up your mind and try again..:P");
}
}
#!/bin/bash
echo "Press 1 to say Hi"
echo "Press 2 to say Hello"
echo "Press 3 to display XDA on screen"
echo "Press 4 to exit"
read input
case $input in
1)echo "Hi";; # A case ends with ;; not break
2)echo "Hello";;
3)echo "XDA";;
4)exit;;
#include<stdio.h>
void main()
{
char a[20]; // array definition
printf("Please enter your name");
scanf("%c",&a); // array is stored normally just like char or int using scanf
// Now to print the array
for(int i = 0 ; a[i] != '\0' ; i++)
// i= 0 and != means not equal to so the loop will go on till \0 in array i e the last character is not encountered
{
printf("%c",a[i]); // Prints array a[0] then a[1] and so on till a[] reached \0
}
}
#include<stdio.h>
void main()
{
char name[20];
printf("Enter a name");
scanf("%c",&name);
for( int i=0;a[i] !='\0' ; i++)
{
if(a[1] == 'a') // will check if second character i.e. position 2 has character a
// This is an example of nested if statement in for loop
{
printf("Yes");
}
else printf("no");
}
#include<stdio.h>
void add(int a,int b,int c) #We can use void here as we don't need return, we can just print the result from here
{
int c=a+b+c;
printf("%d",c);
}
void main()
{
int a,b,c;
a=2;
b=3;
c=4;
add(a,b,c);
// Now lets try one more thing
a=4;
b=5; // You can change values(Hence the name variable)..:P
c=7;
add(a,b,c);
}
typedef struct
{
char name[64],
char course[128],
int age,
int year,
}
student;
in main you can access it by
student s;
s.name;
Thanks! Not really for Android (sorry!), but you seriously helped me a lot in getting the hang of C! (Bonus: it's a lot like JavaScript, which I'm already pretty good at!)