You'd use other expressions to differentiate (like you did in English as well).
Imagine that "Der Hund ist böse." is a sentence said by a child not knowing about any reasons but feeling like 'Oh oh. I don't won't to get to close to this dog. It might bite me.'
Maybe it is rabid (=tollwütig) or it has a vicious character (einen bösartigen Charakter) or it's the personified evil itself (das personifizierte Böse selbst).
The person who says this sentence is either unable or unwilling to differentiate (because it is not necessary at that moment?).
I'm not sure, but isn't "cross" more like "annoyed" or "upset"? If so it might be too weak to be replace "angry" in this context.
Although I have to admit that this German sentence is not always used for the same 'degree' of being angry. Many Germans tend to use "böse" exorbitantly often when talking to little children if there is an animal nearby that is even slightly angry to prevent the child from really making that animal angry...